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 |
11 #ifndef WEBRTC_MODULES_AUDIO_PROCESSING_AUDIO_PROCESSING_IMPL_H_ | 11 #ifndef WEBRTC_MODULES_AUDIO_PROCESSING_AUDIO_PROCESSING_IMPL_H_ |
12 #define WEBRTC_MODULES_AUDIO_PROCESSING_AUDIO_PROCESSING_IMPL_H_ | 12 #define WEBRTC_MODULES_AUDIO_PROCESSING_AUDIO_PROCESSING_IMPL_H_ |
13 | 13 |
14 #include <list> | 14 #include <list> |
| 15 #include <memory> |
15 #include <string> | 16 #include <string> |
16 #include <vector> | 17 #include <vector> |
17 | 18 |
18 #include "webrtc/base/criticalsection.h" | 19 #include "webrtc/base/criticalsection.h" |
19 #include "webrtc/base/scoped_ptr.h" | |
20 #include "webrtc/base/thread_annotations.h" | 20 #include "webrtc/base/thread_annotations.h" |
21 #include "webrtc/modules/audio_processing/audio_buffer.h" | 21 #include "webrtc/modules/audio_processing/audio_buffer.h" |
22 #include "webrtc/modules/audio_processing/include/audio_processing.h" | 22 #include "webrtc/modules/audio_processing/include/audio_processing.h" |
23 #include "webrtc/system_wrappers/include/file_wrapper.h" | 23 #include "webrtc/system_wrappers/include/file_wrapper.h" |
24 | 24 |
25 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 25 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
26 // Files generated at build-time by the protobuf compiler. | 26 // Files generated at build-time by the protobuf compiler. |
27 #ifdef WEBRTC_ANDROID_PLATFORM_BUILD | 27 #ifdef WEBRTC_ANDROID_PLATFORM_BUILD |
28 #include "external/webrtc/webrtc/modules/audio_processing/debug.pb.h" | 28 #include "external/webrtc/webrtc/modules/audio_processing/debug.pb.h" |
29 #else | 29 #else |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); | 130 EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_); |
131 | 131 |
132 private: | 132 private: |
133 struct ApmPublicSubmodules; | 133 struct ApmPublicSubmodules; |
134 struct ApmPrivateSubmodules; | 134 struct ApmPrivateSubmodules; |
135 | 135 |
136 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP | 136 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP |
137 // State for the debug dump. | 137 // State for the debug dump. |
138 struct ApmDebugDumpThreadState { | 138 struct ApmDebugDumpThreadState { |
139 ApmDebugDumpThreadState() : event_msg(new audioproc::Event()) {} | 139 ApmDebugDumpThreadState() : event_msg(new audioproc::Event()) {} |
140 rtc::scoped_ptr<audioproc::Event> event_msg; // Protobuf message. | 140 std::unique_ptr<audioproc::Event> event_msg; // Protobuf message. |
141 std::string event_str; // Memory for protobuf serialization. | 141 std::string event_str; // Memory for protobuf serialization. |
142 | 142 |
143 // Serialized string of last saved APM configuration. | 143 // Serialized string of last saved APM configuration. |
144 std::string last_serialized_config; | 144 std::string last_serialized_config; |
145 }; | 145 }; |
146 | 146 |
147 struct ApmDebugDumpState { | 147 struct ApmDebugDumpState { |
148 ApmDebugDumpState() : debug_file(FileWrapper::Create()) {} | 148 ApmDebugDumpState() : debug_file(FileWrapper::Create()) {} |
149 // Number of bytes that can still be written to the log before the maximum | 149 // Number of bytes that can still be written to the log before the maximum |
150 // size is reached. A value of <= 0 indicates that no limit is used. | 150 // size is reached. A value of <= 0 indicates that no limit is used. |
151 int64_t num_bytes_left_for_log_ = -1; | 151 int64_t num_bytes_left_for_log_ = -1; |
152 rtc::scoped_ptr<FileWrapper> debug_file; | 152 std::unique_ptr<FileWrapper> debug_file; |
153 ApmDebugDumpThreadState render; | 153 ApmDebugDumpThreadState render; |
154 ApmDebugDumpThreadState capture; | 154 ApmDebugDumpThreadState capture; |
155 }; | 155 }; |
156 #endif | 156 #endif |
157 | 157 |
158 // Method for modifying the formats struct that are called from both | 158 // Method for modifying the formats struct that are called from both |
159 // the render and capture threads. The check for whether modifications | 159 // the render and capture threads. The check for whether modifications |
160 // are needed is done while holding the render lock only, thereby avoiding | 160 // are needed is done while holding the render lock only, thereby avoiding |
161 // that the capture thread blocks the render thread. | 161 // that the capture thread blocks the render thread. |
162 // The struct is modified in a single-threaded manner by holding both the | 162 // The struct is modified in a single-threaded manner by holding both the |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 | 243 |
244 // Debug dump state. | 244 // Debug dump state. |
245 ApmDebugDumpState debug_dump_; | 245 ApmDebugDumpState debug_dump_; |
246 #endif | 246 #endif |
247 | 247 |
248 // Critical sections. | 248 // Critical sections. |
249 rtc::CriticalSection crit_render_ ACQUIRED_BEFORE(crit_capture_); | 249 rtc::CriticalSection crit_render_ ACQUIRED_BEFORE(crit_capture_); |
250 rtc::CriticalSection crit_capture_; | 250 rtc::CriticalSection crit_capture_; |
251 | 251 |
252 // Structs containing the pointers to the submodules. | 252 // Structs containing the pointers to the submodules. |
253 rtc::scoped_ptr<ApmPublicSubmodules> public_submodules_; | 253 std::unique_ptr<ApmPublicSubmodules> public_submodules_; |
254 rtc::scoped_ptr<ApmPrivateSubmodules> private_submodules_ | 254 std::unique_ptr<ApmPrivateSubmodules> private_submodules_ |
255 GUARDED_BY(crit_capture_); | 255 GUARDED_BY(crit_capture_); |
256 | 256 |
257 // State that is written to while holding both the render and capture locks | 257 // State that is written to while holding both the render and capture locks |
258 // but can be read without any lock being held. | 258 // but can be read without any lock being held. |
259 // As this is only accessed internally of APM, and all internal methods in APM | 259 // As this is only accessed internally of APM, and all internal methods in APM |
260 // either are holding the render or capture locks, this construct is safe as | 260 // either are holding the render or capture locks, this construct is safe as |
261 // it is not possible to read the variables while writing them. | 261 // it is not possible to read the variables while writing them. |
262 struct ApmFormatState { | 262 struct ApmFormatState { |
263 ApmFormatState() | 263 ApmFormatState() |
264 : // Format of processing streams at input/output call sites. | 264 : // Format of processing streams at input/output call sites. |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 int delay_offset_ms; | 306 int delay_offset_ms; |
307 bool was_stream_delay_set; | 307 bool was_stream_delay_set; |
308 int last_stream_delay_ms; | 308 int last_stream_delay_ms; |
309 int last_aec_system_delay_ms; | 309 int last_aec_system_delay_ms; |
310 int stream_delay_jumps; | 310 int stream_delay_jumps; |
311 bool output_will_be_muted; | 311 bool output_will_be_muted; |
312 bool key_pressed; | 312 bool key_pressed; |
313 bool transient_suppressor_enabled; | 313 bool transient_suppressor_enabled; |
314 std::vector<Point> array_geometry; | 314 std::vector<Point> array_geometry; |
315 SphericalPointf target_direction; | 315 SphericalPointf target_direction; |
316 rtc::scoped_ptr<AudioBuffer> capture_audio; | 316 std::unique_ptr<AudioBuffer> capture_audio; |
317 // Only the rate and samples fields of fwd_proc_format_ are used because the | 317 // Only the rate and samples fields of fwd_proc_format_ are used because the |
318 // forward processing number of channels is mutable and is tracked by the | 318 // forward processing number of channels is mutable and is tracked by the |
319 // capture_audio_. | 319 // capture_audio_. |
320 StreamConfig fwd_proc_format; | 320 StreamConfig fwd_proc_format; |
321 int split_rate; | 321 int split_rate; |
322 } capture_ GUARDED_BY(crit_capture_); | 322 } capture_ GUARDED_BY(crit_capture_); |
323 | 323 |
324 struct ApmCaptureNonLockedState { | 324 struct ApmCaptureNonLockedState { |
325 ApmCaptureNonLockedState(bool beamformer_enabled) | 325 ApmCaptureNonLockedState(bool beamformer_enabled) |
326 : fwd_proc_format(kSampleRate16kHz), | 326 : fwd_proc_format(kSampleRate16kHz), |
327 split_rate(kSampleRate16kHz), | 327 split_rate(kSampleRate16kHz), |
328 stream_delay_ms(0), | 328 stream_delay_ms(0), |
329 beamformer_enabled(beamformer_enabled) {} | 329 beamformer_enabled(beamformer_enabled) {} |
330 // Only the rate and samples fields of fwd_proc_format_ are used because the | 330 // Only the rate and samples fields of fwd_proc_format_ are used because the |
331 // forward processing number of channels is mutable and is tracked by the | 331 // forward processing number of channels is mutable and is tracked by the |
332 // capture_audio_. | 332 // capture_audio_. |
333 StreamConfig fwd_proc_format; | 333 StreamConfig fwd_proc_format; |
334 int split_rate; | 334 int split_rate; |
335 int stream_delay_ms; | 335 int stream_delay_ms; |
336 bool beamformer_enabled; | 336 bool beamformer_enabled; |
337 } capture_nonlocked_; | 337 } capture_nonlocked_; |
338 | 338 |
339 struct ApmRenderState { | 339 struct ApmRenderState { |
340 rtc::scoped_ptr<AudioConverter> render_converter; | 340 std::unique_ptr<AudioConverter> render_converter; |
341 rtc::scoped_ptr<AudioBuffer> render_audio; | 341 std::unique_ptr<AudioBuffer> render_audio; |
342 } render_ GUARDED_BY(crit_render_); | 342 } render_ GUARDED_BY(crit_render_); |
343 }; | 343 }; |
344 | 344 |
345 } // namespace webrtc | 345 } // namespace webrtc |
346 | 346 |
347 #endif // WEBRTC_MODULES_AUDIO_PROCESSING_AUDIO_PROCESSING_IMPL_H_ | 347 #endif // WEBRTC_MODULES_AUDIO_PROCESSING_AUDIO_PROCESSING_IMPL_H_ |
OLD | NEW |