Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1816)

Side by Side Diff: webrtc/modules/video_coding/video_coding_impl.cc

Issue 2434073003: Extract bitrate allocation of spatial/temporal layers out of codec impl. (Closed)
Patch Set: VideoCodecImpl fix Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/modules/video_coding/video_coding_impl.h" 11 #include "webrtc/modules/video_coding/video_coding_impl.h"
12 12
13 #include <algorithm> 13 #include <algorithm>
14 #include <utility>
14 15
15 #include "webrtc/common_types.h" 16 #include "webrtc/common_types.h"
17 #include "webrtc/common_video/include/video_bitrate_allocator.h"
16 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" 18 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
17 #include "webrtc/base/criticalsection.h" 19 #include "webrtc/base/criticalsection.h"
20 #include "webrtc/modules/video_coding/codecs/vp8/temporal_layers.h"
21 #include "webrtc/modules/video_coding/include/video_codec_initializer.h"
18 #include "webrtc/modules/video_coding/include/video_codec_interface.h" 22 #include "webrtc/modules/video_coding/include/video_codec_interface.h"
19 #include "webrtc/modules/video_coding/encoded_frame.h" 23 #include "webrtc/modules/video_coding/encoded_frame.h"
20 #include "webrtc/modules/video_coding/jitter_buffer.h" 24 #include "webrtc/modules/video_coding/jitter_buffer.h"
21 #include "webrtc/modules/video_coding/packet.h" 25 #include "webrtc/modules/video_coding/packet.h"
22 #include "webrtc/system_wrappers/include/clock.h" 26 #include "webrtc/system_wrappers/include/clock.h"
23 27
24 namespace webrtc { 28 namespace webrtc {
25 namespace vcm { 29 namespace vcm {
26 30
27 int64_t VCMProcessTimer::Period() const { 31 int64_t VCMProcessTimer::Period() const {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 } 101 }
98 102
99 void Process() override { 103 void Process() override {
100 sender_.Process(); 104 sender_.Process();
101 receiver_.Process(); 105 receiver_.Process();
102 } 106 }
103 107
104 int32_t RegisterSendCodec(const VideoCodec* sendCodec, 108 int32_t RegisterSendCodec(const VideoCodec* sendCodec,
105 uint32_t numberOfCores, 109 uint32_t numberOfCores,
106 uint32_t maxPayloadSize) override { 110 uint32_t maxPayloadSize) override {
111 if (sendCodec != nullptr && sendCodec->codecType == kVideoCodecVP8) {
112 VideoCodec vp8_codec = *sendCodec;
113 std::unique_ptr<TemporalLayersFactory> tl_factory(
114 new TemporalLayersFactory());
115 vp8_codec.VP8()->tl_factory = tl_factory.get();
116 rate_allocator_ = VideoCodecInitializer::GetBitrateAllocator(
117 vp8_codec, std::move(tl_factory));
118 return sender_.RegisterSendCodec(&vp8_codec, numberOfCores,
119 maxPayloadSize);
stefan-webrtc 2016/11/09 11:58:12 I find it a bit difficult to understand lifetime o
sprang_webrtc 2016/11/09 12:26:18 The TemporalLayersFactory is owned by the BitrateA
stefan-webrtc 2016/11/09 12:40:26 Does it make more sense to let the codec own the a
120 }
107 return sender_.RegisterSendCodec(sendCodec, numberOfCores, maxPayloadSize); 121 return sender_.RegisterSendCodec(sendCodec, numberOfCores, maxPayloadSize);
108 } 122 }
109 123
110 int32_t RegisterExternalEncoder(VideoEncoder* externalEncoder, 124 int32_t RegisterExternalEncoder(VideoEncoder* externalEncoder,
111 uint8_t payloadType, 125 uint8_t payloadType,
112 bool internalSource) override { 126 bool internalSource) override {
113 sender_.RegisterExternalEncoder(externalEncoder, payloadType, 127 sender_.RegisterExternalEncoder(externalEncoder, payloadType,
114 internalSource); 128 internalSource);
115 return 0; 129 return 0;
116 } 130 }
117 131
118 int Bitrate(unsigned int* bitrate) const override { 132 int Bitrate(unsigned int* bitrate) const override {
119 return sender_.Bitrate(bitrate); 133 return sender_.Bitrate(bitrate);
120 } 134 }
121 135
122 int FrameRate(unsigned int* framerate) const override { 136 int FrameRate(unsigned int* framerate) const override {
123 return sender_.FrameRate(framerate); 137 return sender_.FrameRate(framerate);
124 } 138 }
125 139
126 int32_t SetChannelParameters(uint32_t target_bitrate, // bits/s. 140 int32_t SetChannelParameters(uint32_t target_bitrate, // bits/s.
127 uint8_t lossRate, 141 uint8_t lossRate,
128 int64_t rtt) override { 142 int64_t rtt) override {
129 return sender_.SetChannelParameters(target_bitrate, lossRate, rtt); 143 return sender_.SetChannelParameters(target_bitrate, lossRate, rtt,
144 rate_allocator_.get());
130 } 145 }
131 146
132 int32_t RegisterProtectionCallback( 147 int32_t RegisterProtectionCallback(
133 VCMProtectionCallback* protection) override { 148 VCMProtectionCallback* protection) override {
134 return sender_.RegisterProtectionCallback(protection); 149 return sender_.RegisterProtectionCallback(protection);
135 } 150 }
136 151
137 int32_t SetVideoProtection(VCMVideoProtection videoProtection, 152 int32_t SetVideoProtection(VCMVideoProtection videoProtection,
138 bool enable) override { 153 bool enable) override {
139 // TODO(pbos): Remove enable from receive-side protection modes as well. 154 // TODO(pbos): Remove enable from receive-side protection modes as well.
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 void RegisterPostEncodeImageCallback( 264 void RegisterPostEncodeImageCallback(
250 EncodedImageCallback* observer) override { 265 EncodedImageCallback* observer) override {
251 post_encode_callback_.Register(observer); 266 post_encode_callback_.Register(observer);
252 } 267 }
253 268
254 void TriggerDecoderShutdown() override { receiver_.TriggerDecoderShutdown(); } 269 void TriggerDecoderShutdown() override { receiver_.TriggerDecoderShutdown(); }
255 270
256 private: 271 private:
257 EncodedImageCallbackWrapper post_encode_callback_; 272 EncodedImageCallbackWrapper post_encode_callback_;
258 vcm::VideoSender sender_; 273 vcm::VideoSender sender_;
274 std::unique_ptr<VideoBitrateAllocator> rate_allocator_;
259 vcm::VideoReceiver receiver_; 275 vcm::VideoReceiver receiver_;
260 }; 276 };
261 } // namespace 277 } // namespace
262 278
263 void VideoCodingModule::Codec(VideoCodecType codecType, VideoCodec* codec) { 279 void VideoCodingModule::Codec(VideoCodecType codecType, VideoCodec* codec) {
264 VCMCodecDataBase::Codec(codecType, codec); 280 VCMCodecDataBase::Codec(codecType, codec);
265 } 281 }
266 282
267 // Create method for the new jitter buffer. 283 // Create method for the new jitter buffer.
268 VideoCodingModule* VideoCodingModule::Create( 284 VideoCodingModule* VideoCodingModule::Create(
(...skipping 22 matching lines...) Expand all
291 EventFactory* event_factory, 307 EventFactory* event_factory,
292 NackSender* nack_sender, 308 NackSender* nack_sender,
293 KeyFrameRequestSender* keyframe_request_sender) { 309 KeyFrameRequestSender* keyframe_request_sender) {
294 assert(clock); 310 assert(clock);
295 assert(event_factory); 311 assert(event_factory);
296 return new VideoCodingModuleImpl(clock, event_factory, nack_sender, 312 return new VideoCodingModuleImpl(clock, event_factory, nack_sender,
297 keyframe_request_sender, nullptr); 313 keyframe_request_sender, nullptr);
298 } 314 }
299 315
300 } // namespace webrtc 316 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698