Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1404)

Unified Diff: webrtc/modules/audio_processing/audio_processing_impl.h

Issue 2304123002: Cleaned up and revised the handling of resampling and bandsplitting in APM and (Closed)
Patch Set: Updated the test that required that no initialization should be done if APM is called with the defa… Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « data/audio_processing/output_data_mac.pb ('k') | webrtc/modules/audio_processing/audio_processing_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « data/audio_processing/output_data_mac.pb ('k') | webrtc/modules/audio_processing/audio_processing_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698