| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/pulse/audio_manager_pulse.h" | 5 #include "media/audio/pulse/audio_manager_pulse.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/environment.h" | 8 #include "base/environment.h" |
| 9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/nix/xdg_util.h" | 11 #include "base/nix/xdg_util.h" |
| 12 #include "base/stl_util.h" | 12 #include "base/stl_util.h" |
| 13 #if defined(USE_ALSA) | 13 #if defined(USE_ALSA) |
| 14 #include "media/audio/alsa/audio_manager_alsa.h" | 14 #include "media/audio/alsa/audio_manager_alsa.h" |
| 15 #endif | 15 #endif |
| 16 #include "media/audio/audio_device_description.h" |
| 16 #include "media/audio/pulse/pulse_input.h" | 17 #include "media/audio/pulse/pulse_input.h" |
| 17 #include "media/audio/pulse/pulse_output.h" | 18 #include "media/audio/pulse/pulse_output.h" |
| 18 #include "media/audio/pulse/pulse_util.h" | 19 #include "media/audio/pulse/pulse_util.h" |
| 19 #include "media/base/audio_parameters.h" | 20 #include "media/base/audio_parameters.h" |
| 20 #include "media/base/channel_layout.h" | 21 #include "media/base/channel_layout.h" |
| 21 | 22 |
| 22 #if defined(DLOPEN_PULSEAUDIO) | 23 #if defined(DLOPEN_PULSEAUDIO) |
| 23 #include "media/audio/pulse/pulse_stubs.h" | 24 #include "media/audio/pulse/pulse_stubs.h" |
| 24 | 25 |
| 25 using media_audio_pulse::kModulePulse; | 26 using media_audio_pulse::kModulePulse; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 if (input) { | 108 if (input) { |
| 108 operation = pa_context_get_source_info_list( | 109 operation = pa_context_get_source_info_list( |
| 109 input_context_, InputDevicesInfoCallback, this); | 110 input_context_, InputDevicesInfoCallback, this); |
| 110 } else { | 111 } else { |
| 111 operation = pa_context_get_sink_info_list( | 112 operation = pa_context_get_sink_info_list( |
| 112 input_context_, OutputDevicesInfoCallback, this); | 113 input_context_, OutputDevicesInfoCallback, this); |
| 113 } | 114 } |
| 114 WaitForOperationCompletion(input_mainloop_, operation); | 115 WaitForOperationCompletion(input_mainloop_, operation); |
| 115 | 116 |
| 116 // Prepend the default device if the list is not empty. | 117 // Prepend the default device if the list is not empty. |
| 117 if (!device_names->empty()) { | 118 if (!device_names->empty()) |
| 118 device_names->push_front( | 119 device_names->push_front(AudioDeviceName::CreateDefault()); |
| 119 AudioDeviceName(AudioManager::GetDefaultDeviceName(), | |
| 120 AudioManagerBase::kDefaultDeviceId)); | |
| 121 } | |
| 122 } | 120 } |
| 123 | 121 |
| 124 void AudioManagerPulse::GetAudioInputDeviceNames( | 122 void AudioManagerPulse::GetAudioInputDeviceNames( |
| 125 AudioDeviceNames* device_names) { | 123 AudioDeviceNames* device_names) { |
| 126 GetAudioDeviceNames(true, device_names); | 124 GetAudioDeviceNames(true, device_names); |
| 127 } | 125 } |
| 128 | 126 |
| 129 void AudioManagerPulse::GetAudioOutputDeviceNames( | 127 void AudioManagerPulse::GetAudioOutputDeviceNames( |
| 130 AudioDeviceNames* device_names) { | 128 AudioDeviceNames* device_names) { |
| 131 GetAudioDeviceNames(false, device_names); | 129 GetAudioDeviceNames(false, device_names); |
| 132 } | 130 } |
| 133 | 131 |
| 134 AudioParameters AudioManagerPulse::GetInputStreamParameters( | 132 AudioParameters AudioManagerPulse::GetInputStreamParameters( |
| 135 const std::string& device_id) { | 133 const std::string& device_id) { |
| 136 int user_buffer_size = GetUserBufferSize(); | 134 int user_buffer_size = GetUserBufferSize(); |
| 137 int buffer_size = user_buffer_size ? | 135 int buffer_size = user_buffer_size ? |
| 138 user_buffer_size : kDefaultInputBufferSize; | 136 user_buffer_size : kDefaultInputBufferSize; |
| 139 | 137 |
| 140 // TODO(xians): add support for querying native channel layout for pulse. | 138 // TODO(xians): add support for querying native channel layout for pulse. |
| 141 return AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY, | 139 return AudioParameters(AudioParameters::AUDIO_PCM_LOW_LATENCY, |
| 142 CHANNEL_LAYOUT_STEREO, GetNativeSampleRate(), 16, | 140 CHANNEL_LAYOUT_STEREO, GetNativeSampleRate(), 16, |
| 143 buffer_size); | 141 buffer_size); |
| 144 } | 142 } |
| 145 | 143 |
| 146 AudioOutputStream* AudioManagerPulse::MakeLinearOutputStream( | 144 AudioOutputStream* AudioManagerPulse::MakeLinearOutputStream( |
| 147 const AudioParameters& params) { | 145 const AudioParameters& params) { |
| 148 DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format()); | 146 DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format()); |
| 149 return MakeOutputStream(params, AudioManagerBase::kDefaultDeviceId); | 147 return MakeOutputStream(params, AudioDeviceDescription::kDefaultDeviceId); |
| 150 } | 148 } |
| 151 | 149 |
| 152 AudioOutputStream* AudioManagerPulse::MakeLowLatencyOutputStream( | 150 AudioOutputStream* AudioManagerPulse::MakeLowLatencyOutputStream( |
| 153 const AudioParameters& params, | 151 const AudioParameters& params, |
| 154 const std::string& device_id) { | 152 const std::string& device_id) { |
| 155 DCHECK_EQ(AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format()); | 153 DCHECK_EQ(AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format()); |
| 156 return MakeOutputStream( | 154 return MakeOutputStream(params, device_id.empty() |
| 157 params, | 155 ? AudioDeviceDescription::kDefaultDeviceId |
| 158 device_id.empty() ? AudioManagerBase::kDefaultDeviceId : device_id); | 156 : device_id); |
| 159 } | 157 } |
| 160 | 158 |
| 161 AudioInputStream* AudioManagerPulse::MakeLinearInputStream( | 159 AudioInputStream* AudioManagerPulse::MakeLinearInputStream( |
| 162 const AudioParameters& params, const std::string& device_id) { | 160 const AudioParameters& params, const std::string& device_id) { |
| 163 DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format()); | 161 DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format()); |
| 164 return MakeInputStream(params, device_id); | 162 return MakeInputStream(params, device_id); |
| 165 } | 163 } |
| 166 | 164 |
| 167 AudioInputStream* AudioManagerPulse::MakeLowLatencyInputStream( | 165 AudioInputStream* AudioManagerPulse::MakeLowLatencyInputStream( |
| 168 const AudioParameters& params, const std::string& device_id) { | 166 const AudioParameters& params, const std::string& device_id) { |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 void AudioManagerPulse::SampleRateInfoCallback(pa_context* context, | 333 void AudioManagerPulse::SampleRateInfoCallback(pa_context* context, |
| 336 const pa_server_info* info, | 334 const pa_server_info* info, |
| 337 void* user_data) { | 335 void* user_data) { |
| 338 AudioManagerPulse* manager = reinterpret_cast<AudioManagerPulse*>(user_data); | 336 AudioManagerPulse* manager = reinterpret_cast<AudioManagerPulse*>(user_data); |
| 339 | 337 |
| 340 manager->native_input_sample_rate_ = info->sample_spec.rate; | 338 manager->native_input_sample_rate_ = info->sample_spec.rate; |
| 341 pa_threaded_mainloop_signal(manager->input_mainloop_, 0); | 339 pa_threaded_mainloop_signal(manager->input_mainloop_, 0); |
| 342 } | 340 } |
| 343 | 341 |
| 344 } // namespace media | 342 } // namespace media |
| OLD | NEW |