diff options
author | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-09 00:06:32 +0000 |
---|---|---|
committer | dalecurtis@chromium.org <dalecurtis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-09 00:06:32 +0000 |
commit | 1a7bacd216d783755f5336c4b0ce9259dc76d3ce (patch) | |
tree | 723b6388b989088c85de704aaba510c36249131c /media | |
parent | c7c0c92c4d53cc26080e3358b61f7ecea809ecaa (diff) | |
download | chromium_src-1a7bacd216d783755f5336c4b0ce9259dc76d3ce.zip chromium_src-1a7bacd216d783755f5336c4b0ce9259dc76d3ce.tar.gz chromium_src-1a7bacd216d783755f5336c4b0ce9259dc76d3ce.tar.bz2 |
Provide fake audio parameters when devices don't exist.
These methods should always return valid parameters, even if a device
doesn't exist.
Output code will automatically fall back to a fake path at a later time
if those parameters are used to open a stream.
Input code will fail because no input devices can be enumerated.
BUG=331675
TEST=no more crashes.
Review URL: https://codereview.chromium.org/127363002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@243704 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r-- | media/audio/mac/audio_manager_mac.cc | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/media/audio/mac/audio_manager_mac.cc b/media/audio/mac/audio_manager_mac.cc index 1dca1c3..75af516 100644 --- a/media/audio/mac/audio_manager_mac.cc +++ b/media/audio/mac/audio_manager_mac.cc @@ -401,16 +401,12 @@ void AudioManagerMac::GetAudioOutputDeviceNames( AudioParameters AudioManagerMac::GetInputStreamParameters( const std::string& device_id) { - // Due to the sharing of the input and output buffer sizes, we need to choose - // the input buffer size based on the output sample rate. See - // http://crbug.com/154352. - const int buffer_size = ChooseBufferSize( - AUAudioOutputStream::HardwareSampleRate()); - AudioDeviceID device = GetAudioDeviceIdByUId(true, device_id); if (device == kAudioObjectUnknown) { DLOG(ERROR) << "Invalid device " << device_id; - return AudioParameters(); + return AudioParameters( + AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO, + kFallbackSampleRate, 16, ChooseBufferSize(kFallbackSampleRate)); } int channels = 0; @@ -427,6 +423,11 @@ AudioParameters AudioManagerMac::GetInputStreamParameters( if (!sample_rate) sample_rate = kFallbackSampleRate; + // Due to the sharing of the input and output buffer sizes, we need to choose + // the input buffer size based on the output sample rate. See + // http://crbug.com/154352. + const int buffer_size = ChooseBufferSize(sample_rate); + // TODO(xians): query the native channel layout for the specific device. return AudioParameters( AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, @@ -646,7 +647,9 @@ AudioParameters AudioManagerMac::GetPreferredOutputStreamParameters( AudioDeviceID device = GetAudioDeviceIdByUId(false, output_device_id); if (device == kAudioObjectUnknown) { DLOG(ERROR) << "Invalid output device " << output_device_id; - return AudioParameters(); + return input_params.IsValid() ? input_params : AudioParameters( + AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO, + kFallbackSampleRate, 16, ChooseBufferSize(kFallbackSampleRate)); } int hardware_channels = 2; |