OLD | NEW |
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 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 // from AudioProcessing tests in a single-threaded manner. | 93 // from AudioProcessing tests in a single-threaded manner. |
94 // Hence there is no need for locks in these. | 94 // Hence there is no need for locks in these. |
95 int proc_sample_rate_hz() const override; | 95 int proc_sample_rate_hz() const override; |
96 int proc_split_sample_rate_hz() const override; | 96 int proc_split_sample_rate_hz() const override; |
97 size_t num_input_channels() const override; | 97 size_t num_input_channels() const override; |
98 size_t num_proc_channels() const override; | 98 size_t num_proc_channels() const override; |
99 size_t num_output_channels() const override; | 99 size_t num_output_channels() const override; |
100 size_t num_reverse_channels() const override; | 100 size_t num_reverse_channels() const override; |
101 int stream_delay_ms() const override; | 101 int stream_delay_ms() const override; |
102 bool was_stream_delay_set() const override | 102 bool was_stream_delay_set() const override |
103 EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | 103 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
104 | 104 |
105 AudioProcessingStatistics GetStatistics() const override; | 105 AudioProcessingStatistics GetStatistics() const override; |
106 | 106 |
107 // Methods returning pointers to APM submodules. | 107 // Methods returning pointers to APM submodules. |
108 // No locks are aquired in those, as those locks | 108 // No locks are aquired in those, as those locks |
109 // would offer no protection (the submodules are | 109 // would offer no protection (the submodules are |
110 // created only once in a single-treaded manner | 110 // created only once in a single-treaded manner |
111 // during APM creation). | 111 // during APM creation). |
112 EchoCancellation* echo_cancellation() const override; | 112 EchoCancellation* echo_cancellation() const override; |
113 EchoControlMobile* echo_control_mobile() const override; | 113 EchoControlMobile* echo_control_mobile() const override; |
114 GainControl* gain_control() const override; | 114 GainControl* gain_control() const override; |
115 // TODO(peah): Deprecate this API call. | 115 // TODO(peah): Deprecate this API call. |
116 HighPassFilter* high_pass_filter() const override; | 116 HighPassFilter* high_pass_filter() const override; |
117 LevelEstimator* level_estimator() const override; | 117 LevelEstimator* level_estimator() const override; |
118 NoiseSuppression* noise_suppression() const override; | 118 NoiseSuppression* noise_suppression() const override; |
119 VoiceDetection* voice_detection() const override; | 119 VoiceDetection* voice_detection() const override; |
120 | 120 |
121 // TODO(peah): Remove MutateConfig once the new API allows that. | 121 // TODO(peah): Remove MutateConfig once the new API allows that. |
122 void MutateConfig(rtc::FunctionView<void(AudioProcessing::Config*)> mutator); | 122 void MutateConfig(rtc::FunctionView<void(AudioProcessing::Config*)> mutator); |
123 AudioProcessing::Config GetConfig() const override; | 123 AudioProcessing::Config GetConfig() const override; |
124 | 124 |
125 protected: | 125 protected: |
126 // Overridden in a mock. | 126 // Overridden in a mock. |
127 virtual int InitializeLocked() | 127 virtual int InitializeLocked() |
128 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); | 128 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); |
129 | 129 |
130 private: | 130 private: |
131 // TODO(peah): These friend classes should be removed as soon as the new | 131 // TODO(peah): These friend classes should be removed as soon as the new |
132 // parameter setting scheme allows. | 132 // parameter setting scheme allows. |
133 FRIEND_TEST_ALL_PREFIXES(ApmConfiguration, DefaultBehavior); | 133 FRIEND_TEST_ALL_PREFIXES(ApmConfiguration, DefaultBehavior); |
134 FRIEND_TEST_ALL_PREFIXES(ApmConfiguration, ValidConfigBehavior); | 134 FRIEND_TEST_ALL_PREFIXES(ApmConfiguration, ValidConfigBehavior); |
135 FRIEND_TEST_ALL_PREFIXES(ApmConfiguration, InValidConfigBehavior); | 135 FRIEND_TEST_ALL_PREFIXES(ApmConfiguration, InValidConfigBehavior); |
136 struct ApmPublicSubmodules; | 136 struct ApmPublicSubmodules; |
137 struct ApmPrivateSubmodules; | 137 struct ApmPrivateSubmodules; |
138 | 138 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 bool first_update_ = true; | 181 bool first_update_ = true; |
182 }; | 182 }; |
183 | 183 |
184 // Method for modifying the formats struct that are called from both | 184 // Method for modifying the formats struct that are called from both |
185 // the render and capture threads. The check for whether modifications | 185 // the render and capture threads. The check for whether modifications |
186 // are needed is done while holding the render lock only, thereby avoiding | 186 // are needed is done while holding the render lock only, thereby avoiding |
187 // that the capture thread blocks the render thread. | 187 // that the capture thread blocks the render thread. |
188 // The struct is modified in a single-threaded manner by holding both the | 188 // The struct is modified in a single-threaded manner by holding both the |
189 // render and capture locks. | 189 // render and capture locks. |
190 int MaybeInitialize(const ProcessingConfig& config, bool force_initialization) | 190 int MaybeInitialize(const ProcessingConfig& config, bool force_initialization) |
191 EXCLUSIVE_LOCKS_REQUIRED(crit_render_); | 191 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
192 | 192 |
193 int MaybeInitializeRender(const ProcessingConfig& processing_config) | 193 int MaybeInitializeRender(const ProcessingConfig& processing_config) |
194 EXCLUSIVE_LOCKS_REQUIRED(crit_render_); | 194 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
195 | 195 |
196 int MaybeInitializeCapture(const ProcessingConfig& processing_config, | 196 int MaybeInitializeCapture(const ProcessingConfig& processing_config, |
197 bool force_initialization) | 197 bool force_initialization) |
198 EXCLUSIVE_LOCKS_REQUIRED(crit_render_); | 198 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
199 | 199 |
200 // Method for updating the state keeping track of the active submodules. | 200 // Method for updating the state keeping track of the active submodules. |
201 // Returns a bool indicating whether the state has changed. | 201 // Returns a bool indicating whether the state has changed. |
202 bool UpdateActiveSubmoduleStates() EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | 202 bool UpdateActiveSubmoduleStates() |
| 203 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
203 | 204 |
204 // Methods requiring APM running in a single-threaded manner. | 205 // Methods requiring APM running in a single-threaded manner. |
205 // Are called with both the render and capture locks already | 206 // Are called with both the render and capture locks already |
206 // acquired. | 207 // acquired. |
207 void InitializeTransient() | 208 void InitializeTransient() |
208 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); | 209 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); |
209 void InitializeBeamformer() | 210 void InitializeBeamformer() |
210 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); | 211 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); |
211 void InitializeIntelligibility() | 212 void InitializeIntelligibility() |
212 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); | 213 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); |
213 int InitializeLocked(const ProcessingConfig& config) | 214 int InitializeLocked(const ProcessingConfig& config) |
214 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); | 215 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); |
215 void InitializeLevelController() EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | 216 void InitializeLevelController() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
216 void InitializeResidualEchoDetector() | 217 void InitializeResidualEchoDetector() |
217 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); | 218 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); |
218 void InitializeLowCutFilter() EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | 219 void InitializeLowCutFilter() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
219 void InitializeEchoCanceller3() EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | 220 void InitializeEchoCanceller3() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
220 void InitializeGainController2(); | 221 void InitializeGainController2(); |
221 | 222 |
222 void EmptyQueuedRenderAudio(); | 223 void EmptyQueuedRenderAudio(); |
223 void AllocateRenderQueue() | 224 void AllocateRenderQueue() |
224 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); | 225 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); |
225 void QueueBandedRenderAudio(AudioBuffer* audio) | 226 void QueueBandedRenderAudio(AudioBuffer* audio) |
226 EXCLUSIVE_LOCKS_REQUIRED(crit_render_); | 227 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
227 void QueueNonbandedRenderAudio(AudioBuffer* audio) | 228 void QueueNonbandedRenderAudio(AudioBuffer* audio) |
228 EXCLUSIVE_LOCKS_REQUIRED(crit_render_); | 229 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
229 | 230 |
230 // Capture-side exclusive methods possibly running APM in a multi-threaded | 231 // Capture-side exclusive methods possibly running APM in a multi-threaded |
231 // manner that are called with the render lock already acquired. | 232 // manner that are called with the render lock already acquired. |
232 int ProcessCaptureStreamLocked() EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | 233 int ProcessCaptureStreamLocked() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
233 void MaybeUpdateHistograms() EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | 234 void MaybeUpdateHistograms() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
234 | 235 |
235 // Render-side exclusive methods possibly running APM in a multi-threaded | 236 // Render-side exclusive methods possibly running APM in a multi-threaded |
236 // manner that are called with the render lock already acquired. | 237 // manner that are called with the render lock already acquired. |
237 // TODO(ekm): Remove once all clients updated to new interface. | 238 // TODO(ekm): Remove once all clients updated to new interface. |
238 int AnalyzeReverseStreamLocked(const float* const* src, | 239 int AnalyzeReverseStreamLocked(const float* const* src, |
239 const StreamConfig& input_config, | 240 const StreamConfig& input_config, |
240 const StreamConfig& output_config) | 241 const StreamConfig& output_config) |
241 EXCLUSIVE_LOCKS_REQUIRED(crit_render_); | 242 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
242 int ProcessRenderStreamLocked() EXCLUSIVE_LOCKS_REQUIRED(crit_render_); | 243 int ProcessRenderStreamLocked() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
243 | 244 |
244 // Collects configuration settings from public and private | 245 // Collects configuration settings from public and private |
245 // submodules to be saved as an audioproc::Config message on the | 246 // submodules to be saved as an audioproc::Config message on the |
246 // AecDump if it is attached. If not |forced|, only writes the current | 247 // AecDump if it is attached. If not |forced|, only writes the current |
247 // config if it is different from the last saved one; if |forced|, | 248 // config if it is different from the last saved one; if |forced|, |
248 // writes the config regardless of the last saved. | 249 // writes the config regardless of the last saved. |
249 void WriteAecDumpConfigMessage(bool forced) | 250 void WriteAecDumpConfigMessage(bool forced) |
250 EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | 251 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
251 | 252 |
252 // Notifies attached AecDump of current configuration and capture data. | 253 // Notifies attached AecDump of current configuration and capture data. |
253 void RecordUnprocessedCaptureStream(const float* const* capture_stream) | 254 void RecordUnprocessedCaptureStream(const float* const* capture_stream) |
254 EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | 255 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
255 | 256 |
256 void RecordUnprocessedCaptureStream(const AudioFrame& capture_frame) | 257 void RecordUnprocessedCaptureStream(const AudioFrame& capture_frame) |
257 EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | 258 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
258 | 259 |
259 // Notifies attached AecDump of current configuration and | 260 // Notifies attached AecDump of current configuration and |
260 // processed capture data and issues a capture stream recording | 261 // processed capture data and issues a capture stream recording |
261 // request. | 262 // request. |
262 void RecordProcessedCaptureStream( | 263 void RecordProcessedCaptureStream( |
263 const float* const* processed_capture_stream) | 264 const float* const* processed_capture_stream) |
264 EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | 265 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
265 | 266 |
266 void RecordProcessedCaptureStream(const AudioFrame& processed_capture_frame) | 267 void RecordProcessedCaptureStream(const AudioFrame& processed_capture_frame) |
267 EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | 268 RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
268 | 269 |
269 // Notifies attached AecDump about current state (delay, drift, etc). | 270 // Notifies attached AecDump about current state (delay, drift, etc). |
270 void RecordAudioProcessingState() EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | 271 void RecordAudioProcessingState() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
271 | 272 |
272 // AecDump instance used for optionally logging APM config, input | 273 // AecDump instance used for optionally logging APM config, input |
273 // and output to file in the AEC-dump format defined in debug.proto. | 274 // and output to file in the AEC-dump format defined in debug.proto. |
274 std::unique_ptr<AecDump> aec_dump_; | 275 std::unique_ptr<AecDump> aec_dump_; |
275 | 276 |
276 // Hold the last config written with AecDump for avoiding writing | 277 // Hold the last config written with AecDump for avoiding writing |
277 // the same config twice. | 278 // the same config twice. |
278 InternalAPMConfig apm_config_for_aec_dump_ GUARDED_BY(crit_capture_); | 279 InternalAPMConfig apm_config_for_aec_dump_ RTC_GUARDED_BY(crit_capture_); |
279 | 280 |
280 // Critical sections. | 281 // Critical sections. |
281 rtc::CriticalSection crit_render_ ACQUIRED_BEFORE(crit_capture_); | 282 rtc::CriticalSection crit_render_ RTC_ACQUIRED_BEFORE(crit_capture_); |
282 rtc::CriticalSection crit_capture_; | 283 rtc::CriticalSection crit_capture_; |
283 | 284 |
284 // Struct containing the Config specifying the behavior of APM. | 285 // Struct containing the Config specifying the behavior of APM. |
285 AudioProcessing::Config config_; | 286 AudioProcessing::Config config_; |
286 | 287 |
287 // Class containing information about what submodules are active. | 288 // Class containing information about what submodules are active. |
288 ApmSubmoduleStates submodule_states_; | 289 ApmSubmoduleStates submodule_states_; |
289 | 290 |
290 // Structs containing the pointers to the submodules. | 291 // Structs containing the pointers to the submodules. |
291 std::unique_ptr<ApmPublicSubmodules> public_submodules_; | 292 std::unique_ptr<ApmPublicSubmodules> public_submodules_; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 bool transient_suppressor_enabled; | 339 bool transient_suppressor_enabled; |
339 std::vector<Point> array_geometry; | 340 std::vector<Point> array_geometry; |
340 SphericalPointf target_direction; | 341 SphericalPointf target_direction; |
341 std::unique_ptr<AudioBuffer> capture_audio; | 342 std::unique_ptr<AudioBuffer> capture_audio; |
342 // Only the rate and samples fields of capture_processing_format_ are used | 343 // Only the rate and samples fields of capture_processing_format_ are used |
343 // because the capture processing number of channels is mutable and is | 344 // because the capture processing number of channels is mutable and is |
344 // tracked by the capture_audio_. | 345 // tracked by the capture_audio_. |
345 StreamConfig capture_processing_format; | 346 StreamConfig capture_processing_format; |
346 int split_rate; | 347 int split_rate; |
347 bool echo_path_gain_change; | 348 bool echo_path_gain_change; |
348 } capture_ GUARDED_BY(crit_capture_); | 349 } capture_ RTC_GUARDED_BY(crit_capture_); |
349 | 350 |
350 struct ApmCaptureNonLockedState { | 351 struct ApmCaptureNonLockedState { |
351 ApmCaptureNonLockedState(bool beamformer_enabled, | 352 ApmCaptureNonLockedState(bool beamformer_enabled, |
352 bool intelligibility_enabled) | 353 bool intelligibility_enabled) |
353 : capture_processing_format(kSampleRate16kHz), | 354 : capture_processing_format(kSampleRate16kHz), |
354 split_rate(kSampleRate16kHz), | 355 split_rate(kSampleRate16kHz), |
355 stream_delay_ms(0), | 356 stream_delay_ms(0), |
356 beamformer_enabled(beamformer_enabled), | 357 beamformer_enabled(beamformer_enabled), |
357 intelligibility_enabled(intelligibility_enabled) {} | 358 intelligibility_enabled(intelligibility_enabled) {} |
358 // Only the rate and samples fields of capture_processing_format_ are used | 359 // Only the rate and samples fields of capture_processing_format_ are used |
359 // because the forward processing number of channels is mutable and is | 360 // because the forward processing number of channels is mutable and is |
360 // tracked by the capture_audio_. | 361 // tracked by the capture_audio_. |
361 StreamConfig capture_processing_format; | 362 StreamConfig capture_processing_format; |
362 int split_rate; | 363 int split_rate; |
363 int stream_delay_ms; | 364 int stream_delay_ms; |
364 bool beamformer_enabled; | 365 bool beamformer_enabled; |
365 bool intelligibility_enabled; | 366 bool intelligibility_enabled; |
366 bool level_controller_enabled = false; | 367 bool level_controller_enabled = false; |
367 bool echo_canceller3_enabled = false; | 368 bool echo_canceller3_enabled = false; |
368 bool gain_controller2_enabled = false; | 369 bool gain_controller2_enabled = false; |
369 } capture_nonlocked_; | 370 } capture_nonlocked_; |
370 | 371 |
371 struct ApmRenderState { | 372 struct ApmRenderState { |
372 ApmRenderState(); | 373 ApmRenderState(); |
373 ~ApmRenderState(); | 374 ~ApmRenderState(); |
374 std::unique_ptr<AudioConverter> render_converter; | 375 std::unique_ptr<AudioConverter> render_converter; |
375 std::unique_ptr<AudioBuffer> render_audio; | 376 std::unique_ptr<AudioBuffer> render_audio; |
376 } render_ GUARDED_BY(crit_render_); | 377 } render_ RTC_GUARDED_BY(crit_render_); |
377 | 378 |
378 size_t aec_render_queue_element_max_size_ GUARDED_BY(crit_render_) | 379 size_t aec_render_queue_element_max_size_ RTC_GUARDED_BY(crit_render_) |
379 GUARDED_BY(crit_capture_) = 0; | 380 RTC_GUARDED_BY(crit_capture_) = 0; |
380 std::vector<float> aec_render_queue_buffer_ GUARDED_BY(crit_render_); | 381 std::vector<float> aec_render_queue_buffer_ RTC_GUARDED_BY(crit_render_); |
381 std::vector<float> aec_capture_queue_buffer_ GUARDED_BY(crit_capture_); | 382 std::vector<float> aec_capture_queue_buffer_ RTC_GUARDED_BY(crit_capture_); |
382 | 383 |
383 size_t aecm_render_queue_element_max_size_ GUARDED_BY(crit_render_) | 384 size_t aecm_render_queue_element_max_size_ RTC_GUARDED_BY(crit_render_) |
384 GUARDED_BY(crit_capture_) = 0; | 385 RTC_GUARDED_BY(crit_capture_) = 0; |
385 std::vector<int16_t> aecm_render_queue_buffer_ GUARDED_BY(crit_render_); | 386 std::vector<int16_t> aecm_render_queue_buffer_ RTC_GUARDED_BY(crit_render_); |
386 std::vector<int16_t> aecm_capture_queue_buffer_ GUARDED_BY(crit_capture_); | 387 std::vector<int16_t> aecm_capture_queue_buffer_ RTC_GUARDED_BY(crit_capture_); |
387 | 388 |
388 size_t agc_render_queue_element_max_size_ GUARDED_BY(crit_render_) | 389 size_t agc_render_queue_element_max_size_ RTC_GUARDED_BY(crit_render_) |
389 GUARDED_BY(crit_capture_) = 0; | 390 RTC_GUARDED_BY(crit_capture_) = 0; |
390 std::vector<int16_t> agc_render_queue_buffer_ GUARDED_BY(crit_render_); | 391 std::vector<int16_t> agc_render_queue_buffer_ RTC_GUARDED_BY(crit_render_); |
391 std::vector<int16_t> agc_capture_queue_buffer_ GUARDED_BY(crit_capture_); | 392 std::vector<int16_t> agc_capture_queue_buffer_ RTC_GUARDED_BY(crit_capture_); |
392 | 393 |
393 size_t red_render_queue_element_max_size_ GUARDED_BY(crit_render_) | 394 size_t red_render_queue_element_max_size_ RTC_GUARDED_BY(crit_render_) |
394 GUARDED_BY(crit_capture_) = 0; | 395 RTC_GUARDED_BY(crit_capture_) = 0; |
395 std::vector<float> red_render_queue_buffer_ GUARDED_BY(crit_render_); | 396 std::vector<float> red_render_queue_buffer_ RTC_GUARDED_BY(crit_render_); |
396 std::vector<float> red_capture_queue_buffer_ GUARDED_BY(crit_capture_); | 397 std::vector<float> red_capture_queue_buffer_ RTC_GUARDED_BY(crit_capture_); |
397 | 398 |
398 RmsLevel capture_input_rms_ GUARDED_BY(crit_capture_); | 399 RmsLevel capture_input_rms_ RTC_GUARDED_BY(crit_capture_); |
399 RmsLevel capture_output_rms_ GUARDED_BY(crit_capture_); | 400 RmsLevel capture_output_rms_ RTC_GUARDED_BY(crit_capture_); |
400 int capture_rms_interval_counter_ GUARDED_BY(crit_capture_) = 0; | 401 int capture_rms_interval_counter_ RTC_GUARDED_BY(crit_capture_) = 0; |
401 | 402 |
402 // Lock protection not needed. | 403 // Lock protection not needed. |
403 std::unique_ptr<SwapQueue<std::vector<float>, RenderQueueItemVerifier<float>>> | 404 std::unique_ptr<SwapQueue<std::vector<float>, RenderQueueItemVerifier<float>>> |
404 aec_render_signal_queue_; | 405 aec_render_signal_queue_; |
405 std::unique_ptr< | 406 std::unique_ptr< |
406 SwapQueue<std::vector<int16_t>, RenderQueueItemVerifier<int16_t>>> | 407 SwapQueue<std::vector<int16_t>, RenderQueueItemVerifier<int16_t>>> |
407 aecm_render_signal_queue_; | 408 aecm_render_signal_queue_; |
408 std::unique_ptr< | 409 std::unique_ptr< |
409 SwapQueue<std::vector<int16_t>, RenderQueueItemVerifier<int16_t>>> | 410 SwapQueue<std::vector<int16_t>, RenderQueueItemVerifier<int16_t>>> |
410 agc_render_signal_queue_; | 411 agc_render_signal_queue_; |
411 std::unique_ptr<SwapQueue<std::vector<float>, RenderQueueItemVerifier<float>>> | 412 std::unique_ptr<SwapQueue<std::vector<float>, RenderQueueItemVerifier<float>>> |
412 red_render_signal_queue_; | 413 red_render_signal_queue_; |
413 }; | 414 }; |
414 | 415 |
415 } // namespace webrtc | 416 } // namespace webrtc |
416 | 417 |
417 #endif // WEBRTC_MODULES_AUDIO_PROCESSING_AUDIO_PROCESSING_IMPL_H_ | 418 #endif // WEBRTC_MODULES_AUDIO_PROCESSING_AUDIO_PROCESSING_IMPL_H_ |
OLD | NEW |