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

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

Issue 1853813002: Add support for writing raw encoder output to .ivf files. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Rebase Created 4 years, 8 months 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 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
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
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
OLDNEW
« no previous file with comments | « webrtc/modules/video_coding/video_coding_impl.h ('k') | webrtc/modules/video_coding/video_receiver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698