diff options
Diffstat (limited to 'webrtc/modules/audio_processing/echo_cancellation_impl.h')
-rw-r--r-- | webrtc/modules/audio_processing/echo_cancellation_impl.h | 50 |
1 files changed, 36 insertions, 14 deletions
diff --git a/webrtc/modules/audio_processing/echo_cancellation_impl.h b/webrtc/modules/audio_processing/echo_cancellation_impl.h index 070dcabc5d..a40a267e32 100644 --- a/webrtc/modules/audio_processing/echo_cancellation_impl.h +++ b/webrtc/modules/audio_processing/echo_cancellation_impl.h @@ -11,19 +11,22 @@ #ifndef WEBRTC_MODULES_AUDIO_PROCESSING_ECHO_CANCELLATION_IMPL_H_ #define WEBRTC_MODULES_AUDIO_PROCESSING_ECHO_CANCELLATION_IMPL_H_ +#include "webrtc/base/criticalsection.h" +#include "webrtc/base/scoped_ptr.h" +#include "webrtc/common_audio/swap_queue.h" #include "webrtc/modules/audio_processing/include/audio_processing.h" #include "webrtc/modules/audio_processing/processing_component.h" namespace webrtc { class AudioBuffer; -class CriticalSectionWrapper; class EchoCancellationImpl : public EchoCancellation, public ProcessingComponent { public: EchoCancellationImpl(const AudioProcessing* apm, - CriticalSectionWrapper* crit); + rtc::CriticalSection* crit_render, + rtc::CriticalSection* crit_capture); virtual ~EchoCancellationImpl(); int ProcessRenderAudio(const AudioBuffer* audio); @@ -38,10 +41,13 @@ class EchoCancellationImpl : public EchoCancellation, // ProcessingComponent implementation. int Initialize() override; void SetExtraOptions(const Config& config) override; - bool is_delay_agnostic_enabled() const; bool is_extended_filter_enabled() const; + // Reads render side data that has been queued on the render call. + // Called holding the capture lock. + void ReadQueuedRenderData(); + private: // EchoCancellation implementation. int Enable(bool enable) override; @@ -58,6 +64,7 @@ class EchoCancellationImpl : public EchoCancellation, int GetDelayMetrics(int* median, int* std, float* fraction_poor_delays) override; + struct AecCore* aec_core() const override; // ProcessingComponent implementation. @@ -65,20 +72,35 @@ class EchoCancellationImpl : public EchoCancellation, int InitializeHandle(void* handle) const override; int ConfigureHandle(void* handle) const override; void DestroyHandle(void* handle) const override; - int num_handles_required() const override; + size_t num_handles_required() const override; int GetHandleError(void* handle) const override; + void AllocateRenderQueue(); + + // Not guarded as its public API is thread safe. const AudioProcessing* apm_; - CriticalSectionWrapper* crit_; - bool drift_compensation_enabled_; - bool metrics_enabled_; - SuppressionLevel suppression_level_; - int stream_drift_samples_; - bool was_stream_drift_set_; - bool stream_has_echo_; - bool delay_logging_enabled_; - bool extended_filter_enabled_; - bool delay_agnostic_enabled_; + + rtc::CriticalSection* const crit_render_ ACQUIRED_BEFORE(crit_capture_); + rtc::CriticalSection* const crit_capture_; + + bool drift_compensation_enabled_ GUARDED_BY(crit_capture_); + bool metrics_enabled_ GUARDED_BY(crit_capture_); + SuppressionLevel suppression_level_ GUARDED_BY(crit_capture_); + int stream_drift_samples_ GUARDED_BY(crit_capture_); + bool was_stream_drift_set_ GUARDED_BY(crit_capture_); + bool stream_has_echo_ GUARDED_BY(crit_capture_); + bool delay_logging_enabled_ GUARDED_BY(crit_capture_); + bool extended_filter_enabled_ GUARDED_BY(crit_capture_); + bool delay_agnostic_enabled_ GUARDED_BY(crit_capture_); + + size_t render_queue_element_max_size_ GUARDED_BY(crit_render_) + GUARDED_BY(crit_capture_); + std::vector<float> render_queue_buffer_ GUARDED_BY(crit_render_); + std::vector<float> capture_queue_buffer_ GUARDED_BY(crit_capture_); + + // Lock protection not needed. + rtc::scoped_ptr<SwapQueue<std::vector<float>, RenderQueueItemVerifier<float>>> + render_signal_queue_; }; } // namespace webrtc |