Index: media/audio/pulse/audio_manager_pulse.cc |
diff --git a/media/audio/pulse/audio_manager_pulse.cc b/media/audio/pulse/audio_manager_pulse.cc |
index 47b603bf2bb1fbea731baee812567d597a8cc64b..5c09f14905708b36e5b38b004316e0392f33dcf3 100644 |
--- a/media/audio/pulse/audio_manager_pulse.cc |
+++ b/media/audio/pulse/audio_manager_pulse.cc |
@@ -66,19 +66,13 @@ AudioManagerPulse::~AudioManagerPulse() { |
// Implementation of AudioManager. |
bool AudioManagerPulse::HasAudioOutputDevices() { |
- DCHECK(input_mainloop_); |
- DCHECK(input_context_); |
- media::AudioDeviceNames devices; |
- AutoPulseLock auto_lock(input_mainloop_); |
- devices_ = &devices; |
- pa_operation* operation = pa_context_get_sink_info_list( |
- input_context_, OutputDevicesInfoCallback, this); |
- WaitForOperationCompletion(input_mainloop_, operation); |
+ AudioDeviceNames devices; |
+ GetAudioOutputDeviceNames(&devices); |
return !devices.empty(); |
} |
bool AudioManagerPulse::HasAudioInputDevices() { |
- media::AudioDeviceNames devices; |
+ AudioDeviceNames devices; |
GetAudioInputDeviceNames(&devices); |
return !devices.empty(); |
} |
@@ -87,18 +81,24 @@ void AudioManagerPulse::ShowAudioInputSettings() { |
AudioManagerLinux::ShowLinuxAudioInputSettings(); |
} |
-void AudioManagerPulse::GetAudioInputDeviceNames( |
- media::AudioDeviceNames* device_names) { |
+void AudioManagerPulse::GetAudioDeviceNames( |
+ bool input, media::AudioDeviceNames* device_names) { |
DCHECK(device_names->empty()); |
DCHECK(input_mainloop_); |
DCHECK(input_context_); |
AutoPulseLock auto_lock(input_mainloop_); |
devices_ = device_names; |
- pa_operation* operation = pa_context_get_source_info_list( |
+ pa_operation* operation = NULL; |
+ if (input) { |
+ operation = pa_context_get_source_info_list( |
input_context_, InputDevicesInfoCallback, this); |
+ } else { |
+ operation = pa_context_get_sink_info_list( |
+ input_context_, OutputDevicesInfoCallback, this); |
+ } |
WaitForOperationCompletion(input_mainloop_, operation); |
- // Append the default device on the top of the list if the list is not empty. |
+ // Prepend the default device if the list is not empty. |
if (!device_names->empty()) { |
device_names->push_front( |
AudioDeviceName(AudioManagerBase::kDefaultDeviceName, |
@@ -106,6 +106,16 @@ void AudioManagerPulse::GetAudioInputDeviceNames( |
} |
} |
+void AudioManagerPulse::GetAudioInputDeviceNames( |
+ AudioDeviceNames* device_names) { |
+ GetAudioDeviceNames(true, device_names); |
+} |
+ |
+void AudioManagerPulse::GetAudioOutputDeviceNames( |
+ AudioDeviceNames* device_names) { |
+ GetAudioDeviceNames(false, device_names); |
+} |
+ |
AudioParameters AudioManagerPulse::GetInputStreamParameters( |
const std::string& device_id) { |
static const int kDefaultInputBufferSize = 1024; |
@@ -292,8 +302,8 @@ void AudioManagerPulse::InputDevicesInfoCallback(pa_context* context, |
// Exclude the output devices. |
if (info->monitor_of_sink == PA_INVALID_INDEX) { |
- manager->devices_->push_back(media::AudioDeviceName(info->description, |
- info->name)); |
+ manager->devices_->push_back(AudioDeviceName(info->description, |
+ info->name)); |
} |
} |
@@ -308,8 +318,8 @@ void AudioManagerPulse::OutputDevicesInfoCallback(pa_context* context, |
return; |
} |
- manager->devices_->push_back(media::AudioDeviceName(info->description, |
- info->name)); |
+ manager->devices_->push_back(AudioDeviceName(info->description, |
+ info->name)); |
} |
void AudioManagerPulse::SampleRateInfoCallback(pa_context* context, |