From 6a6121c0b1dd1d223bfd355f190a30f9ee6ca45b Mon Sep 17 00:00:00 2001 From: "mikhal@webrtc.org" Date: Fri, 24 Aug 2012 22:08:25 +0000 Subject: [PATCH] updating cl Adding debug options BUG= Review URL: https://webrtc-codereview.appspot.com/751005 git-svn-id: http://webrtc.googlecode.com/svn/trunk@2660 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../main/interface/video_coding.h | 6 ++++ .../main/source/video_coding_impl.cc | 31 ++++++++++++------- .../main/source/video_coding_impl.h | 8 +++-- src/video_engine/include/vie_codec.h | 5 +++ .../auto_test/source/vie_autotest_codec.cc | 7 +++++ src/video_engine/vie_codec_impl.cc | 24 ++++++++++++++ src/video_engine/vie_codec_impl.h | 5 +++ src/video_engine/vie_encoder.cc | 8 +++++ src/video_engine/vie_encoder.h | 5 +++ 9 files changed, 84 insertions(+), 15 deletions(-) diff --git a/src/modules/video_coding/main/interface/video_coding.h b/src/modules/video_coding/main/interface/video_coding.h index 1aa047b6b1..af054912f1 100644 --- a/src/modules/video_coding/main/interface/video_coding.h +++ b/src/modules/video_coding/main/interface/video_coding.h @@ -544,6 +544,12 @@ public: // < 0, on error. virtual int SetReceiverRobustnessMode(ReceiverRobustness robustnessMode, DecodeErrors errorMode) = 0; + + // Enables recording of debugging information. + virtual int StartDebugRecording(const char* file_name_utf8) = 0; + + // Disables recording of debugging information. + virtual int StopDebugRecording() = 0; }; } // namespace webrtc diff --git a/src/modules/video_coding/main/source/video_coding_impl.cc b/src/modules/video_coding/main/source/video_coding_impl.cc index 2c71c11d63..68390a0cfe 100644 --- a/src/modules/video_coding/main/source/video_coding_impl.cc +++ b/src/modules/video_coding/main/source/video_coding_impl.cc @@ -21,7 +21,6 @@ namespace webrtc { //#define DEBUG_DECODER_BIT_STREAM -//#define DEBUG_ENCODER_INPUT WebRtc_UWord32 VCMProcessTimer::Period() const @@ -78,10 +77,7 @@ _nextFrameType(kVideoFrameDelta), _mediaOpt(id, clock_), _sendCodecType(kVideoCodecUnknown), _sendStatsCallback(NULL), -#ifdef DEBUG_ENCODER_INPUT _encoderInputFile(NULL), -#endif - _codecDataBase(id), _receiveStatsTimer(1000, clock_), _sendStatsTimer(1000, clock_), @@ -92,9 +88,6 @@ _keyRequestTimer(500, clock_) #ifdef DEBUG_DECODER_BIT_STREAM _bitStreamBeforeDecoder = fopen("decoderBitStream.bit", "wb"); #endif -#ifdef DEBUG_ENCODER_INPUT - _encoderInputFile = fopen("encoderInput.yuv", "wb"); -#endif } VideoCodingModuleImpl::~VideoCodingModuleImpl() @@ -109,9 +102,10 @@ VideoCodingModuleImpl::~VideoCodingModuleImpl() #ifdef DEBUG_DECODER_BIT_STREAM fclose(_bitStreamBeforeDecoder); #endif -#ifdef DEBUG_ENCODER_INPUT - fclose(_encoderInputFile); -#endif + if (_encoderInputFile != NULL) + { + fclose(_encoderInputFile); + } } VideoCodingModule* @@ -686,7 +680,6 @@ VideoCodingModuleImpl::AddVideoFrame(const VideoFrame& videoFrame, WebRtc_Word32 ret = _encoder->Encode(videoFrame, codecSpecificInfo, _nextFrameType); -#ifdef DEBUG_ENCODER_INPUT if (_encoderInputFile != NULL) { if (fwrite(videoFrame.Buffer(), 1, videoFrame.Length(), @@ -694,7 +687,6 @@ VideoCodingModuleImpl::AddVideoFrame(const VideoFrame& videoFrame, return -1; } } -#endif if (ret < 0) { WEBRTC_TRACE(webrtc::kTraceError, @@ -1374,4 +1366,19 @@ int VideoCodingModuleImpl::SetReceiverRobustnessMode( return VCM_OK; } +int VideoCodingModuleImpl::StartDebugRecording(const char* file_name_utf8) { + _encoderInputFile = fopen(file_name_utf8, "wb"); + if (_encoderInputFile == NULL) + return VCM_GENERAL_ERROR; + return VCM_OK; +} + +int VideoCodingModuleImpl::StopDebugRecording(){ + if (_encoderInputFile != NULL) { + fclose(_encoderInputFile); + _encoderInputFile = NULL; + } + return VCM_OK; +} + } // namespace webrtc diff --git a/src/modules/video_coding/main/source/video_coding_impl.h b/src/modules/video_coding/main/source/video_coding_impl.h index 3228d44b5d..1e39cbbec2 100644 --- a/src/modules/video_coding/main/source/video_coding_impl.h +++ b/src/modules/video_coding/main/source/video_coding_impl.h @@ -259,6 +259,11 @@ public: // Set the receiver robustness mode. virtual int SetReceiverRobustnessMode(ReceiverRobustness robustnessMode, DecodeErrors errorMode); + // Enables recording of debugging information. + virtual int StartDebugRecording(const char* file_name_utf8); + + // Disables recording of debugging information. + virtual int StopDebugRecording(); protected: WebRtc_Word32 Decode(const webrtc::VCMEncodedFrame& frame); @@ -299,10 +304,7 @@ private: VCMMediaOptimization _mediaOpt; VideoCodecType _sendCodecType; VCMSendStatisticsCallback* _sendStatsCallback; -#ifdef DEBUG_ENCODER_INPUT FILE* _encoderInputFile; -#endif - VCMCodecDataBase _codecDataBase; VCMProcessTimer _receiveStatsTimer; VCMProcessTimer _sendStatsTimer; diff --git a/src/video_engine/include/vie_codec.h b/src/video_engine/include/vie_codec.h index 0535038e64..0ab36b1421 100644 --- a/src/video_engine/include/vie_codec.h +++ b/src/video_engine/include/vie_codec.h @@ -165,6 +165,11 @@ class WEBRTC_DLLEXPORT ViECodec { // decode the incoming video stream. virtual int WaitForFirstKeyFrame(const int video_channel, const bool wait) = 0; + // Enables recording of debugging information. + virtual int StartDebugRecording(int video_channel, + const char* file_name_utf8) = 0; + // Disables recording of debugging information. + virtual int StopDebugRecording(int video_channel) = 0; protected: ViECodec() {} diff --git a/src/video_engine/test/auto_test/source/vie_autotest_codec.cc b/src/video_engine/test/auto_test/source/vie_autotest_codec.cc index d4a1870dcb..570097ad0c 100644 --- a/src/video_engine/test/auto_test/source/vie_autotest_codec.cc +++ b/src/video_engine/test/auto_test/source/vie_autotest_codec.cc @@ -226,6 +226,10 @@ void ViEAutoTest::ViECodecStandardTest() { ViETest::Log("Done!"); } + // Test debug information recording. + EXPECT_EQ(0, codec->StartDebugRecording(video_channel, + "vie_autotest_debug")); + // Test Callbacks TestCodecObserver codec_observer; EXPECT_EQ(0, codec->RegisterEncoderObserver(video_channel, codec_observer)); @@ -250,6 +254,9 @@ void ViEAutoTest::ViECodecStandardTest() { EXPECT_GT(codec_observer.incoming_rate_called_, 0); EXPECT_GT(codec_observer.outgoing_rate_called_, 0); + // Stop debug record. + EXPECT_EQ(0, codec->StopDebugRecording(video_channel)); + EXPECT_EQ(0, base->StopReceive(video_channel)); EXPECT_EQ(0, render->StopRender(video_channel)); EXPECT_EQ(0, render->RemoveRenderer(capture_id)); diff --git a/src/video_engine/vie_codec_impl.cc b/src/video_engine/vie_codec_impl.cc index dd4d37da2f..0de126a2b9 100644 --- a/src/video_engine/vie_codec_impl.cc +++ b/src/video_engine/vie_codec_impl.cc @@ -654,6 +654,30 @@ int ViECodecImpl::WaitForFirstKeyFrame(const int video_channel, } return 0; } +int ViECodecImpl::StartDebugRecording(int video_channel, + const char* file_name_utf8) { + ViEChannelManagerScoped cs(*(shared_data_->channel_manager())); + ViEEncoder* vie_encoder = cs.Encoder(video_channel); + if (!vie_encoder) { + WEBRTC_TRACE(kTraceError, kTraceVideo, + ViEId(shared_data_->instance_id(), video_channel), + "%s: No encoder %d", __FUNCTION__, video_channel); + return -1; + } + return vie_encoder->StartDebugRecording(file_name_utf8); +} + +int ViECodecImpl::StopDebugRecording(int video_channel) { + ViEChannelManagerScoped cs(*(shared_data_->channel_manager())); + ViEEncoder* vie_encoder = cs.Encoder(video_channel); + if (!vie_encoder) { + WEBRTC_TRACE(kTraceError, kTraceVideo, + ViEId(shared_data_->instance_id(), video_channel), + "%s: No encoder %d", __FUNCTION__, video_channel); + return -1; + } + return vie_encoder->StopDebugRecording(); +} bool ViECodecImpl::CodecValid(const VideoCodec& video_codec) { // Check pl_name matches codec_type. diff --git a/src/video_engine/vie_codec_impl.h b/src/video_engine/vie_codec_impl.h index 2d34540c2e..8073f8d0c9 100644 --- a/src/video_engine/vie_codec_impl.h +++ b/src/video_engine/vie_codec_impl.h @@ -65,6 +65,11 @@ class ViECodecImpl virtual int DeregisterDecoderObserver(const int video_channel); virtual int SendKeyFrame(const int video_channel); virtual int WaitForFirstKeyFrame(const int video_channel, const bool wait); + // Enables recording of debugging information. + virtual int StartDebugRecording(int video_channel, + const char* file_name_utf8); + // Disables recording of debugging information. + virtual int StopDebugRecording(int video_channel); protected: explicit ViECodecImpl(ViESharedData* shared_data); diff --git a/src/video_engine/vie_encoder.cc b/src/video_engine/vie_encoder.cc index 74539525eb..e0b0e39f95 100644 --- a/src/video_engine/vie_encoder.cc +++ b/src/video_engine/vie_encoder.cc @@ -868,6 +868,14 @@ ViEFileRecorder& ViEEncoder::GetOutgoingFileRecorder() { return file_recorder_; } +int ViEEncoder::StartDebugRecording(const char* fileNameUTF8) { + return vcm_.StartDebugRecording(fileNameUTF8); +} + +int ViEEncoder::StopDebugRecording() { + return vcm_.StopDebugRecording(); +} + QMVideoSettingsCallback::QMVideoSettingsCallback(VideoProcessingModule* vpm) : vpm_(vpm) { } diff --git a/src/video_engine/vie_encoder.h b/src/video_engine/vie_encoder.h index 7bfa918289..689599714a 100644 --- a/src/video_engine/vie_encoder.h +++ b/src/video_engine/vie_encoder.h @@ -142,6 +142,11 @@ class ViEEncoder // Recording. ViEFileRecorder& GetOutgoingFileRecorder(); + // Enables recording of debugging information. + virtual int StartDebugRecording(const char* fileNameUTF8); + + // Disables recording of debugging information. + virtual int StopDebugRecording(); protected: // Called by BitrateObserver.