OLD | NEW |
---|---|
1 | |
hlundin-webrtc
2015/11/05 16:11:21
No.
peah-webrtc
2015/11/06 09:54:32
Done.
| |
1 /* | 2 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 3 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 4 * |
4 * Use of this source code is governed by a BSD-style license | 5 * 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 | 6 * 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 | 7 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 8 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 9 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 10 */ |
10 | 11 |
11 #ifndef WEBRTC_MODULES_AUDIO_PROCESSING_AUDIO_PROCESSING_IMPL_H_ | 12 #ifndef WEBRTC_MODULES_AUDIO_PROCESSING_AUDIO_PROCESSING_IMPL_H_ |
12 #define WEBRTC_MODULES_AUDIO_PROCESSING_AUDIO_PROCESSING_IMPL_H_ | 13 #define WEBRTC_MODULES_AUDIO_PROCESSING_AUDIO_PROCESSING_IMPL_H_ |
13 | 14 |
14 #include <list> | 15 #include <list> |
15 #include <string> | 16 #include <string> |
16 #include <vector> | 17 #include <vector> |
17 | 18 |
19 #include "webrtc/base/criticalsection.h" | |
18 #include "webrtc/base/scoped_ptr.h" | 20 #include "webrtc/base/scoped_ptr.h" |
19 #include "webrtc/base/thread_annotations.h" | 21 #include "webrtc/base/thread_annotations.h" |
20 #include "webrtc/base/thread_checker.h" | 22 #include "webrtc/base/thread_checker.h" |
23 #include "webrtc/modules/audio_processing/audio_buffer.h" | |
21 #include "webrtc/modules/audio_processing/include/audio_processing.h" | 24 #include "webrtc/modules/audio_processing/include/audio_processing.h" |
25 #include "webrtc/system_wrappers/include/file_wrapper.h" | |
26 | |
27 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | |
28 // Files generated at build-time by the protobuf compiler. | |
29 #ifdef WEBRTC_ANDROID_PLATFORM_BUILD | |
30 #include "external/webrtc/webrtc/modules/audio_processing/debug.pb.h" | |
31 #else | |
32 #include "webrtc/audio_processing/debug.pb.h" | |
33 #endif | |
34 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP | |
22 | 35 |
23 namespace webrtc { | 36 namespace webrtc { |
24 | 37 |
25 class AgcManagerDirect; | 38 class AgcManagerDirect; |
26 class AudioBuffer; | |
27 class AudioConverter; | 39 class AudioConverter; |
28 | 40 |
29 template<typename T> | 41 template<typename T> |
30 class Beamformer; | 42 class Beamformer; |
31 | 43 |
44 struct ApmExternallyAccessibleSubModules; | |
hlundin-webrtc
2015/11/05 16:11:22
Suggest ApmPublicSubModules ...
peah-webrtc
2015/11/06 09:54:32
Done.
| |
45 struct ApmInternalSubModules; | |
hlundin-webrtc
2015/11/05 16:11:21
... and ApmPrivateSubmodules.
peah-webrtc
2015/11/06 09:54:32
Done.
| |
32 class CriticalSectionWrapper; | 46 class CriticalSectionWrapper; |
33 class EchoCancellationImpl; | 47 class EchoCancellationImpl; |
34 class EchoControlMobileImpl; | 48 class EchoControlMobileImpl; |
35 class FileWrapper; | 49 class FileWrapper; |
hlundin-webrtc
2015/11/05 16:11:22
No need to forward-declare now that you have the "
peah-webrtc
2015/11/06 09:54:32
Done.
| |
36 class GainControlImpl; | 50 class GainControlImpl; |
37 class GainControlForNewAgc; | 51 class GainControlForNewAgc; |
38 class HighPassFilterImpl; | 52 class HighPassFilterImpl; |
39 class LevelEstimatorImpl; | 53 class LevelEstimatorImpl; |
40 class NoiseSuppressionImpl; | 54 class NoiseSuppressionImpl; |
41 class ProcessingComponent; | 55 class ProcessingComponent; |
42 class TransientSuppressor; | 56 class TransientSuppressor; |
43 class VoiceDetectionImpl; | 57 class VoiceDetectionImpl; |
44 class IntelligibilityEnhancer; | 58 class IntelligibilityEnhancer; |
45 | 59 |
46 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 60 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
47 namespace audioproc { | 61 namespace audioproc { |
48 | 62 |
49 class Event; | 63 class Event; |
50 | 64 |
51 } // namespace audioproc | 65 } // namespace audioproc |
66 | |
67 // State for the debug dump. | |
68 struct ApmDebugDumpThreadState { | |
69 ApmDebugDumpThreadState() : event_msg(new audioproc::Event()) {} | |
70 rtc::scoped_ptr<audioproc::Event> event_msg; // Protobuf message. | |
71 std::string event_str; // Memory for protobuf serialization. | |
72 | |
73 // Serialized string of last saved APM configuration. | |
74 std::string last_serialized_config; | |
75 }; | |
76 | |
77 struct ApmDebugDumpState { | |
78 ApmDebugDumpState() : debug_file(FileWrapper::Create()) {} | |
79 rtc::scoped_ptr<FileWrapper> debug_file; | |
80 ApmDebugDumpThreadState render; | |
81 ApmDebugDumpThreadState capture; | |
82 }; | |
83 | |
52 #endif | 84 #endif |
53 | 85 |
54 class AudioProcessingImpl : public AudioProcessing { | 86 class AudioProcessingImpl : public AudioProcessing { |
55 public: | 87 public: |
88 // Methods forcing APM to running in a single-threaded manner. | |
hlundin-webrtc
2015/11/05 16:11:21
Nit: running -> run
peah-webrtc
2015/11/06 09:54:32
Done.
| |
89 // Acquires both the render and capture locks. | |
56 explicit AudioProcessingImpl(const Config& config); | 90 explicit AudioProcessingImpl(const Config& config); |
57 | |
58 // AudioProcessingImpl takes ownership of beamformer. | 91 // AudioProcessingImpl takes ownership of beamformer. |
59 AudioProcessingImpl(const Config& config, Beamformer<float>* beamformer); | 92 AudioProcessingImpl(const Config& config, Beamformer<float>* beamformer); |
60 virtual ~AudioProcessingImpl(); | 93 virtual ~AudioProcessingImpl(); |
61 | |
62 // AudioProcessing methods. | |
63 int Initialize() override; | 94 int Initialize() override; |
64 int Initialize(int input_sample_rate_hz, | 95 int Initialize(int input_sample_rate_hz, |
65 int output_sample_rate_hz, | 96 int output_sample_rate_hz, |
66 int reverse_sample_rate_hz, | 97 int reverse_sample_rate_hz, |
67 ChannelLayout input_layout, | 98 ChannelLayout input_layout, |
68 ChannelLayout output_layout, | 99 ChannelLayout output_layout, |
69 ChannelLayout reverse_layout) override; | 100 ChannelLayout reverse_layout) override; |
70 int Initialize(const ProcessingConfig& processing_config) override; | 101 int Initialize(const ProcessingConfig& processing_config) override; |
71 void SetExtraOptions(const Config& config) override; | 102 void SetExtraOptions(const Config& config) override; |
72 int proc_sample_rate_hz() const override; | 103 void UpdateHistogramsOnCallEnd() override; |
73 int proc_split_sample_rate_hz() const override; | 104 int StartDebugRecording(const char filename[kMaxFilenameSize]) override; |
74 int num_input_channels() const override; | 105 int StartDebugRecording(FILE* handle) override; |
75 int num_output_channels() const override; | 106 int StartDebugRecordingForPlatformFile(rtc::PlatformFile handle) override; |
76 int num_reverse_channels() const override; | 107 int StopDebugRecording() override; |
77 void set_output_will_be_muted(bool muted) override; | 108 |
109 // Capture-side exclusive methods possibly running APM in a | |
110 // multi-threaded manner. Acquires the capture lock. | |
78 int ProcessStream(AudioFrame* frame) override; | 111 int ProcessStream(AudioFrame* frame) override; |
79 int ProcessStream(const float* const* src, | 112 int ProcessStream(const float* const* src, |
80 size_t samples_per_channel, | 113 size_t samples_per_channel, |
81 int input_sample_rate_hz, | 114 int input_sample_rate_hz, |
82 ChannelLayout input_layout, | 115 ChannelLayout input_layout, |
83 int output_sample_rate_hz, | 116 int output_sample_rate_hz, |
84 ChannelLayout output_layout, | 117 ChannelLayout output_layout, |
85 float* const* dest) override; | 118 float* const* dest) override; |
86 int ProcessStream(const float* const* src, | 119 int ProcessStream(const float* const* src, |
87 const StreamConfig& input_config, | 120 const StreamConfig& input_config, |
88 const StreamConfig& output_config, | 121 const StreamConfig& output_config, |
89 float* const* dest) override; | 122 float* const* dest) override; |
123 void set_output_will_be_muted(bool muted) override; | |
124 int set_stream_delay_ms(int delay) override; | |
125 void set_delay_offset_ms(int offset) override; | |
126 int delay_offset_ms() const override; | |
127 void set_stream_key_pressed(bool key_pressed) override; | |
128 | |
129 // Render-side exclusive methods possibly running APM in a | |
130 // multi-threaded manner. Acquires the render lock. | |
90 int AnalyzeReverseStream(AudioFrame* frame) override; | 131 int AnalyzeReverseStream(AudioFrame* frame) override; |
91 int ProcessReverseStream(AudioFrame* frame) override; | 132 int ProcessReverseStream(AudioFrame* frame) override; |
92 int AnalyzeReverseStream(const float* const* data, | 133 int AnalyzeReverseStream(const float* const* data, |
93 size_t samples_per_channel, | 134 size_t samples_per_channel, |
94 int sample_rate_hz, | 135 int sample_rate_hz, |
95 ChannelLayout layout) override; | 136 ChannelLayout layout) override; |
96 int ProcessReverseStream(const float* const* src, | 137 int ProcessReverseStream(const float* const* src, |
97 const StreamConfig& reverse_input_config, | 138 const StreamConfig& reverse_input_config, |
98 const StreamConfig& reverse_output_config, | 139 const StreamConfig& reverse_output_config, |
99 float* const* dest) override; | 140 float* const* dest) override; |
100 int set_stream_delay_ms(int delay) override; | 141 |
142 // Methods only accessed from APM submodules or | |
143 // from AudioProcessing tests in a single-threaded manner. | |
144 // Hence there is no need for locks in these | |
hlundin-webrtc
2015/11/05 16:11:21
End with .
peah-webrtc
2015/11/06 09:54:31
Done.
| |
145 int proc_sample_rate_hz() const override; | |
146 int proc_split_sample_rate_hz() const override; | |
147 int num_input_channels() const override; | |
148 int num_output_channels() const override; | |
149 int num_reverse_channels() const override; | |
101 int stream_delay_ms() const override; | 150 int stream_delay_ms() const override; |
102 bool was_stream_delay_set() const override; | 151 bool was_stream_delay_set() const override |
103 void set_delay_offset_ms(int offset) override; | 152 EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
104 int delay_offset_ms() const override; | 153 |
105 void set_stream_key_pressed(bool key_pressed) override; | 154 // Methods passing pointers to APM submodules. |
hlundin-webrtc
2015/11/05 16:11:22
passing -> returning
It sounds as if the methods p
peah-webrtc
2015/11/06 09:54:32
Fully true! Good point!
Done.
| |
106 int StartDebugRecording(const char filename[kMaxFilenameSize]) override; | 155 // No locks are aquired in those, as those locks |
107 int StartDebugRecording(FILE* handle) override; | 156 // would offer no protection (the submodules are |
108 int StartDebugRecordingForPlatformFile(rtc::PlatformFile handle) override; | 157 // created only once in a single-treaded manner |
109 int StopDebugRecording() override; | 158 // during APM creation) |
hlundin-webrtc
2015/11/05 16:11:21
End with .
peah-webrtc
2015/11/06 09:54:32
Done.
| |
110 void UpdateHistogramsOnCallEnd() override; | |
111 EchoCancellation* echo_cancellation() const override; | 159 EchoCancellation* echo_cancellation() const override; |
112 EchoControlMobile* echo_control_mobile() const override; | 160 EchoControlMobile* echo_control_mobile() const override; |
113 GainControl* gain_control() const override; | 161 GainControl* gain_control() const override; |
114 HighPassFilter* high_pass_filter() const override; | 162 HighPassFilter* high_pass_filter() const override; |
115 LevelEstimator* level_estimator() const override; | 163 LevelEstimator* level_estimator() const override; |
116 NoiseSuppression* noise_suppression() const override; | 164 NoiseSuppression* noise_suppression() const override; |
117 VoiceDetection* voice_detection() const override; | 165 VoiceDetection* voice_detection() const override; |
118 | 166 |
119 protected: | 167 protected: |
120 // Overridden in a mock. | 168 // Overridden in a mock. |
121 virtual int InitializeLocked() EXCLUSIVE_LOCKS_REQUIRED(crit_); | 169 virtual int InitializeLocked() |
170 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); | |
122 | 171 |
123 private: | 172 private: |
173 // Method for modifying the formats struct that are called from both | |
174 // the render and capture threads. The check for whether modifications | |
175 // are needed is done while holding the render lock only, thereby avoiding | |
176 // that | |
hlundin-webrtc
2015/11/05 16:11:21
Widow
peah-webrtc
2015/11/06 09:54:32
Done.
| |
177 // the capture thread blocks the render thread. | |
178 // The struct is modified in a single-threaded manner by holding both the | |
179 // render | |
hlundin-webrtc
2015/11/05 16:11:21
Widow
peah-webrtc
2015/11/06 09:54:32
Done.
| |
180 // and capture locks. | |
181 int MaybeInitialize(const ProcessingConfig& config) | |
182 EXCLUSIVE_LOCKS_REQUIRED(crit_render_); | |
183 // Method for checking for the need of conversion. Accesses the formats | |
hlundin-webrtc
2015/11/05 16:11:22
Generally quite ugly line-breaking in this comment
peah-webrtc
2015/11/06 09:54:32
Totally agree! I'll blame it on CL format, but it'
| |
184 // structs in a | |
185 // read manner but the requirement for the render lock to be held was added as | |
186 // it | |
187 // currently anyway is always called in that manner. | |
188 bool rev_conversion_needed() const EXCLUSIVE_LOCKS_REQUIRED(crit_render_); | |
189 | |
190 // Methods requiring APM running in a single-threaded manner. | |
191 // Are called with both the render and capture locks already | |
hlundin-webrtc
2015/11/05 16:11:22
Double space between 'with' and 'both'.
peah-webrtc
2015/11/06 09:54:31
Nice catch!
Done.
| |
192 // acquired. | |
193 void InitializeExperimentalAgc() | |
194 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); | |
195 void InitializeTransient() | |
196 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); | |
197 void InitializeBeamformer() | |
198 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); | |
199 void InitializeIntelligibility() | |
200 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); | |
124 int InitializeLocked(const ProcessingConfig& config) | 201 int InitializeLocked(const ProcessingConfig& config) |
125 EXCLUSIVE_LOCKS_REQUIRED(crit_); | 202 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); |
126 int MaybeInitializeLocked(const ProcessingConfig& config) | 203 |
127 EXCLUSIVE_LOCKS_REQUIRED(crit_); | 204 // Capture-side exclusive methods possibly running APM in a multi-threaded |
205 // manner | |
hlundin-webrtc
2015/11/05 16:11:21
Widow
peah-webrtc
2015/11/06 09:54:32
Done.
| |
206 // that are called with the render lock already acquired. | |
207 int ProcessStreamLocked() EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | |
208 bool output_copy_needed(bool is_data_processed) const | |
209 EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | |
210 bool is_data_processed() const EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | |
211 bool synthesis_needed(bool is_data_processed) const | |
212 EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | |
213 bool analysis_needed(bool is_data_processed) const | |
214 EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | |
215 void MaybeUpdateHistograms() EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); | |
216 | |
217 // Render-side exclusive methods possibly running APM in a multi-threaded | |
218 // manner | |
hlundin-webrtc
2015/11/05 16:11:22
Widow
peah-webrtc
2015/11/06 09:54:32
Done.
| |
219 // that are called with the render lock already acquired. | |
128 // TODO(ekm): Remove once all clients updated to new interface. | 220 // TODO(ekm): Remove once all clients updated to new interface. |
129 int AnalyzeReverseStream(const float* const* src, | 221 int AnalyzeReverseStreamLocked(const float* const* src, |
130 const StreamConfig& input_config, | 222 const StreamConfig& input_config, |
131 const StreamConfig& output_config); | 223 const StreamConfig& output_config) |
132 int ProcessStreamLocked() EXCLUSIVE_LOCKS_REQUIRED(crit_); | 224 EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
133 int ProcessReverseStreamLocked() EXCLUSIVE_LOCKS_REQUIRED(crit_); | 225 bool is_rev_processed() const EXCLUSIVE_LOCKS_REQUIRED(crit_render_); |
226 int ProcessReverseStreamLocked() EXCLUSIVE_LOCKS_REQUIRED(crit_render_); | |
134 | 227 |
135 bool is_data_processed() const; | 228 // Debug dump methods that are internal and called without locks. |
136 bool output_copy_needed(bool is_data_processed) const; | 229 // TODO(peah): Make thread safe. |
137 bool synthesis_needed(bool is_data_processed) const; | |
138 bool analysis_needed(bool is_data_processed) const; | |
139 bool is_rev_processed() const; | |
140 bool rev_conversion_needed() const; | |
141 void InitializeExperimentalAgc() EXCLUSIVE_LOCKS_REQUIRED(crit_); | |
142 void InitializeTransient() EXCLUSIVE_LOCKS_REQUIRED(crit_); | |
143 void InitializeBeamformer() EXCLUSIVE_LOCKS_REQUIRED(crit_); | |
144 void InitializeIntelligibility() EXCLUSIVE_LOCKS_REQUIRED(crit_); | |
145 void MaybeUpdateHistograms() EXCLUSIVE_LOCKS_REQUIRED(crit_); | |
146 | |
147 EchoCancellationImpl* echo_cancellation_; | |
148 EchoControlMobileImpl* echo_control_mobile_; | |
149 GainControlImpl* gain_control_; | |
150 HighPassFilterImpl* high_pass_filter_; | |
151 LevelEstimatorImpl* level_estimator_; | |
152 NoiseSuppressionImpl* noise_suppression_; | |
153 VoiceDetectionImpl* voice_detection_; | |
154 rtc::scoped_ptr<GainControlForNewAgc> gain_control_for_new_agc_; | |
155 | |
156 std::list<ProcessingComponent*> component_list_; | |
157 CriticalSectionWrapper* crit_; | |
158 rtc::ThreadChecker render_thread_checker_; | |
159 rtc::ThreadChecker capture_thread_checker_; | |
160 rtc::scoped_ptr<AudioBuffer> render_audio_; | |
161 rtc::scoped_ptr<AudioBuffer> capture_audio_; | |
162 rtc::scoped_ptr<AudioConverter> render_converter_; | |
163 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 230 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
164 // TODO(andrew): make this more graceful. Ideally we would split this stuff | 231 // TODO(andrew): make this more graceful. Ideally we would split this stuff |
165 // out into a separate class with an "enabled" and "disabled" implementation. | 232 // out into a separate class with an "enabled" and "disabled" implementation. |
166 int WriteMessageToDebugFile(); | 233 static int WriteMessageToDebugFile(FileWrapper* debug_file, |
167 int WriteInitMessage(); | 234 rtc::CriticalSection* crit_debug, |
235 ApmDebugDumpThreadState* debug_state); | |
236 int WriteInitMessage() EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); | |
168 | 237 |
169 // Writes Config message. If not |forced|, only writes the current config if | 238 // Writes Config message. If not |forced|, only writes the current config if |
170 // it is different from the last saved one; if |forced|, writes the config | 239 // it is different from the last saved one; if |forced|, writes the config |
171 // regardless of the last saved. | 240 // regardless of the last saved. |
172 int WriteConfigMessage(bool forced); | 241 int WriteConfigMessage(bool forced) EXCLUSIVE_LOCKS_REQUIRED(crit_capture_) |
173 | 242 EXCLUSIVE_LOCKS_REQUIRED(crit_capture_); |
174 rtc::scoped_ptr<FileWrapper> debug_file_; | |
175 rtc::scoped_ptr<audioproc::Event> event_msg_; // Protobuf message. | |
176 std::string event_str_; // Memory for protobuf serialization. | |
177 | |
178 // Serialized string of last saved APM configuration. | |
179 std::string last_serialized_config_; | |
180 #endif | 243 #endif |
181 | 244 |
245 // Critical sections and threadcheckers. | |
246 mutable rtc::CriticalSection crit_render_ ACQUIRED_BEFORE(crit_capture_); | |
247 mutable rtc::CriticalSection crit_capture_; | |
248 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | |
249 mutable rtc::CriticalSection crit_debug_; | |
250 #endif | |
251 rtc::ThreadChecker render_thread_checker_; | |
252 rtc::ThreadChecker capture_thread_checker_; | |
253 | |
254 // Structs containing the pointers to the submodules. | |
255 rtc::scoped_ptr<ApmExternallyAccessibleSubModules> public_submodules_; | |
hlundin-webrtc
2015/11/05 16:11:21
Any reason these two are (scoped) pointers and not
peah-webrtc
2015/11/06 09:54:32
The only reason is that I did not want to expose t
hlundin-webrtc
2015/11/20 10:36:30
This is probably fine.
| |
256 rtc::scoped_ptr<ApmInternalSubModules> private_submodules_ | |
257 GUARDED_BY(crit_capture_); | |
258 | |
182 // State that is written to while holding both the render and capture locks | 259 // State that is written to while holding both the render and capture locks |
183 // but can be read while holding only one of the locks. | 260 // but can be read without any lock being held. |
184 struct SharedState { | 261 // As this is only accessed internally of APM, and all internal methods in APM |
185 SharedState() | 262 // either are holding the render or capture locks, this construct is safe as |
263 // it is not possible to read the variables while writing them. | |
264 struct ApmFormatState { | |
265 ApmFormatState() | |
186 : // Format of processing streams at input/output call sites. | 266 : // Format of processing streams at input/output call sites. |
187 api_format_({{{kSampleRate16kHz, 1, false}, | 267 api_format({{{kSampleRate16kHz, 1, false}, |
188 {kSampleRate16kHz, 1, false}, | 268 {kSampleRate16kHz, 1, false}, |
189 {kSampleRate16kHz, 1, false}, | 269 {kSampleRate16kHz, 1, false}, |
190 {kSampleRate16kHz, 1, false}}}) {} | 270 {kSampleRate16kHz, 1, false}}}), |
191 ProcessingConfig api_format_; | 271 rev_proc_format(kSampleRate16kHz, 1) {} |
192 } shared_state_; | 272 ProcessingConfig api_format; |
273 StreamConfig rev_proc_format; | |
274 } formats_; | |
193 | 275 |
194 // Only the rate and samples fields of fwd_proc_format_ are used because the | 276 // APM constants. |
195 // forward processing number of channels is mutable and is tracked by the | 277 const struct ApmConstants { |
hlundin-webrtc
2015/11/05 16:11:21
The struct is const, and _one_ of the members is c
peah-webrtc
2015/11/06 09:54:32
Good catch! I prefer the latter, and as you point
| |
196 // capture_audio_. | 278 ApmConstants(int agc_startup_min_volume, |
197 StreamConfig fwd_proc_format_; | 279 const std::vector<Point> array_geometry, |
198 StreamConfig rev_proc_format_; | 280 bool use_new_agc, |
199 int split_rate_; | 281 bool intelligibility_enabled) |
282 : // Format of processing streams at input/output call sites. | |
283 agc_startup_min_volume(agc_startup_min_volume), | |
284 array_geometry(array_geometry), | |
285 use_new_agc(use_new_agc), | |
286 intelligibility_enabled(intelligibility_enabled) {} | |
287 int agc_startup_min_volume; | |
288 const std::vector<Point> array_geometry; | |
289 // Only set through the constructor's Config parameter. | |
hlundin-webrtc
2015/11/05 16:11:22
Isn't this true for all members in this struct?
peah-webrtc
2015/11/06 09:54:32
True. That old comment is now redundant.
Done.
| |
290 bool use_new_agc; | |
291 bool intelligibility_enabled; | |
292 } constants_; | |
200 | 293 |
201 int stream_delay_ms_; | 294 struct ApmCaptureState { |
202 int delay_offset_ms_; | 295 ApmCaptureState(bool transient_suppressor_enabled, bool beamformer_enabled) |
203 bool was_stream_delay_set_; | 296 : aec_system_delay_jumps(-1), |
204 int last_stream_delay_ms_; | 297 delay_offset_ms(0), |
205 int last_aec_system_delay_ms_; | 298 was_stream_delay_set(false), |
206 int stream_delay_jumps_; | 299 last_stream_delay_ms(0), |
207 int aec_system_delay_jumps_; | 300 last_aec_system_delay_ms(0), |
301 stream_delay_jumps(-1), | |
302 output_will_be_muted(false), | |
303 key_pressed(false), | |
304 transient_suppressor_enabled(transient_suppressor_enabled), | |
305 beamformer_enabled(beamformer_enabled), | |
306 fwd_proc_format(kSampleRate16kHz), | |
307 split_rate(kSampleRate16kHz) {} | |
308 int aec_system_delay_jumps; | |
309 int delay_offset_ms; | |
310 bool was_stream_delay_set; | |
311 int last_stream_delay_ms; | |
312 int last_aec_system_delay_ms; | |
313 int stream_delay_jumps; | |
314 bool output_will_be_muted; | |
315 bool key_pressed; | |
316 bool transient_suppressor_enabled; | |
208 | 317 |
hlundin-webrtc
2015/11/05 16:11:21
Remove blank line.
peah-webrtc
2015/11/06 09:54:32
Will do, also will move the beamformer enabled fla
| |
209 bool output_will_be_muted_ GUARDED_BY(crit_); | 318 const bool beamformer_enabled; |
319 rtc::scoped_ptr<AudioBuffer> capture_audio; | |
320 // Only the rate and samples fields of fwd_proc_format_ are used because the | |
321 // forward processing number of channels is mutable and is tracked by the | |
322 // capture_audio_. | |
323 StreamConfig fwd_proc_format; | |
324 int split_rate; | |
325 } capture_ GUARDED_BY(crit_capture_); | |
210 | 326 |
211 bool key_pressed_; | 327 struct ApmCaptureNonLockedState { |
328 ApmCaptureNonLockedState() | |
329 : fwd_proc_format(kSampleRate16kHz), | |
330 split_rate(kSampleRate16kHz), | |
331 stream_delay_ms(0) {} | |
332 // Only the rate and samples fields of fwd_proc_format_ are used because the | |
333 // forward processing number of channels is mutable and is tracked by the | |
334 // capture_audio_. | |
335 StreamConfig fwd_proc_format; | |
336 int split_rate; | |
337 int stream_delay_ms; | |
338 } capture_nonlocked_; | |
212 | 339 |
213 // Only set through the constructor's Config parameter. | 340 struct ApmRenderState { |
214 const bool use_new_agc_; | 341 rtc::scoped_ptr<AudioConverter> render_converter; |
215 rtc::scoped_ptr<AgcManagerDirect> agc_manager_ GUARDED_BY(crit_); | 342 rtc::scoped_ptr<AudioBuffer> render_audio; |
216 int agc_startup_min_volume_; | 343 } render_ GUARDED_BY(crit_render_); |
217 | 344 |
218 bool transient_suppressor_enabled_; | 345 // Debug dump state. |
219 rtc::scoped_ptr<TransientSuppressor> transient_suppressor_; | 346 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
220 const bool beamformer_enabled_; | 347 ApmDebugDumpState debug_dump_; |
221 rtc::scoped_ptr<Beamformer<float>> beamformer_; | 348 #endif |
222 const std::vector<Point> array_geometry_; | |
223 const SphericalPointf target_direction_; | |
224 | |
225 bool intelligibility_enabled_; | |
226 rtc::scoped_ptr<IntelligibilityEnhancer> intelligibility_enhancer_; | |
227 }; | 349 }; |
228 | 350 |
229 } // namespace webrtc | 351 } // namespace webrtc |
230 | 352 |
231 #endif // WEBRTC_MODULES_AUDIO_PROCESSING_AUDIO_PROCESSING_IMPL_H_ | 353 #endif // WEBRTC_MODULES_AUDIO_PROCESSING_AUDIO_PROCESSING_IMPL_H_ |
OLD | NEW |