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

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

Issue 127363002: Provide fake audio parameters when devices don't exist. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 | Annotate | Revision Log
« 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_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 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 } 394 }
395 395
396 void AudioManagerMac::GetAudioOutputDeviceNames( 396 void AudioManagerMac::GetAudioOutputDeviceNames(
397 media::AudioDeviceNames* device_names) { 397 media::AudioDeviceNames* device_names) {
398 DCHECK(device_names->empty()); 398 DCHECK(device_names->empty());
399 GetAudioDeviceInfo(false, device_names); 399 GetAudioDeviceInfo(false, device_names);
400 } 400 }
401 401
402 AudioParameters AudioManagerMac::GetInputStreamParameters( 402 AudioParameters AudioManagerMac::GetInputStreamParameters(
403 const std::string& device_id) { 403 const std::string& device_id) {
404 // Due to the sharing of the input and output buffer sizes, we need to choose
405 // the input buffer size based on the output sample rate. See
406 // http://crbug.com/154352.
407 const int buffer_size = ChooseBufferSize(
408 AUAudioOutputStream::HardwareSampleRate());
409
410 AudioDeviceID device = GetAudioDeviceIdByUId(true, device_id); 404 AudioDeviceID device = GetAudioDeviceIdByUId(true, device_id);
411 if (device == kAudioObjectUnknown) { 405 if (device == kAudioObjectUnknown) {
412 DLOG(ERROR) << "Invalid device " << device_id; 406 DLOG(ERROR) << "Invalid device " << device_id;
413 return AudioParameters(); 407 return AudioParameters(
408 AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO,
409 kFallbackSampleRate, 16, ChooseBufferSize(kFallbackSampleRate));
414 } 410 }
415 411
416 int channels = 0; 412 int channels = 0;
417 ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 413 ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
418 if (GetDeviceChannels(device, kAudioDevicePropertyScopeInput, &channels) && 414 if (GetDeviceChannels(device, kAudioDevicePropertyScopeInput, &channels) &&
419 channels <= 2) { 415 channels <= 2) {
420 channel_layout = GuessChannelLayout(channels); 416 channel_layout = GuessChannelLayout(channels);
421 } else { 417 } else {
422 DLOG(ERROR) << "Failed to get the device channels, use stereo as default " 418 DLOG(ERROR) << "Failed to get the device channels, use stereo as default "
423 << "for device " << device_id; 419 << "for device " << device_id;
424 } 420 }
425 421
426 int sample_rate = HardwareSampleRateForDevice(device); 422 int sample_rate = HardwareSampleRateForDevice(device);
427 if (!sample_rate) 423 if (!sample_rate)
428 sample_rate = kFallbackSampleRate; 424 sample_rate = kFallbackSampleRate;
429 425
426 // Due to the sharing of the input and output buffer sizes, we need to choose
427 // the input buffer size based on the output sample rate. See
428 // http://crbug.com/154352.
429 const int buffer_size = ChooseBufferSize(sample_rate);
430
430 // TODO(xians): query the native channel layout for the specific device. 431 // TODO(xians): query the native channel layout for the specific device.
431 return AudioParameters( 432 return AudioParameters(
432 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, 433 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout,
433 sample_rate, 16, buffer_size); 434 sample_rate, 16, buffer_size);
434 } 435 }
435 436
436 std::string AudioManagerMac::GetAssociatedOutputDeviceID( 437 std::string AudioManagerMac::GetAssociatedOutputDeviceID(
437 const std::string& input_device_id) { 438 const std::string& input_device_id) {
438 AudioDeviceID device = GetAudioDeviceIdByUId(true, input_device_id); 439 AudioDeviceID device = GetAudioDeviceIdByUId(true, input_device_id);
439 if (device == kAudioObjectUnknown) 440 if (device == kAudioObjectUnknown)
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 640
640 return stream; 641 return stream;
641 } 642 }
642 643
643 AudioParameters AudioManagerMac::GetPreferredOutputStreamParameters( 644 AudioParameters AudioManagerMac::GetPreferredOutputStreamParameters(
644 const std::string& output_device_id, 645 const std::string& output_device_id,
645 const AudioParameters& input_params) { 646 const AudioParameters& input_params) {
646 AudioDeviceID device = GetAudioDeviceIdByUId(false, output_device_id); 647 AudioDeviceID device = GetAudioDeviceIdByUId(false, output_device_id);
647 if (device == kAudioObjectUnknown) { 648 if (device == kAudioObjectUnknown) {
648 DLOG(ERROR) << "Invalid output device " << output_device_id; 649 DLOG(ERROR) << "Invalid output device " << output_device_id;
649 return AudioParameters(); 650 return input_params.IsValid() ? input_params : AudioParameters(
651 AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO,
652 kFallbackSampleRate, 16, ChooseBufferSize(kFallbackSampleRate));
650 } 653 }
651 654
652 int hardware_channels = 2; 655 int hardware_channels = 2;
653 if (!GetDeviceChannels(device, kAudioDevicePropertyScopeOutput, 656 if (!GetDeviceChannels(device, kAudioDevicePropertyScopeOutput,
654 &hardware_channels)) { 657 &hardware_channels)) {
655 // Fallback to stereo. 658 // Fallback to stereo.
656 hardware_channels = 2; 659 hardware_channels = 2;
657 } 660 }
658 661
659 ChannelLayout channel_layout = GuessChannelLayout(hardware_channels); 662 ChannelLayout channel_layout = GuessChannelLayout(hardware_channels);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
745 } 748 }
746 749
747 return buffer_size; 750 return buffer_size;
748 } 751 }
749 752
750 AudioManager* CreateAudioManager(AudioLogFactory* audio_log_factory) { 753 AudioManager* CreateAudioManager(AudioLogFactory* audio_log_factory) {
751 return new AudioManagerMac(audio_log_factory); 754 return new AudioManagerMac(audio_log_factory);
752 } 755 }
753 756
754 } // namespace media 757 } // 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