Chromium Code Reviews| OLD | NEW |
|---|---|
| 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_manager_mac.h" | 5 #include "media/audio/mac/audio_manager_mac.h" |
| 6 | 6 |
| 7 #include <CoreAudio/AudioHardware.h> | 7 #include <CoreAudio/AudioHardware.h> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 74 // Returns true if the default input device is the same as | 74 // Returns true if the default input device is the same as |
| 75 // the default output device. | 75 // the default output device. |
| 76 bool AudioManagerMac::HasUnifiedDefaultIO() { | 76 bool AudioManagerMac::HasUnifiedDefaultIO() { |
| 77 AudioDeviceID input_id, output_id; | 77 AudioDeviceID input_id, output_id; |
| 78 if (!GetDefaultInputDevice(&input_id) || !GetDefaultOutputDevice(&output_id)) | 78 if (!GetDefaultInputDevice(&input_id) || !GetDefaultOutputDevice(&output_id)) |
| 79 return false; | 79 return false; |
| 80 | 80 |
| 81 return input_id == output_id; | 81 return input_id == output_id; |
| 82 } | 82 } |
| 83 | 83 |
| 84 // Retrieves information on audio devices, and prepends the default | |
| 85 // device to the list if the list is non-empty. | |
| 84 static void GetAudioDeviceInfo(bool is_input, | 86 static void GetAudioDeviceInfo(bool is_input, |
| 85 media::AudioDeviceNames* device_names) { | 87 media::AudioDeviceNames* device_names) { |
| 86 // Query the number of total devices. | 88 // Query the number of total devices. |
| 87 AudioObjectPropertyAddress property_address = { | 89 AudioObjectPropertyAddress property_address = { |
| 88 kAudioHardwarePropertyDevices, | 90 kAudioHardwarePropertyDevices, |
| 89 kAudioObjectPropertyScopeGlobal, | 91 kAudioObjectPropertyScopeGlobal, |
| 90 kAudioObjectPropertyElementMaster | 92 kAudioObjectPropertyElementMaster |
| 91 }; | 93 }; |
| 92 UInt32 size = 0; | 94 UInt32 size = 0; |
| 93 OSStatus result = AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, | 95 OSStatus result = AudioObjectGetPropertyDataSize(kAudioObjectSystemObject, |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 166 device_names->push_back(device_name); | 168 device_names->push_back(device_name); |
| 167 | 169 |
| 168 // We are responsible for releasing the returned CFObject. See the | 170 // We are responsible for releasing the returned CFObject. See the |
| 169 // comment in the AudioHardware.h for constant | 171 // comment in the AudioHardware.h for constant |
| 170 // kAudioDevicePropertyDeviceUID. | 172 // kAudioDevicePropertyDeviceUID. |
| 171 if (uid) | 173 if (uid) |
| 172 CFRelease(uid); | 174 CFRelease(uid); |
| 173 if (name) | 175 if (name) |
| 174 CFRelease(name); | 176 CFRelease(name); |
| 175 } | 177 } |
| 178 | |
| 179 if (!device_names->empty()) { | |
| 180 // Prepend the default device to the list since we always want it to be | |
| 181 // on the top of the list for all platforms. There is no duplicate | |
| 182 // counting here since the default device has been abstracted out before. | |
| 183 media::AudioDeviceName name; | |
| 184 name.device_name = AudioManagerBase::kDefaultDeviceName; | |
| 185 name.unique_id = AudioManagerBase::kDefaultDeviceId; | |
|
tommi (sloooow) - chröme
2013/09/09 16:09:23
nit: one space after =
Jói
2013/09/09 16:15:44
Done.
| |
| 186 device_names->push_front(name); | |
| 187 } | |
| 176 } | 188 } |
| 177 | 189 |
| 178 static AudioDeviceID GetAudioDeviceIdByUId(bool is_input, | 190 static AudioDeviceID GetAudioDeviceIdByUId(bool is_input, |
| 179 const std::string& device_id) { | 191 const std::string& device_id) { |
| 180 AudioObjectPropertyAddress property_address = { | 192 AudioObjectPropertyAddress property_address = { |
| 181 kAudioHardwarePropertyDevices, | 193 kAudioHardwarePropertyDevices, |
| 182 kAudioObjectPropertyScopeGlobal, | 194 kAudioObjectPropertyScopeGlobal, |
| 183 kAudioObjectPropertyElementMaster | 195 kAudioObjectPropertyElementMaster |
| 184 }; | 196 }; |
| 185 AudioDeviceID audio_device_id = kAudioObjectUnknown; | 197 AudioDeviceID audio_device_id = kAudioObjectUnknown; |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 389 if (!GetDefaultOutputDevice(&device_id)) | 401 if (!GetDefaultOutputDevice(&device_id)) |
| 390 return kFallbackSampleRate; | 402 return kFallbackSampleRate; |
| 391 | 403 |
| 392 return HardwareSampleRateForDevice(device_id); | 404 return HardwareSampleRateForDevice(device_id); |
| 393 } | 405 } |
| 394 | 406 |
| 395 void AudioManagerMac::GetAudioInputDeviceNames( | 407 void AudioManagerMac::GetAudioInputDeviceNames( |
| 396 media::AudioDeviceNames* device_names) { | 408 media::AudioDeviceNames* device_names) { |
| 397 DCHECK(device_names->empty()); | 409 DCHECK(device_names->empty()); |
| 398 GetAudioDeviceInfo(true, device_names); | 410 GetAudioDeviceInfo(true, device_names); |
| 399 if (!device_names->empty()) { | 411 } |
| 400 // Prepend the default device to the list since we always want it to be | 412 |
| 401 // on the top of the list for all platforms. There is no duplicate | 413 void AudioManagerMac::GetAudioOutputDeviceNames( |
| 402 // counting here since the default device has been abstracted out before. | 414 media::AudioDeviceNames* device_names) { |
| 403 media::AudioDeviceName name; | 415 DCHECK(device_names->empty()); |
| 404 name.device_name = AudioManagerBase::kDefaultDeviceName; | 416 GetAudioDeviceInfo(false, device_names); |
| 405 name.unique_id = AudioManagerBase::kDefaultDeviceId; | |
| 406 device_names->push_front(name); | |
| 407 } | |
| 408 } | 417 } |
| 409 | 418 |
| 410 AudioParameters AudioManagerMac::GetInputStreamParameters( | 419 AudioParameters AudioManagerMac::GetInputStreamParameters( |
| 411 const std::string& device_id) { | 420 const std::string& device_id) { |
| 412 // Due to the sharing of the input and output buffer sizes, we need to choose | 421 // Due to the sharing of the input and output buffer sizes, we need to choose |
| 413 // the input buffer size based on the output sample rate. See | 422 // the input buffer size based on the output sample rate. See |
| 414 // http://crbug.com/154352. | 423 // http://crbug.com/154352. |
| 415 const int buffer_size = ChooseBufferSize( | 424 const int buffer_size = ChooseBufferSize( |
| 416 AUAudioOutputStream::HardwareSampleRate()); | 425 AUAudioOutputStream::HardwareSampleRate()); |
| 417 | 426 |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 605 current_sample_rate_ = new_sample_rate; | 614 current_sample_rate_ = new_sample_rate; |
| 606 current_output_device_ = new_output_device; | 615 current_output_device_ = new_output_device; |
| 607 NotifyAllOutputDeviceChangeListeners(); | 616 NotifyAllOutputDeviceChangeListeners(); |
| 608 } | 617 } |
| 609 | 618 |
| 610 AudioManager* CreateAudioManager() { | 619 AudioManager* CreateAudioManager() { |
| 611 return new AudioManagerMac(); | 620 return new AudioManagerMac(); |
| 612 } | 621 } |
| 613 | 622 |
| 614 } // namespace media | 623 } // namespace media |
| OLD | NEW |