Index: webrtc/modules/audio_processing/echo_cancellation_impl.h |
diff --git a/webrtc/modules/audio_processing/echo_cancellation_impl.h b/webrtc/modules/audio_processing/echo_cancellation_impl.h |
index 96d236e3b2c57d350736cedd3a19f353fd849f5a..9418fbfed79af72a3989fa74ecfce1863cd74758 100644 |
--- a/webrtc/modules/audio_processing/echo_cancellation_impl.h |
+++ b/webrtc/modules/audio_processing/echo_cancellation_impl.h |
@@ -11,6 +11,7 @@ |
#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" |
@@ -19,13 +20,13 @@ |
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); |
@@ -40,11 +41,11 @@ 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: |
@@ -63,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. |
@@ -75,22 +77,28 @@ class EchoCancellationImpl : public EchoCancellation, |
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_; |
- |
- size_t render_queue_element_max_size_; |
- std::vector<float> render_queue_buffer_; |
- std::vector<float> capture_queue_buffer_; |
+ |
+ 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_; |
}; |