| 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 654 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 665 const AudioDeviceID device = GetAudioDeviceIdByUId(false, output_device_id); | 665 const AudioDeviceID device = GetAudioDeviceIdByUId(false, output_device_id); |
| 666 if (device == kAudioObjectUnknown) { | 666 if (device == kAudioObjectUnknown) { |
| 667 DLOG(ERROR) << "Invalid output device " << output_device_id; | 667 DLOG(ERROR) << "Invalid output device " << output_device_id; |
| 668 return input_params.IsValid() ? input_params : AudioParameters( | 668 return input_params.IsValid() ? input_params : AudioParameters( |
| 669 AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO, | 669 AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO, |
| 670 kFallbackSampleRate, 16, ChooseBufferSize(kFallbackSampleRate)); | 670 kFallbackSampleRate, 16, ChooseBufferSize(kFallbackSampleRate)); |
| 671 } | 671 } |
| 672 | 672 |
| 673 const bool has_valid_input_params = input_params.IsValid(); | 673 const bool has_valid_input_params = input_params.IsValid(); |
| 674 const int hardware_sample_rate = HardwareSampleRateForDevice(device); | 674 const int hardware_sample_rate = HardwareSampleRateForDevice(device); |
| 675 const int buffer_size = ChooseBufferSize(hardware_sample_rate); | 675 |
| 676 // Allow pass through buffer sizes. If concurrent input and output streams |
| 677 // exist, they will use the smallest buffer size amongst them. As such, each |
| 678 // stream must be able to FIFO requests appropriately when this happens. |
| 679 int buffer_size = ChooseBufferSize(hardware_sample_rate); |
| 680 if (has_valid_input_params) |
| 681 buffer_size = std::max(input_params.frames_per_buffer(), buffer_size); |
| 676 | 682 |
| 677 int hardware_channels; | 683 int hardware_channels; |
| 678 if (!GetDeviceChannels(device, kAudioDevicePropertyScopeOutput, | 684 if (!GetDeviceChannels(device, kAudioDevicePropertyScopeOutput, |
| 679 &hardware_channels)) { | 685 &hardware_channels)) { |
| 680 hardware_channels = 2; | 686 hardware_channels = 2; |
| 681 } | 687 } |
| 682 | 688 |
| 683 // Use the input channel count and channel layout if possible. Let OSX take | 689 // Use the input channel count and channel layout if possible. Let OSX take |
| 684 // care of remapping the channels; this lets user specified channel layouts | 690 // care of remapping the channels; this lets user specified channel layouts |
| 685 // work correctly. | 691 // work correctly. |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 776 void AudioManagerMac::ReleaseInputStream(AudioInputStream* stream) { | 782 void AudioManagerMac::ReleaseInputStream(AudioInputStream* stream) { |
| 777 input_streams_.remove(stream); | 783 input_streams_.remove(stream); |
| 778 AudioManagerBase::ReleaseInputStream(stream); | 784 AudioManagerBase::ReleaseInputStream(stream); |
| 779 } | 785 } |
| 780 | 786 |
| 781 AudioManager* CreateAudioManager(AudioLogFactory* audio_log_factory) { | 787 AudioManager* CreateAudioManager(AudioLogFactory* audio_log_factory) { |
| 782 return new AudioManagerMac(audio_log_factory); | 788 return new AudioManagerMac(audio_log_factory); |
| 783 } | 789 } |
| 784 | 790 |
| 785 } // namespace media | 791 } // namespace media |
| OLD | NEW |