Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(243)

Side by Side Diff: media/audio/pulse/audio_manager_pulse.cc

Issue 285233005: add audio-buffer-size command line flag support to the input audio for all the platforms (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « media/audio/pulse/audio_manager_pulse.h ('k') | media/audio/win/audio_manager_win.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
(...skipping 17 matching lines...) Expand all
28 #endif // defined(DLOPEN_PULSEAUDIO) 28 #endif // defined(DLOPEN_PULSEAUDIO)
29 29
30 namespace media { 30 namespace media {
31 31
32 using pulse::AutoPulseLock; 32 using pulse::AutoPulseLock;
33 using pulse::WaitForOperationCompletion; 33 using pulse::WaitForOperationCompletion;
34 34
35 // Maximum number of output streams that can be open simultaneously. 35 // Maximum number of output streams that can be open simultaneously.
36 static const int kMaxOutputStreams = 50; 36 static const int kMaxOutputStreams = 50;
37 37
38 // Define bounds for the output buffer size. 38 // Minimum bound for the output buffer size.
39 static const int kMinimumOutputBufferSize = 512; 39 static const int kMinimumOutputBufferSize = 512;
40 static const int kMaximumOutputBufferSize = 8192; 40
41 // Maximum bound for the input and output buffer size
42 static const int kMaximumBufferSize = 8192;
41 43
42 // Default input buffer size. 44 // Default input buffer size.
43 static const int kDefaultInputBufferSize = 1024; 45 static const int kDefaultInputBufferSize = 1024;
44 46
45 static const base::FilePath::CharType kPulseLib[] = 47 static const base::FilePath::CharType kPulseLib[] =
46 FILE_PATH_LITERAL("libpulse.so.0"); 48 FILE_PATH_LITERAL("libpulse.so.0");
47 49
48 // static 50 // static
49 AudioManager* AudioManagerPulse::Create(AudioLogFactory* audio_log_factory) { 51 AudioManager* AudioManagerPulse::Create(AudioLogFactory* audio_log_factory) {
50 scoped_ptr<AudioManagerPulse> ret(new AudioManagerPulse(audio_log_factory)); 52 scoped_ptr<AudioManagerPulse> ret(new AudioManagerPulse(audio_log_factory));
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 void AudioManagerPulse::GetAudioInputDeviceNames( 121 void AudioManagerPulse::GetAudioInputDeviceNames(
120 AudioDeviceNames* device_names) { 122 AudioDeviceNames* device_names) {
121 GetAudioDeviceNames(true, device_names); 123 GetAudioDeviceNames(true, device_names);
122 } 124 }
123 125
124 void AudioManagerPulse::GetAudioOutputDeviceNames( 126 void AudioManagerPulse::GetAudioOutputDeviceNames(
125 AudioDeviceNames* device_names) { 127 AudioDeviceNames* device_names) {
126 GetAudioDeviceNames(false, device_names); 128 GetAudioDeviceNames(false, device_names);
127 } 129 }
128 130
129 AudioParameters AudioManagerPulse::GetInputStreamParameters( 131 AudioParameters AudioManagerPulse::GetPreferredInputStreamParameters(
130 const std::string& device_id) { 132 const std::string& input_device_id,
133 const AudioParameters& input_params) {
134 // TODO(xians): add support for querying native channel layout for pulse.
135 ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
136 int buffer_size = kDefaultInputBufferSize;
137 int bits_per_sample = 16;
138 int input_channels = 0;
139 int sample_rate = GetNativeSampleRate();
140 if (input_params.IsValid()) {
141 bits_per_sample = input_params.bits_per_sample();
142 channel_layout = input_params.channel_layout();
143 input_channels = input_params.input_channels();
144 buffer_size = std::min(kMaximumBufferSize,
145 input_params.frames_per_buffer());
146 sample_rate = input_params.sample_rate();
147 }
148
131 int user_buffer_size = GetUserBufferSize(); 149 int user_buffer_size = GetUserBufferSize();
132 int buffer_size = user_buffer_size ? 150 if (user_buffer_size)
133 user_buffer_size : kDefaultInputBufferSize; 151 buffer_size = user_buffer_size;
134 152
135 // TODO(xians): add support for querying native channel layout for pulse.
136 return AudioParameters( 153 return AudioParameters(
137 AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO, 154 AudioParameters::AUDIO_PCM_LOW_LATENCY, channel_layout, input_channels,
138 GetNativeSampleRate(), 16, buffer_size); 155 sample_rate, bits_per_sample, buffer_size, AudioParameters::NO_EFFECTS);
139 } 156 }
140 157
141 AudioOutputStream* AudioManagerPulse::MakeLinearOutputStream( 158 AudioOutputStream* AudioManagerPulse::MakeLinearOutputStream(
142 const AudioParameters& params) { 159 const AudioParameters& params) {
143 DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format()); 160 DCHECK_EQ(AudioParameters::AUDIO_PCM_LINEAR, params.format());
144 return MakeOutputStream(params, AudioManagerBase::kDefaultDeviceId); 161 return MakeOutputStream(params, AudioManagerBase::kDefaultDeviceId);
145 } 162 }
146 163
147 AudioOutputStream* AudioManagerPulse::MakeLowLatencyOutputStream( 164 AudioOutputStream* AudioManagerPulse::MakeLowLatencyOutputStream(
148 const AudioParameters& params, 165 const AudioParameters& params,
(...skipping 19 matching lines...) Expand all
168 AudioParameters AudioManagerPulse::GetPreferredOutputStreamParameters( 185 AudioParameters AudioManagerPulse::GetPreferredOutputStreamParameters(
169 const std::string& output_device_id, 186 const std::string& output_device_id,
170 const AudioParameters& input_params) { 187 const AudioParameters& input_params) {
171 // TODO(tommi): Support |output_device_id|. 188 // TODO(tommi): Support |output_device_id|.
172 VLOG_IF(0, !output_device_id.empty()) << "Not implemented!"; 189 VLOG_IF(0, !output_device_id.empty()) << "Not implemented!";
173 190
174 ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO; 191 ChannelLayout channel_layout = CHANNEL_LAYOUT_STEREO;
175 int buffer_size = kMinimumOutputBufferSize; 192 int buffer_size = kMinimumOutputBufferSize;
176 int bits_per_sample = 16; 193 int bits_per_sample = 16;
177 int input_channels = 0; 194 int input_channels = 0;
178 int sample_rate; 195 int sample_rate = 0;
179 if (input_params.IsValid()) { 196 if (input_params.IsValid()) {
180 bits_per_sample = input_params.bits_per_sample(); 197 bits_per_sample = input_params.bits_per_sample();
181 channel_layout = input_params.channel_layout(); 198 channel_layout = input_params.channel_layout();
182 input_channels = input_params.input_channels(); 199 input_channels = input_params.input_channels();
183 buffer_size = 200 buffer_size =
184 std::min(kMaximumOutputBufferSize, 201 std::min(kMaximumBufferSize,
185 std::max(buffer_size, input_params.frames_per_buffer())); 202 std::max(buffer_size, input_params.frames_per_buffer()));
186 sample_rate = input_params.sample_rate(); 203 sample_rate = input_params.sample_rate();
187 } else { 204 } else {
188 sample_rate = GetNativeSampleRate(); 205 sample_rate = GetNativeSampleRate();
189 } 206 }
190 207
191 int user_buffer_size = GetUserBufferSize(); 208 int user_buffer_size = GetUserBufferSize();
192 if (user_buffer_size) 209 if (user_buffer_size)
193 buffer_size = user_buffer_size; 210 buffer_size = user_buffer_size;
194 211
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 void AudioManagerPulse::SampleRateInfoCallback(pa_context* context, 353 void AudioManagerPulse::SampleRateInfoCallback(pa_context* context,
337 const pa_server_info* info, 354 const pa_server_info* info,
338 void* user_data) { 355 void* user_data) {
339 AudioManagerPulse* manager = reinterpret_cast<AudioManagerPulse*>(user_data); 356 AudioManagerPulse* manager = reinterpret_cast<AudioManagerPulse*>(user_data);
340 357
341 manager->native_input_sample_rate_ = info->sample_spec.rate; 358 manager->native_input_sample_rate_ = info->sample_spec.rate;
342 pa_threaded_mainloop_signal(manager->input_mainloop_, 0); 359 pa_threaded_mainloop_signal(manager->input_mainloop_, 0);
343 } 360 }
344 361
345 } // namespace media 362 } // namespace media
OLDNEW
« no previous file with comments | « media/audio/pulse/audio_manager_pulse.h ('k') | media/audio/win/audio_manager_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698