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 87e2224bbff89f981bc245986b2151c3bb747fd7..f83f6adb0735692ca2d1743466fc68f0182bd9c4 100644 |
--- a/webrtc/modules/audio_processing/audio_processing_impl.h |
+++ b/webrtc/modules/audio_processing/audio_processing_impl.h |
@@ -130,6 +130,41 @@ class AudioProcessingImpl : public AudioProcessing { |
struct ApmPublicSubmodules; |
struct ApmPrivateSubmodules; |
+ class ApmSubmoduleStates { |
+ public: |
+ ApmSubmoduleStates(); |
+ // Updates the submodule state and returns true if it has changed. |
+ bool Update(bool high_pass_filter_enabled, |
+ bool echo_canceller_enabled, |
+ bool mobile_echo_controller_enabled, |
+ bool noise_suppressor_enabled, |
+ bool intelligibility_enhancer_enabled, |
+ bool beamformer_enabled, |
+ bool adaptive_gain_controller_enabled, |
+ bool level_controller_enabled, |
+ bool voice_activity_detector_enabled, |
+ bool level_estimator_enabled, |
+ bool transient_suppressor_enabled); |
+ bool CaptureMultiBandSubModulesActive() const; |
+ bool CaptureMultiBandProcessingActive() const; |
+ bool RenderMultiBandSubModulesActive() const; |
+ bool RenderMultiBandProcessingActive() const; |
+ |
+ private: |
+ bool high_pass_filter_enabled_ = false; |
+ bool echo_canceller_enabled_ = false; |
+ bool mobile_echo_controller_enabled_ = false; |
+ bool noise_suppressor_enabled_ = false; |
+ bool intelligibility_enhancer_enabled_ = false; |
+ bool beamformer_enabled_ = false; |
+ bool adaptive_gain_controller_enabled_ = false; |
+ bool level_controller_enabled_ = false; |
+ bool level_estimator_enabled_ = false; |
+ bool voice_activity_detector_enabled_ = false; |
+ bool transient_suppressor_enabled_ = false; |
+ bool first_update_ = true; |
+ }; |
+ |
#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
// State for the debug dump. |
struct ApmDebugDumpThreadState { |
@@ -160,21 +195,19 @@ class AudioProcessingImpl : public AudioProcessing { |
// that the capture thread blocks the render thread. |
// The struct is modified in a single-threaded manner by holding both the |
// render and capture locks. |
- int MaybeInitialize(const ProcessingConfig& config) |
+ int MaybeInitialize(const ProcessingConfig& config, bool force_initialization) |
EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
int MaybeInitializeRender(const ProcessingConfig& processing_config) |
EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
- int MaybeInitializeCapture(const ProcessingConfig& processing_config) |
+ int MaybeInitializeCapture(const ProcessingConfig& processing_config, |
+ bool force_initialization) |
EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
- // Method for checking for the need of conversion. Accesses the formats |
- // structs in a read manner but the requirement for the render lock to be held |
- // was added as it currently anyway is always called in that manner. |
- bool rev_conversion_needed() const EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
- bool render_check_rev_conversion_needed() const |
- EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
+ // Method for updating the state keeping track of the active submodules. |
+ // Returns a bool indicating whether the state has changed. |
+ bool UpdateActiveSubmoduleStates() EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
// Methods requiring APM running in a single-threaded manner. |
// Are called with both the render and capture locks already |
@@ -208,10 +241,6 @@ class AudioProcessingImpl : public AudioProcessing { |
// Capture-side exclusive methods possibly running APM in a multi-threaded |
// manner that are called with the render lock already acquired. |
int ProcessStreamLocked() EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
- bool output_copy_needed() const EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
- bool is_fwd_processed() const EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
- bool fwd_synthesis_needed() const EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
- bool fwd_analysis_needed() const EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
void MaybeUpdateHistograms() EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
// Render-side exclusive methods possibly running APM in a multi-threaded |
@@ -221,9 +250,6 @@ class AudioProcessingImpl : public AudioProcessing { |
const StreamConfig& input_config, |
const StreamConfig& output_config) |
EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
- bool is_rev_processed() const EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
- bool rev_synthesis_needed() const EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
- bool rev_analysis_needed() const EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
int ProcessReverseStreamLocked() EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
// Debug dump methods that are internal and called without locks. |
@@ -254,6 +280,9 @@ class AudioProcessingImpl : public AudioProcessing { |
rtc::CriticalSection crit_render_ ACQUIRED_BEFORE(crit_capture_); |
rtc::CriticalSection crit_capture_; |
+ // Class containing information about what submodules are active. |
+ ApmSubmoduleStates submodule_states_; |
+ |
// Structs containing the pointers to the submodules. |
std::unique_ptr<ApmPublicSubmodules> public_submodules_; |
std::unique_ptr<ApmPrivateSubmodules> private_submodules_ |