Index: webrtc/modules/audio_processing/audio_processing_impl.h |
diff --git a/webrtc/modules/audio_processing/audio_processing_impl.h b/webrtc/modules/audio_processing/audio_processing_impl.h |
index 37b15c28935f29cb6450f5f5cec3d53fe640f50f..1284d6a3e595e9eb0fc42d0ebca8edddb5c7ef0f 100644 |
--- a/webrtc/modules/audio_processing/audio_processing_impl.h |
+++ b/webrtc/modules/audio_processing/audio_processing_impl.h |
@@ -23,6 +23,7 @@ |
#include "webrtc/base/swap_queue.h" |
#include "webrtc/base/thread_annotations.h" |
#include "webrtc/modules/audio_processing/audio_buffer.h" |
+#include "webrtc/modules/audio_processing/include/aec_dump.h" |
#include "webrtc/modules/audio_processing/include/audio_processing.h" |
#include "webrtc/modules/audio_processing/render_queue_item_verifier.h" |
#include "webrtc/modules/audio_processing/rms_level.h" |
@@ -66,6 +67,8 @@ class AudioProcessingImpl : public AudioProcessing { |
void ApplyConfig(const AudioProcessing::Config& config) override; |
void SetExtraOptions(const webrtc::Config& config) override; |
void UpdateHistogramsOnCallEnd() override; |
+ void AttachAecDump(std::unique_ptr<AecDump> aec_dump) override; |
+ void DetachAecDump() override; |
int StartDebugRecording(const char filename[kMaxFilenameSize], |
int64_t max_log_size_bytes) override; |
int StartDebugRecording(FILE* handle, int64_t max_log_size_bytes) override; |
@@ -275,6 +278,37 @@ class AudioProcessingImpl : public AudioProcessing { |
EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
int ProcessRenderStreamLocked() EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
+ // Collects configuration settings from public and private |
+ // submodules to be saved as an audioproc::Config message. |
+ InternalAPMConfig CollectApmConfig() const |
+ EXCLUSIVE_LOCKS_REQUIRED(crit_capture_) |
+ EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
+ |
+ // Creates and returns new CaptureStreamInfo filled with the capture |
+ // stream and data (delay, drift etc). |
+ AecDump::CaptureStreamInfo* RecordUnprocessedCaptureStream( |
+ const float* const* capture_stream) const |
+ EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
+ |
+ AecDump::CaptureStreamInfo* RecordUnprocessedCaptureStream( |
+ const AudioFrame& capture_frame) const |
+ EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
+ |
+ // Fills the CaptureStreamInfo object with the processed capture |
+ // stream and sends it to be written with AecDump. |
+ void RecordProcessedCaptureStream( |
+ const float* const* processed_capture_stream, |
+ AecDump::CaptureStreamInfo* stream_info) const |
+ EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
+ |
+ void RecordProcessedCaptureStream(const AudioFrame& processed_capture_frame, |
+ AecDump::CaptureStreamInfo* stream_info) |
+ const EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
+ |
+ // Copies data (delay, drift, etc) into the |stream_info| object. |
+ void PopulateStreamInfoWithState(AecDump::CaptureStreamInfo* stream_info) |
+ const EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
+ |
// Debug dump methods that are internal and called without locks. |
// TODO(peah): Make thread safe. |
#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
@@ -299,6 +333,10 @@ class AudioProcessingImpl : public AudioProcessing { |
ApmDebugDumpState debug_dump_; |
#endif |
+ // AecDump instance used for optionally logging APM config, input |
+ // and output to file in the AEC-dump format defined in debug.proto. |
+ std::unique_ptr<AecDump> aec_dump_; |
+ |
// Critical sections. |
rtc::CriticalSection crit_render_ ACQUIRED_BEFORE(crit_capture_); |
rtc::CriticalSection crit_capture_; |