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

Side by Side Diff: webrtc/modules/audio_device/mac/audio_device_mac.h

Issue 1570063003: clang-format audio_device/mac. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 11 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 unified diff | Download patch
« no previous file with comments | « no previous file | webrtc/modules/audio_device/mac/audio_device_mac.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
11 #ifndef WEBRTC_AUDIO_DEVICE_AUDIO_DEVICE_MAC_H 11 #ifndef WEBRTC_AUDIO_DEVICE_AUDIO_DEVICE_MAC_H
12 #define WEBRTC_AUDIO_DEVICE_AUDIO_DEVICE_MAC_H 12 #define WEBRTC_AUDIO_DEVICE_AUDIO_DEVICE_MAC_H
13 13
14 #include "webrtc/base/scoped_ptr.h" 14 #include "webrtc/base/scoped_ptr.h"
15 #include "webrtc/base/thread_annotations.h" 15 #include "webrtc/base/thread_annotations.h"
16 #include "webrtc/modules/audio_device/audio_device_generic.h" 16 #include "webrtc/modules/audio_device/audio_device_generic.h"
17 #include "webrtc/modules/audio_device/mac/audio_mixer_manager_mac.h" 17 #include "webrtc/modules/audio_device/mac/audio_mixer_manager_mac.h"
18 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" 18 #include "webrtc/system_wrappers/include/critical_section_wrapper.h"
19 19
20 #include <AudioToolbox/AudioConverter.h> 20 #include <AudioToolbox/AudioConverter.h>
21 #include <CoreAudio/CoreAudio.h> 21 #include <CoreAudio/CoreAudio.h>
22 #include <mach/semaphore.h> 22 #include <mach/semaphore.h>
23 23
24 struct PaUtilRingBuffer; 24 struct PaUtilRingBuffer;
25 25
26 namespace rtc { 26 namespace rtc {
27 class PlatformThread; 27 class PlatformThread;
28 } // namespace rtc 28 } // namespace rtc
29 29
30 namespace webrtc 30 namespace webrtc {
31 {
32 class EventWrapper; 31 class EventWrapper;
33 32
34 const uint32_t N_REC_SAMPLES_PER_SEC = 48000; 33 const uint32_t N_REC_SAMPLES_PER_SEC = 48000;
35 const uint32_t N_PLAY_SAMPLES_PER_SEC = 48000; 34 const uint32_t N_PLAY_SAMPLES_PER_SEC = 48000;
36 35
37 const uint32_t N_REC_CHANNELS = 1; // default is mono recording 36 const uint32_t N_REC_CHANNELS = 1; // default is mono recording
38 const uint32_t N_PLAY_CHANNELS = 2; // default is stereo playout 37 const uint32_t N_PLAY_CHANNELS = 2; // default is stereo playout
39 const uint32_t N_DEVICE_CHANNELS = 64; 38 const uint32_t N_DEVICE_CHANNELS = 64;
40 39
41 const int kBufferSizeMs = 10; 40 const int kBufferSizeMs = 10;
42 41
43 const uint32_t ENGINE_REC_BUF_SIZE_IN_SAMPLES = 42 const uint32_t ENGINE_REC_BUF_SIZE_IN_SAMPLES =
44 N_REC_SAMPLES_PER_SEC * kBufferSizeMs / 1000; 43 N_REC_SAMPLES_PER_SEC * kBufferSizeMs / 1000;
45 const uint32_t ENGINE_PLAY_BUF_SIZE_IN_SAMPLES = 44 const uint32_t ENGINE_PLAY_BUF_SIZE_IN_SAMPLES =
46 N_PLAY_SAMPLES_PER_SEC * kBufferSizeMs / 1000; 45 N_PLAY_SAMPLES_PER_SEC * kBufferSizeMs / 1000;
47 46
48 const int N_BLOCKS_IO = 2; 47 const int N_BLOCKS_IO = 2;
49 const int N_BUFFERS_IN = 2; // Must be at least N_BLOCKS_IO. 48 const int N_BUFFERS_IN = 2; // Must be at least N_BLOCKS_IO.
50 const int N_BUFFERS_OUT = 3; // Must be at least N_BLOCKS_IO. 49 const int N_BUFFERS_OUT = 3; // Must be at least N_BLOCKS_IO.
51 50
52 const uint32_t TIMER_PERIOD_MS = 2 * 10 * N_BLOCKS_IO * 1000000; 51 const uint32_t TIMER_PERIOD_MS = 2 * 10 * N_BLOCKS_IO * 1000000;
53 52
54 const uint32_t REC_BUF_SIZE_IN_SAMPLES = 53 const uint32_t REC_BUF_SIZE_IN_SAMPLES =
55 ENGINE_REC_BUF_SIZE_IN_SAMPLES * N_DEVICE_CHANNELS * N_BUFFERS_IN; 54 ENGINE_REC_BUF_SIZE_IN_SAMPLES * N_DEVICE_CHANNELS * N_BUFFERS_IN;
56 const uint32_t PLAY_BUF_SIZE_IN_SAMPLES = 55 const uint32_t PLAY_BUF_SIZE_IN_SAMPLES =
57 ENGINE_PLAY_BUF_SIZE_IN_SAMPLES * N_PLAY_CHANNELS * N_BUFFERS_OUT; 56 ENGINE_PLAY_BUF_SIZE_IN_SAMPLES * N_PLAY_CHANNELS * N_BUFFERS_OUT;
58 57
59 const int kGetMicVolumeIntervalMs = 1000; 58 const int kGetMicVolumeIntervalMs = 1000;
60 59
61 class AudioDeviceMac: public AudioDeviceGeneric 60 class AudioDeviceMac : public AudioDeviceGeneric {
62 { 61 public:
63 public: 62 AudioDeviceMac(const int32_t id);
64 AudioDeviceMac(const int32_t id); 63 ~AudioDeviceMac();
65 ~AudioDeviceMac(); 64
66 65 // Retrieve the currently utilized audio layer
67 // Retrieve the currently utilized audio layer 66 virtual int32_t ActiveAudioLayer(
68 virtual int32_t 67 AudioDeviceModule::AudioLayer& audioLayer) const;
69 ActiveAudioLayer(AudioDeviceModule::AudioLayer& audioLayer) const; 68
70 69 // Main initializaton and termination
71 // Main initializaton and termination 70 virtual int32_t Init();
72 virtual int32_t Init(); 71 virtual int32_t Terminate();
73 virtual int32_t Terminate(); 72 virtual bool Initialized() const;
74 virtual bool Initialized() const; 73
75 74 // Device enumeration
76 // Device enumeration 75 virtual int16_t PlayoutDevices();
77 virtual int16_t PlayoutDevices(); 76 virtual int16_t RecordingDevices();
78 virtual int16_t RecordingDevices(); 77 virtual int32_t PlayoutDeviceName(uint16_t index,
79 virtual int32_t PlayoutDeviceName( 78 char name[kAdmMaxDeviceNameSize],
80 uint16_t index, 79 char guid[kAdmMaxGuidSize]);
81 char name[kAdmMaxDeviceNameSize], 80 virtual int32_t RecordingDeviceName(uint16_t index,
82 char guid[kAdmMaxGuidSize]); 81 char name[kAdmMaxDeviceNameSize],
83 virtual int32_t RecordingDeviceName( 82 char guid[kAdmMaxGuidSize]);
84 uint16_t index, 83
85 char name[kAdmMaxDeviceNameSize], 84 // Device selection
86 char guid[kAdmMaxGuidSize]); 85 virtual int32_t SetPlayoutDevice(uint16_t index);
87 86 virtual int32_t SetPlayoutDevice(AudioDeviceModule::WindowsDeviceType device);
88 // Device selection 87 virtual int32_t SetRecordingDevice(uint16_t index);
89 virtual int32_t SetPlayoutDevice(uint16_t index); 88 virtual int32_t SetRecordingDevice(
90 virtual int32_t SetPlayoutDevice( 89 AudioDeviceModule::WindowsDeviceType device);
91 AudioDeviceModule::WindowsDeviceType device); 90
92 virtual int32_t SetRecordingDevice(uint16_t index); 91 // Audio transport initialization
93 virtual int32_t SetRecordingDevice( 92 virtual int32_t PlayoutIsAvailable(bool& available);
94 AudioDeviceModule::WindowsDeviceType device); 93 virtual int32_t InitPlayout();
95 94 virtual bool PlayoutIsInitialized() const;
96 // Audio transport initialization 95 virtual int32_t RecordingIsAvailable(bool& available);
97 virtual int32_t PlayoutIsAvailable(bool& available); 96 virtual int32_t InitRecording();
98 virtual int32_t InitPlayout(); 97 virtual bool RecordingIsInitialized() const;
99 virtual bool PlayoutIsInitialized() const; 98
100 virtual int32_t RecordingIsAvailable(bool& available); 99 // Audio transport control
101 virtual int32_t InitRecording(); 100 virtual int32_t StartPlayout();
102 virtual bool RecordingIsInitialized() const; 101 virtual int32_t StopPlayout();
103 102 virtual bool Playing() const;
104 // Audio transport control 103 virtual int32_t StartRecording();
105 virtual int32_t StartPlayout(); 104 virtual int32_t StopRecording();
106 virtual int32_t StopPlayout(); 105 virtual bool Recording() const;
107 virtual bool Playing() const; 106
108 virtual int32_t StartRecording(); 107 // Microphone Automatic Gain Control (AGC)
109 virtual int32_t StopRecording(); 108 virtual int32_t SetAGC(bool enable);
110 virtual bool Recording() const; 109 virtual bool AGC() const;
111 110
112 // Microphone Automatic Gain Control (AGC) 111 // Volume control based on the Windows Wave API (Windows only)
113 virtual int32_t SetAGC(bool enable); 112 virtual int32_t SetWaveOutVolume(uint16_t volumeLeft, uint16_t volumeRight);
114 virtual bool AGC() const; 113 virtual int32_t WaveOutVolume(uint16_t& volumeLeft,
115 114 uint16_t& volumeRight) const;
116 // Volume control based on the Windows Wave API (Windows only) 115
117 virtual int32_t SetWaveOutVolume(uint16_t volumeLeft, uint16_t volumeRight); 116 // Audio mixer initialization
118 virtual int32_t WaveOutVolume(uint16_t& volumeLeft, 117 virtual int32_t InitSpeaker();
119 uint16_t& volumeRight) const; 118 virtual bool SpeakerIsInitialized() const;
120 119 virtual int32_t InitMicrophone();
121 // Audio mixer initialization 120 virtual bool MicrophoneIsInitialized() const;
122 virtual int32_t InitSpeaker(); 121
123 virtual bool SpeakerIsInitialized() const; 122 // Speaker volume controls
124 virtual int32_t InitMicrophone(); 123 virtual int32_t SpeakerVolumeIsAvailable(bool& available);
125 virtual bool MicrophoneIsInitialized() const; 124 virtual int32_t SetSpeakerVolume(uint32_t volume);
126 125 virtual int32_t SpeakerVolume(uint32_t& volume) const;
127 // Speaker volume controls 126 virtual int32_t MaxSpeakerVolume(uint32_t& maxVolume) const;
128 virtual int32_t SpeakerVolumeIsAvailable(bool& available); 127 virtual int32_t MinSpeakerVolume(uint32_t& minVolume) const;
129 virtual int32_t SetSpeakerVolume(uint32_t volume); 128 virtual int32_t SpeakerVolumeStepSize(uint16_t& stepSize) const;
130 virtual int32_t SpeakerVolume(uint32_t& volume) const; 129
131 virtual int32_t MaxSpeakerVolume(uint32_t& maxVolume) const; 130 // Microphone volume controls
132 virtual int32_t MinSpeakerVolume(uint32_t& minVolume) const; 131 virtual int32_t MicrophoneVolumeIsAvailable(bool& available);
133 virtual int32_t SpeakerVolumeStepSize(uint16_t& stepSize) const; 132 virtual int32_t SetMicrophoneVolume(uint32_t volume);
134 133 virtual int32_t MicrophoneVolume(uint32_t& volume) const;
135 // Microphone volume controls 134 virtual int32_t MaxMicrophoneVolume(uint32_t& maxVolume) const;
136 virtual int32_t MicrophoneVolumeIsAvailable(bool& available); 135 virtual int32_t MinMicrophoneVolume(uint32_t& minVolume) const;
137 virtual int32_t SetMicrophoneVolume(uint32_t volume); 136 virtual int32_t MicrophoneVolumeStepSize(uint16_t& stepSize) const;
138 virtual int32_t MicrophoneVolume(uint32_t& volume) const; 137
139 virtual int32_t MaxMicrophoneVolume(uint32_t& maxVolume) const; 138 // Microphone mute control
140 virtual int32_t MinMicrophoneVolume(uint32_t& minVolume) const; 139 virtual int32_t MicrophoneMuteIsAvailable(bool& available);
141 virtual int32_t 140 virtual int32_t SetMicrophoneMute(bool enable);
142 MicrophoneVolumeStepSize(uint16_t& stepSize) const; 141 virtual int32_t MicrophoneMute(bool& enabled) const;
143 142
144 // Microphone mute control 143 // Speaker mute control
145 virtual int32_t MicrophoneMuteIsAvailable(bool& available); 144 virtual int32_t SpeakerMuteIsAvailable(bool& available);
146 virtual int32_t SetMicrophoneMute(bool enable); 145 virtual int32_t SetSpeakerMute(bool enable);
147 virtual int32_t MicrophoneMute(bool& enabled) const; 146 virtual int32_t SpeakerMute(bool& enabled) const;
148 147
149 // Speaker mute control 148 // Microphone boost control
150 virtual int32_t SpeakerMuteIsAvailable(bool& available); 149 virtual int32_t MicrophoneBoostIsAvailable(bool& available);
151 virtual int32_t SetSpeakerMute(bool enable); 150 virtual int32_t SetMicrophoneBoost(bool enable);
152 virtual int32_t SpeakerMute(bool& enabled) const; 151 virtual int32_t MicrophoneBoost(bool& enabled) const;
153 152
154 // Microphone boost control 153 // Stereo support
155 virtual int32_t MicrophoneBoostIsAvailable(bool& available); 154 virtual int32_t StereoPlayoutIsAvailable(bool& available);
156 virtual int32_t SetMicrophoneBoost(bool enable); 155 virtual int32_t SetStereoPlayout(bool enable);
157 virtual int32_t MicrophoneBoost(bool& enabled) const; 156 virtual int32_t StereoPlayout(bool& enabled) const;
158 157 virtual int32_t StereoRecordingIsAvailable(bool& available);
159 // Stereo support 158 virtual int32_t SetStereoRecording(bool enable);
160 virtual int32_t StereoPlayoutIsAvailable(bool& available); 159 virtual int32_t StereoRecording(bool& enabled) const;
161 virtual int32_t SetStereoPlayout(bool enable); 160
162 virtual int32_t StereoPlayout(bool& enabled) const; 161 // Delay information and control
163 virtual int32_t StereoRecordingIsAvailable(bool& available); 162 virtual int32_t SetPlayoutBuffer(const AudioDeviceModule::BufferType type,
164 virtual int32_t SetStereoRecording(bool enable); 163 uint16_t sizeMS);
165 virtual int32_t StereoRecording(bool& enabled) const; 164 virtual int32_t PlayoutBuffer(AudioDeviceModule::BufferType& type,
166 165 uint16_t& sizeMS) const;
167 // Delay information and control 166 virtual int32_t PlayoutDelay(uint16_t& delayMS) const;
168 virtual int32_t 167 virtual int32_t RecordingDelay(uint16_t& delayMS) const;
169 SetPlayoutBuffer(const AudioDeviceModule::BufferType type, 168
170 uint16_t sizeMS); 169 // CPU load
171 virtual int32_t PlayoutBuffer(AudioDeviceModule::BufferType& type, 170 virtual int32_t CPULoad(uint16_t& load) const;
172 uint16_t& sizeMS) const; 171
173 virtual int32_t PlayoutDelay(uint16_t& delayMS) const; 172 virtual bool PlayoutWarning() const;
174 virtual int32_t RecordingDelay(uint16_t& delayMS) const; 173 virtual bool PlayoutError() const;
175 174 virtual bool RecordingWarning() const;
176 // CPU load 175 virtual bool RecordingError() const;
177 virtual int32_t CPULoad(uint16_t& load) const; 176 virtual void ClearPlayoutWarning();
178 177 virtual void ClearPlayoutError();
179 virtual bool PlayoutWarning() const; 178 virtual void ClearRecordingWarning();
180 virtual bool PlayoutError() const; 179 virtual void ClearRecordingError();
181 virtual bool RecordingWarning() const; 180
182 virtual bool RecordingError() const; 181 virtual void AttachAudioBuffer(AudioDeviceBuffer* audioBuffer);
183 virtual void ClearPlayoutWarning(); 182
184 virtual void ClearPlayoutError(); 183 private:
185 virtual void ClearRecordingWarning(); 184 virtual int32_t MicrophoneIsAvailable(bool& available);
186 virtual void ClearRecordingError(); 185 virtual int32_t SpeakerIsAvailable(bool& available);
187 186
188 virtual void AttachAudioBuffer(AudioDeviceBuffer* audioBuffer); 187 static void AtomicSet32(int32_t* theValue, int32_t newValue);
189 188 static int32_t AtomicGet32(int32_t* theValue);
190 private: 189
191 virtual int32_t MicrophoneIsAvailable(bool& available); 190 static void logCAMsg(const TraceLevel level,
192 virtual int32_t SpeakerIsAvailable(bool& available); 191 const TraceModule module,
193 192 const int32_t id,
194 static void AtomicSet32(int32_t* theValue, int32_t newValue); 193 const char* msg,
195 static int32_t AtomicGet32(int32_t* theValue); 194 const char* err);
196 195
197 static void logCAMsg(const TraceLevel level, 196 int32_t GetNumberDevices(const AudioObjectPropertyScope scope,
198 const TraceModule module, 197 AudioDeviceID scopedDeviceIds[],
199 const int32_t id, const char *msg, 198 const uint32_t deviceListLength);
200 const char *err); 199
201 200 int32_t GetDeviceName(const AudioObjectPropertyScope scope,
202 int32_t GetNumberDevices(const AudioObjectPropertyScope scope, 201 const uint16_t index,
203 AudioDeviceID scopedDeviceIds[], 202 char* name);
204 const uint32_t deviceListLength); 203
205 204 int32_t InitDevice(uint16_t userDeviceIndex,
206 int32_t GetDeviceName(const AudioObjectPropertyScope scope, 205 AudioDeviceID& deviceId,
207 const uint16_t index, char* name); 206 bool isInput);
208 207
209 int32_t InitDevice(uint16_t userDeviceIndex, 208 // Always work with our preferred playout format inside VoE.
210 AudioDeviceID& deviceId, bool isInput); 209 // Then convert the output to the OS setting using an AudioConverter.
211 210 OSStatus SetDesiredPlayoutFormat();
212 // Always work with our preferred playout format inside VoE. 211
213 // Then convert the output to the OS setting using an AudioConverter. 212 static OSStatus objectListenerProc(
214 OSStatus SetDesiredPlayoutFormat(); 213 AudioObjectID objectId,
215 214 UInt32 numberAddresses,
216 static OSStatus 215 const AudioObjectPropertyAddress addresses[],
217 objectListenerProc(AudioObjectID objectId, UInt32 numberAddresses, 216 void* clientData);
218 const AudioObjectPropertyAddress addresses[], 217
219 void* clientData); 218 OSStatus implObjectListenerProc(AudioObjectID objectId,
220 219 UInt32 numberAddresses,
221 OSStatus 220 const AudioObjectPropertyAddress addresses[]);
222 implObjectListenerProc(AudioObjectID objectId, UInt32 numberAddresses, 221
223 const AudioObjectPropertyAddress addresses[]); 222 int32_t HandleDeviceChange();
224 223
225 int32_t HandleDeviceChange(); 224 int32_t HandleStreamFormatChange(AudioObjectID objectId,
226 225 AudioObjectPropertyAddress propertyAddress);
227 int32_t 226
228 HandleStreamFormatChange(AudioObjectID objectId, 227 int32_t HandleDataSourceChange(AudioObjectID objectId,
229 AudioObjectPropertyAddress propertyAddress); 228 AudioObjectPropertyAddress propertyAddress);
230 229
231 int32_t 230 int32_t HandleProcessorOverload(AudioObjectPropertyAddress propertyAddress);
232 HandleDataSourceChange(AudioObjectID objectId, 231
233 AudioObjectPropertyAddress propertyAddress); 232 static OSStatus deviceIOProc(AudioDeviceID device,
234 233 const AudioTimeStamp* now,
235 int32_t 234 const AudioBufferList* inputData,
236 HandleProcessorOverload(AudioObjectPropertyAddress propertyAddress); 235 const AudioTimeStamp* inputTime,
237 236 AudioBufferList* outputData,
238 static OSStatus deviceIOProc(AudioDeviceID device, 237 const AudioTimeStamp* outputTime,
239 const AudioTimeStamp *now, 238 void* clientData);
240 const AudioBufferList *inputData, 239
241 const AudioTimeStamp *inputTime, 240 static OSStatus outConverterProc(
242 AudioBufferList *outputData, 241 AudioConverterRef audioConverter,
242 UInt32* numberDataPackets,
243 AudioBufferList* data,
244 AudioStreamPacketDescription** dataPacketDescription,
245 void* userData);
246
247 static OSStatus inDeviceIOProc(AudioDeviceID device,
248 const AudioTimeStamp* now,
249 const AudioBufferList* inputData,
250 const AudioTimeStamp* inputTime,
251 AudioBufferList* outputData,
243 const AudioTimeStamp* outputTime, 252 const AudioTimeStamp* outputTime,
244 void *clientData); 253 void* clientData);
245 254
246 static OSStatus 255 static OSStatus inConverterProc(
247 outConverterProc(AudioConverterRef audioConverter, 256 AudioConverterRef audioConverter,
248 UInt32 *numberDataPackets, AudioBufferList *data, 257 UInt32* numberDataPackets,
249 AudioStreamPacketDescription **dataPacketDescription, 258 AudioBufferList* data,
250 void *userData); 259 AudioStreamPacketDescription** dataPacketDescription,
251 260 void* inUserData);
252 static OSStatus inDeviceIOProc(AudioDeviceID device, 261
253 const AudioTimeStamp *now, 262 OSStatus implDeviceIOProc(const AudioBufferList* inputData,
254 const AudioBufferList *inputData, 263 const AudioTimeStamp* inputTime,
255 const AudioTimeStamp *inputTime, 264 AudioBufferList* outputData,
256 AudioBufferList *outputData, 265 const AudioTimeStamp* outputTime);
257 const AudioTimeStamp *outputTime, 266
258 void *clientData); 267 OSStatus implOutConverterProc(UInt32* numberDataPackets,
259 268 AudioBufferList* data);
260 static OSStatus 269
261 inConverterProc(AudioConverterRef audioConverter, 270 OSStatus implInDeviceIOProc(const AudioBufferList* inputData,
262 UInt32 *numberDataPackets, AudioBufferList *data, 271 const AudioTimeStamp* inputTime);
263 AudioStreamPacketDescription **dataPacketDescription, 272
264 void *inUserData); 273 OSStatus implInConverterProc(UInt32* numberDataPackets,
265 274 AudioBufferList* data);
266 OSStatus implDeviceIOProc(const AudioBufferList *inputData, 275
267 const AudioTimeStamp *inputTime, 276 static bool RunCapture(void*);
268 AudioBufferList *outputData, 277 static bool RunRender(void*);
269 const AudioTimeStamp *outputTime); 278 bool CaptureWorkerThread();
270 279 bool RenderWorkerThread();
271 OSStatus implOutConverterProc(UInt32 *numberDataPackets, 280
272 AudioBufferList *data); 281 bool KeyPressed();
273 282
274 OSStatus implInDeviceIOProc(const AudioBufferList *inputData, 283 AudioDeviceBuffer* _ptrAudioBuffer;
275 const AudioTimeStamp *inputTime); 284
276 285 CriticalSectionWrapper& _critSect;
277 OSStatus implInConverterProc(UInt32 *numberDataPackets, 286
278 AudioBufferList *data); 287 EventWrapper& _stopEventRec;
279 288 EventWrapper& _stopEvent;
280 static bool RunCapture(void*); 289
281 static bool RunRender(void*); 290 // TODO(pbos): Replace with direct members, just start/stop, no need to
282 bool CaptureWorkerThread(); 291 // recreate the thread.
283 bool RenderWorkerThread(); 292 // Only valid/running between calls to StartRecording and StopRecording.
284 293 rtc::scoped_ptr<rtc::PlatformThread> capture_worker_thread_;
285 bool KeyPressed(); 294
286 295 // Only valid/running between calls to StartPlayout and StopPlayout.
287 AudioDeviceBuffer* _ptrAudioBuffer; 296 rtc::scoped_ptr<rtc::PlatformThread> render_worker_thread_;
288 297
289 CriticalSectionWrapper& _critSect; 298 int32_t _id;
290 299
291 EventWrapper& _stopEventRec; 300 AudioMixerManagerMac _mixerManager;
292 EventWrapper& _stopEvent; 301
293 302 uint16_t _inputDeviceIndex;
294 // TODO(pbos): Replace with direct members, just start/stop, no need to 303 uint16_t _outputDeviceIndex;
295 // recreate the thread. 304 AudioDeviceID _inputDeviceID;
296 // Only valid/running between calls to StartRecording and StopRecording. 305 AudioDeviceID _outputDeviceID;
297 rtc::scoped_ptr<rtc::PlatformThread> capture_worker_thread_;
298
299 // Only valid/running between calls to StartPlayout and StopPlayout.
300 rtc::scoped_ptr<rtc::PlatformThread> render_worker_thread_;
301
302 int32_t _id;
303
304 AudioMixerManagerMac _mixerManager;
305
306 uint16_t _inputDeviceIndex;
307 uint16_t _outputDeviceIndex;
308 AudioDeviceID _inputDeviceID;
309 AudioDeviceID _outputDeviceID;
310 #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1050 306 #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1050
311 AudioDeviceIOProcID _inDeviceIOProcID; 307 AudioDeviceIOProcID _inDeviceIOProcID;
312 AudioDeviceIOProcID _deviceIOProcID; 308 AudioDeviceIOProcID _deviceIOProcID;
313 #endif 309 #endif
314 bool _inputDeviceIsSpecified; 310 bool _inputDeviceIsSpecified;
315 bool _outputDeviceIsSpecified; 311 bool _outputDeviceIsSpecified;
316 312
317 uint8_t _recChannels; 313 uint8_t _recChannels;
318 uint8_t _playChannels; 314 uint8_t _playChannels;
319 315
320 Float32* _captureBufData; 316 Float32* _captureBufData;
321 SInt16* _renderBufData; 317 SInt16* _renderBufData;
322 318
323 SInt16 _renderConvertData[PLAY_BUF_SIZE_IN_SAMPLES]; 319 SInt16 _renderConvertData[PLAY_BUF_SIZE_IN_SAMPLES];
324 320
325 AudioDeviceModule::BufferType _playBufType; 321 AudioDeviceModule::BufferType _playBufType;
326 322
327 bool _initialized; 323 bool _initialized;
328 bool _isShutDown; 324 bool _isShutDown;
329 bool _recording; 325 bool _recording;
330 bool _playing; 326 bool _playing;
331 bool _recIsInitialized; 327 bool _recIsInitialized;
332 bool _playIsInitialized; 328 bool _playIsInitialized;
333 bool _AGC; 329 bool _AGC;
334 330
335 // Atomically set varaibles 331 // Atomically set varaibles
336 int32_t _renderDeviceIsAlive; 332 int32_t _renderDeviceIsAlive;
337 int32_t _captureDeviceIsAlive; 333 int32_t _captureDeviceIsAlive;
338 334
339 bool _twoDevices; 335 bool _twoDevices;
340 bool _doStop; // For play if not shared device or play+rec if shared device 336 bool _doStop; // For play if not shared device or play+rec if shared device
341 bool _doStopRec; // For rec if not shared device 337 bool _doStopRec; // For rec if not shared device
342 bool _macBookPro; 338 bool _macBookPro;
343 bool _macBookProPanRight; 339 bool _macBookProPanRight;
344 340
345 AudioConverterRef _captureConverter; 341 AudioConverterRef _captureConverter;
346 AudioConverterRef _renderConverter; 342 AudioConverterRef _renderConverter;
347 343
348 AudioStreamBasicDescription _outStreamFormat; 344 AudioStreamBasicDescription _outStreamFormat;
349 AudioStreamBasicDescription _outDesiredFormat; 345 AudioStreamBasicDescription _outDesiredFormat;
350 AudioStreamBasicDescription _inStreamFormat; 346 AudioStreamBasicDescription _inStreamFormat;
351 AudioStreamBasicDescription _inDesiredFormat; 347 AudioStreamBasicDescription _inDesiredFormat;
352 348
353 uint32_t _captureLatencyUs; 349 uint32_t _captureLatencyUs;
354 uint32_t _renderLatencyUs; 350 uint32_t _renderLatencyUs;
355 351
356 // Atomically set variables 352 // Atomically set variables
357 mutable int32_t _captureDelayUs; 353 mutable int32_t _captureDelayUs;
358 mutable int32_t _renderDelayUs; 354 mutable int32_t _renderDelayUs;
359 355
360 int32_t _renderDelayOffsetSamples; 356 int32_t _renderDelayOffsetSamples;
361 357
362 uint16_t _playBufDelayFixed; // fixed playback delay 358 uint16_t _playBufDelayFixed; // fixed playback delay
363 359
364 uint16_t _playWarning; 360 uint16_t _playWarning;
365 uint16_t _playError; 361 uint16_t _playError;
366 uint16_t _recWarning; 362 uint16_t _recWarning;
367 uint16_t _recError; 363 uint16_t _recError;
368 364
369 PaUtilRingBuffer* _paCaptureBuffer; 365 PaUtilRingBuffer* _paCaptureBuffer;
370 PaUtilRingBuffer* _paRenderBuffer; 366 PaUtilRingBuffer* _paRenderBuffer;
371 367
372 semaphore_t _renderSemaphore; 368 semaphore_t _renderSemaphore;
373 semaphore_t _captureSemaphore; 369 semaphore_t _captureSemaphore;
374 370
375 int _captureBufSizeSamples; 371 int _captureBufSizeSamples;
376 int _renderBufSizeSamples; 372 int _renderBufSizeSamples;
377 373
378 // Typing detection 374 // Typing detection
379 // 0x5c is key "9", after that comes function keys. 375 // 0x5c is key "9", after that comes function keys.
380 bool prev_key_state_[0x5d]; 376 bool prev_key_state_[0x5d];
381 377
382 int get_mic_volume_counter_ms_; 378 int get_mic_volume_counter_ms_;
383 }; 379 };
384 380
385 } // namespace webrtc 381 } // namespace webrtc
386 382
387 #endif // MODULES_AUDIO_DEVICE_MAIN_SOURCE_MAC_AUDIO_DEVICE_MAC_H_ 383 #endif // MODULES_AUDIO_DEVICE_MAIN_SOURCE_MAC_AUDIO_DEVICE_MAC_H_
OLDNEW
« no previous file with comments | « no previous file | webrtc/modules/audio_device/mac/audio_device_mac.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698