Index: media/audio/mac/audio_manager_mac.cc |
=================================================================== |
--- media/audio/mac/audio_manager_mac.cc (revision 157152) |
+++ media/audio/mac/audio_manager_mac.cc (working copy) |
@@ -6,6 +6,7 @@ |
#include <string> |
+#include "base/command_line.h" |
#include "base/mac/mac_logging.h" |
#include "base/mac/scoped_cftyperef.h" |
#include "base/sys_string_conversions.h" |
@@ -14,7 +15,10 @@ |
#include "media/audio/mac/audio_low_latency_output_mac.h" |
#include "media/audio/mac/audio_manager_mac.h" |
#include "media/audio/mac/audio_output_mac.h" |
+#include "media/audio/mac/audio_synchronized_mac.h" |
+#include "media/audio/mac/audio_unified_mac.h" |
#include "media/base/limits.h" |
+#include "media/base/media_switches.h" |
namespace media { |
@@ -39,6 +43,44 @@ |
output_device_id != kAudioObjectUnknown; |
} |
+// Returns if the default input device is the same as the default output. |
+static bool HasUnifiedDefaultIO() { |
+ AudioDeviceID input_id, output_id; |
+ |
+ AudioObjectPropertyAddress pa; |
+ pa.mSelector = kAudioHardwarePropertyDefaultInputDevice; |
+ pa.mScope = kAudioObjectPropertyScopeGlobal; |
+ pa.mElement = kAudioObjectPropertyElementMaster; |
+ UInt32 size = sizeof(input_id); |
+ |
+ // Get the default input. |
+ OSStatus result = AudioObjectGetPropertyData( |
+ kAudioObjectSystemObject, |
+ &pa, |
+ 0, |
+ 0, |
+ &size, |
+ &input_id); |
+ |
+ if (result != noErr) |
+ return false; |
+ |
+ // Get the default output. |
+ pa.mSelector = kAudioHardwarePropertyDefaultOutputDevice; |
+ result = AudioObjectGetPropertyData( |
+ kAudioObjectSystemObject, |
+ &pa, |
+ 0, |
+ 0, |
+ &size, |
+ &output_id); |
+ |
+ if (result != noErr) |
+ return false; |
+ |
+ return input_id == output_id; |
+} |
+ |
static void GetAudioDeviceInfo(bool is_input, |
media::AudioDeviceNames* device_names) { |
DCHECK(device_names); |
@@ -250,6 +292,21 @@ |
AudioOutputStream* AudioManagerMac::MakeLowLatencyOutputStream( |
const AudioParameters& params) { |
DCHECK_EQ(AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format()); |
+ |
+ // TODO(crogers): remove once we properly handle input device selection. |
+ if (CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kEnableWebAudioInput)) { |
+ if (HasUnifiedDefaultIO()) { |
+ return new AudioHardwareUnifiedStream(this, params); |
+ } else { |
+ // kAudioDeviceUnknown translates to "use default" here. |
+ return new AudioSynchronizedStream(this, |
+ params, |
+ kAudioDeviceUnknown, |
+ kAudioDeviceUnknown); |
+ } |
+ } |
+ |
return new AUAudioOutputStream(this, params); |
} |