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

Side by Side Diff: media/audio/mac/audio_low_latency_input_mac.cc

Issue 554523002: Fixed NO_MIC_DATA error on Mac. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/audio/mac/audio_low_latency_input_mac.h" 5 #include "media/audio/mac/audio_low_latency_input_mac.h"
6 6
7 #include <CoreServices/CoreServices.h> 7 #include <CoreServices/CoreServices.h>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 kAudioOutputUnitProperty_CurrentDevice, 158 kAudioOutputUnitProperty_CurrentDevice,
159 kAudioUnitScope_Global, 159 kAudioUnitScope_Global,
160 0, 160 0,
161 &input_device_id_, 161 &input_device_id_,
162 sizeof(input_device_id_)); 162 sizeof(input_device_id_));
163 if (result) { 163 if (result) {
164 HandleError(result); 164 HandleError(result);
165 return false; 165 return false;
166 } 166 }
167 167
168 // Register the input procedure for the AUHAL.
169 // This procedure will be called when the AUHAL has received new data
170 // from the input device.
171 AURenderCallbackStruct callback;
172 callback.inputProc = InputProc;
173 callback.inputProcRefCon = this;
174 result = AudioUnitSetProperty(audio_unit_,
175 kAudioOutputUnitProperty_SetInputCallback,
176 kAudioUnitScope_Global,
177 0,
178 &callback,
179 sizeof(callback));
180 if (result) {
181 HandleError(result);
182 return false;
183 }
184
185 // Set up the the desired (output) format. 168 // Set up the the desired (output) format.
186 // For obtaining input from a device, the device format is always expressed 169 // For obtaining input from a device, the device format is always expressed
187 // on the output scope of the AUHAL's Element 1. 170 // on the output scope of the AUHAL's Element 1.
188 result = AudioUnitSetProperty(audio_unit_, 171 result = AudioUnitSetProperty(audio_unit_,
189 kAudioUnitProperty_StreamFormat, 172 kAudioUnitProperty_StreamFormat,
190 kAudioUnitScope_Output, 173 kAudioUnitScope_Output,
191 1, 174 1,
192 &format_, 175 &format_,
193 sizeof(format_)); 176 sizeof(format_));
194 if (result) { 177 if (result) {
(...skipping 27 matching lines...) Expand all
222 kAudioUnitScope_Output, 205 kAudioUnitScope_Output,
223 1, 206 1,
224 &buffer_size, 207 &buffer_size,
225 sizeof(buffer_size)); 208 sizeof(buffer_size));
226 if (result != noErr) { 209 if (result != noErr) {
227 HandleError(result); 210 HandleError(result);
228 return false; 211 return false;
229 } 212 }
230 } 213 }
231 214
215 // Register the input procedure for the AUHAL.
216 // This procedure will be called when the AUHAL has received new data
217 // from the input device.
218 AURenderCallbackStruct callback;
219 callback.inputProc = InputProc;
220 callback.inputProcRefCon = this;
221 result = AudioUnitSetProperty(audio_unit_,
222 kAudioOutputUnitProperty_SetInputCallback,
223 kAudioUnitScope_Global,
224 0,
225 &callback,
226 sizeof(callback));
227 if (result) {
228 HandleError(result);
229 return false;
230 }
231
232 // Finally, initialize the audio unit and ensure that it is ready to render. 232 // Finally, initialize the audio unit and ensure that it is ready to render.
233 // Allocates memory according to the maximum number of audio frames 233 // Allocates memory according to the maximum number of audio frames
234 // it can produce in response to a single render call. 234 // it can produce in response to a single render call.
235 result = AudioUnitInitialize(audio_unit_); 235 result = AudioUnitInitialize(audio_unit_);
236 if (result) { 236 if (result) {
237 HandleError(result); 237 HandleError(result);
238 return false; 238 return false;
239 } 239 }
240 240
241 // The hardware latency is fixed and will not change during the call. 241 // The hardware latency is fixed and will not change during the call.
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 } 292 }
293 293
294 void AUAudioInputStream::Close() { 294 void AUAudioInputStream::Close() {
295 // It is valid to call Close() before calling open or Start(). 295 // It is valid to call Close() before calling open or Start().
296 // It is also valid to call Close() after Start() has been called. 296 // It is also valid to call Close() after Start() has been called.
297 if (started_) { 297 if (started_) {
298 Stop(); 298 Stop();
299 } 299 }
300 if (audio_unit_) { 300 if (audio_unit_) {
301 // Deallocate the audio unit’s resources. 301 // Deallocate the audio unit’s resources.
302 AudioUnitUninitialize(audio_unit_); 302 OSStatus result = AudioUnitUninitialize(audio_unit_);
303 OSSTATUS_DLOG_IF(ERROR, result != noErr, result)
304 << "AudioUnitUninitialize() failed.";
303 305
304 // Terminates our connection to the AUHAL component. 306 result = AudioComponentInstanceDispose(audio_unit_);
305 CloseComponent(audio_unit_); 307 OSSTATUS_DLOG_IF(ERROR, result != noErr, result)
308 << "AudioComponentInstanceDispose() failed.";
309
306 audio_unit_ = 0; 310 audio_unit_ = 0;
307 } 311 }
308 312
309 // Inform the audio manager that we have been closed. This can cause our 313 // Inform the audio manager that we have been closed. This can cause our
310 // destruction. 314 // destruction.
311 manager_->ReleaseInputStream(this); 315 manager_->ReleaseInputStream(this);
312 } 316 }
313 317
314 double AUAudioInputStream::GetMaxVolume() { 318 double AUAudioInputStream::GetMaxVolume() {
315 // Verify that we have a valid device. 319 // Verify that we have a valid device.
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 kAudioDevicePropertyScopeInput, 646 kAudioDevicePropertyScopeInput,
643 static_cast<UInt32>(channel) 647 static_cast<UInt32>(channel)
644 }; 648 };
645 OSStatus result = AudioObjectIsPropertySettable(input_device_id_, 649 OSStatus result = AudioObjectIsPropertySettable(input_device_id_,
646 &property_address, 650 &property_address,
647 &is_settable); 651 &is_settable);
648 return (result == noErr) ? is_settable : false; 652 return (result == noErr) ? is_settable : false;
649 } 653 }
650 654
651 } // namespace media 655 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698