From 14092e00f1b26b2442895456f3e4d229a1d9be48 Mon Sep 17 00:00:00 2001 From: "xians@webrtc.org" Date: Tue, 30 Sep 2014 14:35:15 +0000 Subject: [PATCH] Reland 28629004: adding new AEC dump start interface for chrome adding new AEC dump start interface for chrome. This is required because we are not allow to pass CRT objects across dll boundaries, that says, when we pass a file descriptor from chrome dll to libpeerconnection dll, the file descriptor will become invalid immediate, more information can be found here: http://msdn.microsoft.com/en-us/library/ms235460.aspx Chromium bug:crbug/415935 TEST=bots R=bjornv@webrtc.org, kwiberg@webrtc.org Review URL: https://webrtc-codereview.appspot.com/27639004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@7337 4adac7df-926f-26a2-2b94-8c16560cd09d --- webrtc/modules/audio_processing/audio_processing.gypi | 1 + webrtc/modules/audio_processing/audio_processing_impl.cc | 6 ++++++ webrtc/modules/audio_processing/audio_processing_impl.h | 1 + webrtc/modules/audio_processing/include/audio_processing.h | 6 ++++++ 4 files changed, 14 insertions(+) diff --git a/webrtc/modules/audio_processing/audio_processing.gypi b/webrtc/modules/audio_processing/audio_processing.gypi index 9bbcfae7f..969fdb12c 100644 --- a/webrtc/modules/audio_processing/audio_processing.gypi +++ b/webrtc/modules/audio_processing/audio_processing.gypi @@ -9,6 +9,7 @@ { 'variables': { 'audio_processing_dependencies': [ + '<(webrtc_root)/base/base.gyp:rtc_base', '<(webrtc_root)/common_audio/common_audio.gyp:common_audio', '<(webrtc_root)/system_wrappers/source/system_wrappers.gyp:system_wrappers', ], diff --git a/webrtc/modules/audio_processing/audio_processing_impl.cc b/webrtc/modules/audio_processing/audio_processing_impl.cc index d91cbd2fd..680652322 100644 --- a/webrtc/modules/audio_processing/audio_processing_impl.cc +++ b/webrtc/modules/audio_processing/audio_processing_impl.cc @@ -12,6 +12,7 @@ #include +#include "webrtc/base/fileutils.h" #include "webrtc/common_audio/include/audio_util.h" #include "webrtc/common_audio/signal_processing/include/signal_processing_library.h" #include "webrtc/modules/audio_processing/audio_buffer.h" @@ -716,6 +717,11 @@ int AudioProcessingImpl::StartDebugRecording(FILE* handle) { #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP } +int AudioProcessingImpl::StartDebugRecording(rtc::PlatformFile handle) { + FILE* stream = rtc::FdopenPlatformFileForWriting(handle); + return StartDebugRecording(stream); +} + int AudioProcessingImpl::StopDebugRecording() { CriticalSectionScoped crit_scoped(crit_); diff --git a/webrtc/modules/audio_processing/audio_processing_impl.h b/webrtc/modules/audio_processing/audio_processing_impl.h index 9753423d6..d012e7f0e 100644 --- a/webrtc/modules/audio_processing/audio_processing_impl.h +++ b/webrtc/modules/audio_processing/audio_processing_impl.h @@ -125,6 +125,7 @@ class AudioProcessingImpl : public AudioProcessing { virtual int StartDebugRecording( const char filename[kMaxFilenameSize]) OVERRIDE; virtual int StartDebugRecording(FILE* handle) OVERRIDE; + virtual int StartDebugRecording(rtc::PlatformFile handle) OVERRIDE; virtual int StopDebugRecording() OVERRIDE; virtual EchoCancellation* echo_cancellation() const OVERRIDE; virtual EchoControlMobile* echo_control_mobile() const OVERRIDE; diff --git a/webrtc/modules/audio_processing/include/audio_processing.h b/webrtc/modules/audio_processing/include/audio_processing.h index 30f0d9c5d..53157ae66 100644 --- a/webrtc/modules/audio_processing/include/audio_processing.h +++ b/webrtc/modules/audio_processing/include/audio_processing.h @@ -14,6 +14,7 @@ #include // size_t #include // FILE +#include "webrtc/base/fileutils.h" #include "webrtc/common.h" #include "webrtc/typedefs.h" @@ -325,6 +326,11 @@ class AudioProcessing { // of |handle| and closes it at StopDebugRecording(). virtual int StartDebugRecording(FILE* handle) = 0; + // Same as above but uses an existing PlatformFile handle. Takes ownership + // of |handle| and closes it at StopDebugRecording(). + // TODO(xians): Make this interface pure virtual. + virtual int StartDebugRecording(rtc::PlatformFile handle) { return -1; } + // Stops recording debugging information, and closes the file. Recording // cannot be resumed in the same file (without overwriting it). virtual int StopDebugRecording() = 0;