OLD | NEW |
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 | 14 |
15 #include "webrtc/common_types.h" | 15 #include "webrtc/common_types.h" |
16 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" | 16 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" |
| 17 #include "webrtc/base/criticalsection.h" |
17 #include "webrtc/modules/video_coding/include/video_codec_interface.h" | 18 #include "webrtc/modules/video_coding/include/video_codec_interface.h" |
18 #include "webrtc/modules/video_coding/encoded_frame.h" | 19 #include "webrtc/modules/video_coding/encoded_frame.h" |
19 #include "webrtc/modules/video_coding/jitter_buffer.h" | 20 #include "webrtc/modules/video_coding/jitter_buffer.h" |
20 #include "webrtc/modules/video_coding/packet.h" | 21 #include "webrtc/modules/video_coding/packet.h" |
21 #include "webrtc/system_wrappers/include/clock.h" | 22 #include "webrtc/system_wrappers/include/clock.h" |
22 | 23 |
23 namespace webrtc { | 24 namespace webrtc { |
24 namespace vcm { | 25 namespace vcm { |
25 | 26 |
26 int64_t VCMProcessTimer::Period() const { | 27 int64_t VCMProcessTimer::Period() const { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 }; | 71 }; |
71 | 72 |
72 class VideoCodingModuleImpl : public VideoCodingModule { | 73 class VideoCodingModuleImpl : public VideoCodingModule { |
73 public: | 74 public: |
74 VideoCodingModuleImpl(Clock* clock, | 75 VideoCodingModuleImpl(Clock* clock, |
75 EventFactory* event_factory, | 76 EventFactory* event_factory, |
76 bool owns_event_factory, | 77 bool owns_event_factory, |
77 VideoEncoderRateObserver* encoder_rate_observer, | 78 VideoEncoderRateObserver* encoder_rate_observer, |
78 VCMQMSettingsCallback* qm_settings_callback, | 79 VCMQMSettingsCallback* qm_settings_callback, |
79 NackSender* nack_sender, | 80 NackSender* nack_sender, |
80 KeyFrameRequestSender* keyframe_request_sender) | 81 KeyFrameRequestSender* keyframe_request_sender, |
| 82 EncodedImageCallback* pre_decode_image_callback) |
81 : VideoCodingModule(), | 83 : VideoCodingModule(), |
82 sender_(clock, | 84 sender_(clock, |
83 &post_encode_callback_, | 85 &post_encode_callback_, |
84 encoder_rate_observer, | 86 encoder_rate_observer, |
85 qm_settings_callback), | 87 qm_settings_callback), |
86 receiver_(clock, | 88 receiver_(clock, |
87 event_factory, | 89 event_factory, |
| 90 pre_decode_image_callback, |
88 nack_sender, | 91 nack_sender, |
89 keyframe_request_sender), | 92 keyframe_request_sender), |
90 own_event_factory_(owns_event_factory ? event_factory : NULL) {} | 93 own_event_factory_(owns_event_factory ? event_factory : NULL) {} |
91 | 94 |
92 virtual ~VideoCodingModuleImpl() { own_event_factory_.reset(); } | 95 virtual ~VideoCodingModuleImpl() { own_event_factory_.reset(); } |
93 | 96 |
94 int64_t TimeUntilNextProcess() override { | 97 int64_t TimeUntilNextProcess() override { |
95 int64_t sender_time = sender_.TimeUntilNextProcess(); | 98 int64_t sender_time = sender_.TimeUntilNextProcess(); |
96 int64_t receiver_time = receiver_.TimeUntilNextProcess(); | 99 int64_t receiver_time = receiver_.TimeUntilNextProcess(); |
97 assert(sender_time >= 0); | 100 assert(sender_time >= 0); |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 } | 269 } |
267 | 270 |
268 int SetMinReceiverDelay(int desired_delay_ms) override { | 271 int SetMinReceiverDelay(int desired_delay_ms) override { |
269 return receiver_.SetMinReceiverDelay(desired_delay_ms); | 272 return receiver_.SetMinReceiverDelay(desired_delay_ms); |
270 } | 273 } |
271 | 274 |
272 int32_t SetReceiveChannelParameters(int64_t rtt) override { | 275 int32_t SetReceiveChannelParameters(int64_t rtt) override { |
273 return receiver_.SetReceiveChannelParameters(rtt); | 276 return receiver_.SetReceiveChannelParameters(rtt); |
274 } | 277 } |
275 | 278 |
276 void RegisterPreDecodeImageCallback(EncodedImageCallback* observer) override { | |
277 receiver_.RegisterPreDecodeImageCallback(observer); | |
278 } | |
279 | |
280 void RegisterPostEncodeImageCallback( | 279 void RegisterPostEncodeImageCallback( |
281 EncodedImageCallback* observer) override { | 280 EncodedImageCallback* observer) override { |
282 post_encode_callback_.Register(observer); | 281 post_encode_callback_.Register(observer); |
283 } | 282 } |
284 | 283 |
285 void TriggerDecoderShutdown() override { receiver_.TriggerDecoderShutdown(); } | 284 void TriggerDecoderShutdown() override { receiver_.TriggerDecoderShutdown(); } |
286 | 285 |
287 private: | 286 private: |
288 EncodedImageCallbackWrapper post_encode_callback_; | 287 EncodedImageCallbackWrapper post_encode_callback_; |
289 vcm::VideoSender sender_; | 288 vcm::VideoSender sender_; |
290 vcm::VideoReceiver receiver_; | 289 vcm::VideoReceiver receiver_; |
291 std::unique_ptr<EventFactory> own_event_factory_; | 290 std::unique_ptr<EventFactory> own_event_factory_; |
292 }; | 291 }; |
293 } // namespace | 292 } // namespace |
294 | 293 |
295 void VideoCodingModule::Codec(VideoCodecType codecType, VideoCodec* codec) { | 294 void VideoCodingModule::Codec(VideoCodecType codecType, VideoCodec* codec) { |
296 VCMCodecDataBase::Codec(codecType, codec); | 295 VCMCodecDataBase::Codec(codecType, codec); |
297 } | 296 } |
298 | 297 |
299 // Create method for current interface, will be removed when the | 298 // Create method for current interface, will be removed when the |
300 // new jitter buffer is in place. | 299 // new jitter buffer is in place. |
301 VideoCodingModule* VideoCodingModule::Create( | 300 VideoCodingModule* VideoCodingModule::Create( |
302 Clock* clock, | 301 Clock* clock, |
303 VideoEncoderRateObserver* encoder_rate_observer, | 302 VideoEncoderRateObserver* encoder_rate_observer, |
304 VCMQMSettingsCallback* qm_settings_callback) { | 303 VCMQMSettingsCallback* qm_settings_callback) { |
305 return VideoCodingModule::Create(clock, encoder_rate_observer, | 304 return VideoCodingModule::Create(clock, encoder_rate_observer, |
306 qm_settings_callback, | 305 qm_settings_callback, |
307 nullptr, // NackSender | 306 nullptr, // NackSender |
308 nullptr); // KeyframeRequestSender | 307 nullptr, // KeyframeRequestSender |
| 308 nullptr); // Pre-decode image callback |
309 } | 309 } |
310 | 310 |
311 // Create method for the new jitter buffer. | 311 // Create method for the new jitter buffer. |
312 VideoCodingModule* VideoCodingModule::Create( | 312 VideoCodingModule* VideoCodingModule::Create( |
313 Clock* clock, | 313 Clock* clock, |
314 VideoEncoderRateObserver* encoder_rate_observer, | 314 VideoEncoderRateObserver* encoder_rate_observer, |
315 VCMQMSettingsCallback* qm_settings_callback, | 315 VCMQMSettingsCallback* qm_settings_callback, |
316 NackSender* nack_sender, | 316 NackSender* nack_sender, |
317 KeyFrameRequestSender* keyframe_request_sender) { | 317 KeyFrameRequestSender* keyframe_request_sender, |
| 318 EncodedImageCallback* pre_decode_image_callback) { |
318 return new VideoCodingModuleImpl(clock, new EventFactoryImpl, true, | 319 return new VideoCodingModuleImpl(clock, new EventFactoryImpl, true, |
319 encoder_rate_observer, qm_settings_callback, | 320 encoder_rate_observer, qm_settings_callback, |
320 nack_sender, | 321 nack_sender, keyframe_request_sender, |
321 keyframe_request_sender); | 322 pre_decode_image_callback); |
322 } | 323 } |
323 | 324 |
324 // Create method for current interface, will be removed when the | 325 // Create method for current interface, will be removed when the |
325 // new jitter buffer is in place. | 326 // new jitter buffer is in place. |
326 VideoCodingModule* VideoCodingModule::Create(Clock* clock, | 327 VideoCodingModule* VideoCodingModule::Create(Clock* clock, |
327 EventFactory* event_factory) { | 328 EventFactory* event_factory) { |
328 return VideoCodingModule::Create(clock, event_factory, | 329 return VideoCodingModule::Create(clock, event_factory, |
329 nullptr, // NackSender | 330 nullptr, // NackSender |
330 nullptr); // KeyframeRequestSender | 331 nullptr); // KeyframeRequestSender |
331 } | 332 } |
332 | 333 |
333 // Create method for the new jitter buffer. | 334 // Create method for the new jitter buffer. |
334 VideoCodingModule* VideoCodingModule::Create( | 335 VideoCodingModule* VideoCodingModule::Create( |
335 Clock* clock, | 336 Clock* clock, |
336 EventFactory* event_factory, | 337 EventFactory* event_factory, |
337 NackSender* nack_sender, | 338 NackSender* nack_sender, |
338 KeyFrameRequestSender* keyframe_request_sender) { | 339 KeyFrameRequestSender* keyframe_request_sender) { |
339 assert(clock); | 340 assert(clock); |
340 assert(event_factory); | 341 assert(event_factory); |
341 return new VideoCodingModuleImpl(clock, event_factory, false, nullptr, | 342 return new VideoCodingModuleImpl(clock, event_factory, false, nullptr, |
342 nullptr, nack_sender, | 343 nullptr, nack_sender, |
343 keyframe_request_sender); | 344 keyframe_request_sender, nullptr); |
344 } | 345 } |
345 | 346 |
346 } // namespace webrtc | 347 } // namespace webrtc |
OLD | NEW |