| 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_parameters.h" | 16 #include "media/audio/audio_parameters.h" |
| 17 #include "media/audio/pulse/pulse_input.h" | 17 #include "media/audio/pulse/pulse_input.h" |
| 18 #include "media/audio/pulse/pulse_output.h" | 18 #include "media/audio/pulse/pulse_output.h" |
| 19 #include "media/audio/pulse/pulse_unified.h" | |
| 20 #include "media/audio/pulse/pulse_util.h" | 19 #include "media/audio/pulse/pulse_util.h" |
| 21 #include "media/base/channel_layout.h" | 20 #include "media/base/channel_layout.h" |
| 22 | 21 |
| 23 #if defined(DLOPEN_PULSEAUDIO) | 22 #if defined(DLOPEN_PULSEAUDIO) |
| 24 #include "media/audio/pulse/pulse_stubs.h" | 23 #include "media/audio/pulse/pulse_stubs.h" |
| 25 | 24 |
| 26 using media_audio_pulse::kModulePulse; | 25 using media_audio_pulse::kModulePulse; |
| 27 using media_audio_pulse::InitializeStubs; | 26 using media_audio_pulse::InitializeStubs; |
| 28 using media_audio_pulse::StubPathMap; | 27 using media_audio_pulse::StubPathMap; |
| 29 #endif // defined(DLOPEN_PULSEAUDIO) | 28 #endif // defined(DLOPEN_PULSEAUDIO) |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 | 125 |
| 127 // TODO(xians): add support for querying native channel layout for pulse. | 126 // TODO(xians): add support for querying native channel layout for pulse. |
| 128 return AudioParameters( | 127 return AudioParameters( |
| 129 AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO, | 128 AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO, |
| 130 GetNativeSampleRate(), 16, kDefaultInputBufferSize); | 129 GetNativeSampleRate(), 16, kDefaultInputBufferSize); |
| 131 } | 130 } |
| 132 | 131 |
| 133 AudioOutputStream* AudioManagerPulse::MakeLinearOutputStream( | 132 AudioOutputStream* AudioManagerPulse::MakeLinearOutputStream( |
| 134 const AudioParameters& params) { | 133 const AudioParameters& params) { |
| 135 DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format()); | 134 DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format()); |
| 136 return MakeOutputStream(params, std::string()); | 135 return MakeOutputStream(params); |
| 137 } | 136 } |
| 138 | 137 |
| 139 AudioOutputStream* AudioManagerPulse::MakeLowLatencyOutputStream( | 138 AudioOutputStream* AudioManagerPulse::MakeLowLatencyOutputStream( |
| 140 const AudioParameters& params, | 139 const AudioParameters& params, |
| 141 const std::string& device_id, | 140 const std::string& device_id) { |
| 142 const std::string& input_device_id) { | |
| 143 DLOG_IF(ERROR, !device_id.empty()) << "Not implemented!"; | 141 DLOG_IF(ERROR, !device_id.empty()) << "Not implemented!"; |
| 144 DCHECK_EQ(AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format()); | 142 DCHECK_EQ(AudioParameters::AUDIO_PCM_LOW_LATENCY, params.format()); |
| 145 return MakeOutputStream(params, input_device_id); | 143 return MakeOutputStream(params); |
| 146 } | 144 } |
| 147 | 145 |
| 148 AudioInputStream* AudioManagerPulse::MakeLinearInputStream( | 146 AudioInputStream* AudioManagerPulse::MakeLinearInputStream( |
| 149 const AudioParameters& params, const std::string& device_id) { | 147 const AudioParameters& params, const std::string& device_id) { |
| 150 DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format()); | 148 DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format()); |
| 151 return MakeInputStream(params, device_id); | 149 return MakeInputStream(params, device_id); |
| 152 } | 150 } |
| 153 | 151 |
| 154 AudioInputStream* AudioManagerPulse::MakeLowLatencyInputStream( | 152 AudioInputStream* AudioManagerPulse::MakeLowLatencyInputStream( |
| 155 const AudioParameters& params, const std::string& device_id) { | 153 const AudioParameters& params, const std::string& device_id) { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 182 int user_buffer_size = GetUserBufferSize(); | 180 int user_buffer_size = GetUserBufferSize(); |
| 183 if (user_buffer_size) | 181 if (user_buffer_size) |
| 184 buffer_size = user_buffer_size; | 182 buffer_size = user_buffer_size; |
| 185 | 183 |
| 186 return AudioParameters( | 184 return AudioParameters( |
| 187 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, input_channels, | 185 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, input_channels, |
| 188 sample_rate, bits_per_sample, buffer_size, AudioParameters::NO_EFFECTS); | 186 sample_rate, bits_per_sample, buffer_size, AudioParameters::NO_EFFECTS); |
| 189 } | 187 } |
| 190 | 188 |
| 191 AudioOutputStream* AudioManagerPulse::MakeOutputStream( | 189 AudioOutputStream* AudioManagerPulse::MakeOutputStream( |
| 192 const AudioParameters& params, const std::string& input_device_id) { | 190 const AudioParameters& params) { |
| 193 if (params.input_channels()) { | |
| 194 return new PulseAudioUnifiedStream(params, input_device_id, this); | |
| 195 } | |
| 196 | |
| 197 return new PulseAudioOutputStream(params, this); | 191 return new PulseAudioOutputStream(params, this); |
| 198 } | 192 } |
| 199 | 193 |
| 200 AudioInputStream* AudioManagerPulse::MakeInputStream( | 194 AudioInputStream* AudioManagerPulse::MakeInputStream( |
| 201 const AudioParameters& params, const std::string& device_id) { | 195 const AudioParameters& params, const std::string& device_id) { |
| 202 return new PulseAudioInputStream(this, device_id, params, | 196 return new PulseAudioInputStream(this, device_id, params, |
| 203 input_mainloop_, input_context_); | 197 input_mainloop_, input_context_); |
| 204 } | 198 } |
| 205 | 199 |
| 206 int AudioManagerPulse::GetNativeSampleRate() { | 200 int AudioManagerPulse::GetNativeSampleRate() { |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 void AudioManagerPulse::SampleRateInfoCallback(pa_context* context, | 323 void AudioManagerPulse::SampleRateInfoCallback(pa_context* context, |
| 330 const pa_server_info* info, | 324 const pa_server_info* info, |
| 331 void* user_data) { | 325 void* user_data) { |
| 332 AudioManagerPulse* manager = reinterpret_cast<AudioManagerPulse*>(user_data); | 326 AudioManagerPulse* manager = reinterpret_cast<AudioManagerPulse*>(user_data); |
| 333 | 327 |
| 334 manager->native_input_sample_rate_ = info->sample_spec.rate; | 328 manager->native_input_sample_rate_ = info->sample_spec.rate; |
| 335 pa_threaded_mainloop_signal(manager->input_mainloop_, 0); | 329 pa_threaded_mainloop_signal(manager->input_mainloop_, 0); |
| 336 } | 330 } |
| 337 | 331 |
| 338 } // namespace media | 332 } // namespace media |
| OLD | NEW |