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 |