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

Side by Side Diff: webrtc/modules/audio_processing/audio_processing_impl.h

Issue 2405403003: Add empty residual echo detector. (Closed)
Patch Set: Small update to comments. Created 4 years, 1 month 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 struct ApmPublicSubmodules; 143 struct ApmPublicSubmodules;
144 struct ApmPrivateSubmodules; 144 struct ApmPrivateSubmodules;
145 145
146 class ApmSubmoduleStates { 146 class ApmSubmoduleStates {
147 public: 147 public:
148 ApmSubmoduleStates(); 148 ApmSubmoduleStates();
149 // Updates the submodule state and returns true if it has changed. 149 // Updates the submodule state and returns true if it has changed.
150 bool Update(bool high_pass_filter_enabled, 150 bool Update(bool high_pass_filter_enabled,
151 bool echo_canceller_enabled, 151 bool echo_canceller_enabled,
152 bool mobile_echo_controller_enabled, 152 bool mobile_echo_controller_enabled,
153 bool residual_echo_detector_enabled,
153 bool noise_suppressor_enabled, 154 bool noise_suppressor_enabled,
154 bool intelligibility_enhancer_enabled, 155 bool intelligibility_enhancer_enabled,
155 bool beamformer_enabled, 156 bool beamformer_enabled,
156 bool adaptive_gain_controller_enabled, 157 bool adaptive_gain_controller_enabled,
157 bool level_controller_enabled, 158 bool level_controller_enabled,
158 bool voice_activity_detector_enabled, 159 bool voice_activity_detector_enabled,
159 bool level_estimator_enabled, 160 bool level_estimator_enabled,
160 bool transient_suppressor_enabled); 161 bool transient_suppressor_enabled);
161 bool CaptureMultiBandSubModulesActive() const; 162 bool CaptureMultiBandSubModulesActive() const;
162 bool CaptureMultiBandProcessingActive() const; 163 bool CaptureMultiBandProcessingActive() const;
163 bool RenderMultiBandSubModulesActive() const; 164 bool RenderMultiBandSubModulesActive() const;
164 bool RenderMultiBandProcessingActive() const; 165 bool RenderMultiBandProcessingActive() const;
165 166
166 private: 167 private:
167 bool high_pass_filter_enabled_ = false; 168 bool high_pass_filter_enabled_ = false;
168 bool echo_canceller_enabled_ = false; 169 bool echo_canceller_enabled_ = false;
169 bool mobile_echo_controller_enabled_ = false; 170 bool mobile_echo_controller_enabled_ = false;
171 bool residual_echo_detector_enabled_ = false;
170 bool noise_suppressor_enabled_ = false; 172 bool noise_suppressor_enabled_ = false;
171 bool intelligibility_enhancer_enabled_ = false; 173 bool intelligibility_enhancer_enabled_ = false;
172 bool beamformer_enabled_ = false; 174 bool beamformer_enabled_ = false;
173 bool adaptive_gain_controller_enabled_ = false; 175 bool adaptive_gain_controller_enabled_ = false;
174 bool level_controller_enabled_ = false; 176 bool level_controller_enabled_ = false;
175 bool level_estimator_enabled_ = false; 177 bool level_estimator_enabled_ = false;
176 bool voice_activity_detector_enabled_ = false; 178 bool voice_activity_detector_enabled_ = false;
177 bool transient_suppressor_enabled_ = false; 179 bool transient_suppressor_enabled_ = false;
178 bool first_update_ = true; 180 bool first_update_ = true;
179 }; 181 };
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 // acquired. 229 // acquired.
228 void InitializeTransient() 230 void InitializeTransient()
229 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); 231 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_);
230 void InitializeBeamformer() 232 void InitializeBeamformer()
231 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); 233 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_);
232 void InitializeIntelligibility() 234 void InitializeIntelligibility()
233 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); 235 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_);
234 int InitializeLocked(const ProcessingConfig& config) 236 int InitializeLocked(const ProcessingConfig& config)
235 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); 237 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_);
236 void InitializeLevelController() EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); 238 void InitializeLevelController() EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
239 void InitializeResidualEchoDetector()
240 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_);
237 241
238 void EmptyQueuedRenderAudio(); 242 void EmptyQueuedRenderAudio();
239 void AllocateRenderQueue() 243 void AllocateRenderQueue()
240 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); 244 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_);
241 void QueueRenderAudio(AudioBuffer* audio) 245 void QueueRenderAudio(AudioBuffer* audio)
242 EXCLUSIVE_LOCKS_REQUIRED(crit_render_); 246 EXCLUSIVE_LOCKS_REQUIRED(crit_render_);
243 247
244 // Capture-side exclusive methods possibly running APM in a multi-threaded 248 // Capture-side exclusive methods possibly running APM in a multi-threaded
245 // manner that are called with the render lock already acquired. 249 // manner that are called with the render lock already acquired.
246 int ProcessCaptureStreamLocked() EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); 250 int ProcessCaptureStreamLocked() EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 rtc::CriticalSection crit_capture_; 288 rtc::CriticalSection crit_capture_;
285 289
286 // Struct containing the Config specifying the behavior of APM. 290 // Struct containing the Config specifying the behavior of APM.
287 AudioProcessing::Config config_; 291 AudioProcessing::Config config_;
288 292
289 // Class containing information about what submodules are active. 293 // Class containing information about what submodules are active.
290 ApmSubmoduleStates submodule_states_; 294 ApmSubmoduleStates submodule_states_;
291 295
292 // Structs containing the pointers to the submodules. 296 // Structs containing the pointers to the submodules.
293 std::unique_ptr<ApmPublicSubmodules> public_submodules_; 297 std::unique_ptr<ApmPublicSubmodules> public_submodules_;
294 std::unique_ptr<ApmPrivateSubmodules> private_submodules_ 298 std::unique_ptr<ApmPrivateSubmodules> private_submodules_;
295 GUARDED_BY(crit_capture_);
296 299
297 // State that is written to while holding both the render and capture locks 300 // State that is written to while holding both the render and capture locks
298 // but can be read without any lock being held. 301 // but can be read without any lock being held.
299 // As this is only accessed internally of APM, and all internal methods in APM 302 // As this is only accessed internally of APM, and all internal methods in APM
300 // either are holding the render or capture locks, this construct is safe as 303 // either are holding the render or capture locks, this construct is safe as
301 // it is not possible to read the variables while writing them. 304 // it is not possible to read the variables while writing them.
302 struct ApmFormatState { 305 struct ApmFormatState {
303 ApmFormatState() 306 ApmFormatState()
304 : // Format of processing streams at input/output call sites. 307 : // Format of processing streams at input/output call sites.
305 api_format({{{kSampleRate16kHz, 1, false}, 308 api_format({{{kSampleRate16kHz, 1, false},
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 size_t aecm_render_queue_element_max_size_ GUARDED_BY(crit_render_) 382 size_t aecm_render_queue_element_max_size_ GUARDED_BY(crit_render_)
380 GUARDED_BY(crit_capture_) = 0; 383 GUARDED_BY(crit_capture_) = 0;
381 std::vector<int16_t> aecm_render_queue_buffer_ GUARDED_BY(crit_render_); 384 std::vector<int16_t> aecm_render_queue_buffer_ GUARDED_BY(crit_render_);
382 std::vector<int16_t> aecm_capture_queue_buffer_ GUARDED_BY(crit_capture_); 385 std::vector<int16_t> aecm_capture_queue_buffer_ GUARDED_BY(crit_capture_);
383 386
384 size_t agc_render_queue_element_max_size_ GUARDED_BY(crit_render_) 387 size_t agc_render_queue_element_max_size_ GUARDED_BY(crit_render_)
385 GUARDED_BY(crit_capture_) = 0; 388 GUARDED_BY(crit_capture_) = 0;
386 std::vector<int16_t> agc_render_queue_buffer_ GUARDED_BY(crit_render_); 389 std::vector<int16_t> agc_render_queue_buffer_ GUARDED_BY(crit_render_);
387 std::vector<int16_t> agc_capture_queue_buffer_ GUARDED_BY(crit_capture_); 390 std::vector<int16_t> agc_capture_queue_buffer_ GUARDED_BY(crit_capture_);
388 391
392 size_t red_render_queue_element_max_size_ GUARDED_BY(crit_render_)
393 GUARDED_BY(crit_capture_) = 0;
394 std::vector<float> red_render_queue_buffer_ GUARDED_BY(crit_render_);
395 std::vector<float> red_capture_queue_buffer_ GUARDED_BY(crit_capture_);
396
389 // Lock protection not needed. 397 // Lock protection not needed.
390 std::unique_ptr<SwapQueue<std::vector<float>, RenderQueueItemVerifier<float>>> 398 std::unique_ptr<SwapQueue<std::vector<float>, RenderQueueItemVerifier<float>>>
391 aec_render_signal_queue_; 399 aec_render_signal_queue_;
392 std::unique_ptr< 400 std::unique_ptr<
393 SwapQueue<std::vector<int16_t>, RenderQueueItemVerifier<int16_t>>> 401 SwapQueue<std::vector<int16_t>, RenderQueueItemVerifier<int16_t>>>
394 aecm_render_signal_queue_; 402 aecm_render_signal_queue_;
395 std::unique_ptr< 403 std::unique_ptr<
396 SwapQueue<std::vector<int16_t>, RenderQueueItemVerifier<int16_t>>> 404 SwapQueue<std::vector<int16_t>, RenderQueueItemVerifier<int16_t>>>
397 agc_render_signal_queue_; 405 agc_render_signal_queue_;
406 std::unique_ptr<SwapQueue<std::vector<float>, RenderQueueItemVerifier<float>>>
407 red_render_signal_queue_;
398 }; 408 };
399 409
400 } // namespace webrtc 410 } // namespace webrtc
401 411
402 #endif // WEBRTC_MODULES_AUDIO_PROCESSING_AUDIO_PROCESSING_IMPL_H_ 412 #endif // WEBRTC_MODULES_AUDIO_PROCESSING_AUDIO_PROCESSING_IMPL_H_
OLDNEW
« no previous file with comments | « webrtc/modules/audio_processing/audio_processing.gypi ('k') | webrtc/modules/audio_processing/audio_processing_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698