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

Side by Side Diff: media/audio/audio_manager_base.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/audio_manager_base.h ('k') | media/audio/audio_parameters.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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/audio_manager_base.h" 5 #include "media/audio/audio_manager_base.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
11 #include "build/build_config.h" 11 #include "build/build_config.h"
12 #include "media/audio/audio_input_proxy.h"
12 #include "media/audio/audio_output_dispatcher_impl.h" 13 #include "media/audio/audio_output_dispatcher_impl.h"
13 #include "media/audio/audio_output_proxy.h" 14 #include "media/audio/audio_output_proxy.h"
14 #include "media/audio/audio_output_resampler.h" 15 #include "media/audio/audio_output_resampler.h"
15 #include "media/audio/fake_audio_input_stream.h" 16 #include "media/audio/fake_audio_input_stream.h"
16 #include "media/audio/fake_audio_output_stream.h" 17 #include "media/audio/fake_audio_output_stream.h"
17 #include "media/base/media_switches.h" 18 #include "media/base/media_switches.h"
18 19
19 namespace media { 20 namespace media {
20 21
21 static const int kStreamCloseDelaySeconds = 5; 22 static const int kStreamCloseDelaySeconds = 5;
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 << num_input_streams_ 197 << num_input_streams_
197 << " exceed the max allowed number " << max_num_input_streams_; 198 << " exceed the max allowed number " << max_num_input_streams_;
198 return NULL; 199 return NULL;
199 } 200 }
200 201
201 AudioInputStream* stream; 202 AudioInputStream* stream;
202 switch (params.format()) { 203 switch (params.format()) {
203 case AudioParameters::AUDIO_PCM_LINEAR: 204 case AudioParameters::AUDIO_PCM_LINEAR:
204 stream = MakeLinearInputStream(params, device_id); 205 stream = MakeLinearInputStream(params, device_id);
205 break; 206 break;
206 case AudioParameters::AUDIO_PCM_LOW_LATENCY: 207 case AudioParameters::AUDIO_PCM_LOW_LATENCY: {
207 stream = MakeLowLatencyInputStream(params, device_id); 208 const AudioParameters hardware_params =
209 GetSupportedInputHardwareParameters(device_id, params);
210 input_proxies_.push_back(
211 new AudioInputProxy(this, params, hardware_params, device_id));
212 stream = static_cast<AudioInputStream*>(input_proxies_.back());
208 break; 213 break;
214 }
209 case AudioParameters::AUDIO_FAKE: 215 case AudioParameters::AUDIO_FAKE:
210 stream = FakeAudioInputStream::MakeFakeStream(this, params); 216 stream = FakeAudioInputStream::MakeFakeStream(this, params);
211 break; 217 break;
212 default: 218 default:
213 stream = NULL; 219 stream = NULL;
214 break; 220 break;
215 } 221 }
216 222
217 if (stream) { 223 if (stream) {
218 ++num_input_streams_; 224 ++num_input_streams_;
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 task_runner_->PostTask(FROM_HERE, base::Bind( 333 task_runner_->PostTask(FROM_HERE, base::Bind(
328 &AudioManagerBase::ShutdownOnAudioThread, base::Unretained(this))); 334 &AudioManagerBase::ShutdownOnAudioThread, base::Unretained(this)));
329 } 335 }
330 336
331 // Stop() will wait for any posted messages to be processed first. 337 // Stop() will wait for any posted messages to be processed first.
332 audio_thread_.Stop(); 338 audio_thread_.Stop();
333 } 339 }
334 340
335 void AudioManagerBase::ShutdownOnAudioThread() { 341 void AudioManagerBase::ShutdownOnAudioThread() {
336 DCHECK(task_runner_->BelongsToCurrentThread()); 342 DCHECK(task_runner_->BelongsToCurrentThread());
343 DCHECK(input_proxies_.empty());
337 while (!output_dispatchers_.empty()) { 344 while (!output_dispatchers_.empty()) {
338 output_dispatchers_.back()->dispatcher->Shutdown(); 345 output_dispatchers_.back()->dispatcher->Shutdown();
339 output_dispatchers_.pop_back(); 346 output_dispatchers_.pop_back();
340 } 347 }
348
349 while (!input_proxies_.empty())
350 input_proxies_.pop_back();
341 } 351 }
342 352
343 void AudioManagerBase::AddOutputDeviceChangeListener( 353 void AudioManagerBase::AddOutputDeviceChangeListener(
344 AudioDeviceListener* listener) { 354 AudioDeviceListener* listener) {
345 DCHECK(task_runner_->BelongsToCurrentThread()); 355 DCHECK(task_runner_->BelongsToCurrentThread());
346 output_listeners_.AddObserver(listener); 356 output_listeners_.AddObserver(listener);
347 } 357 }
348 358
349 void AudioManagerBase::RemoveOutputDeviceChangeListener( 359 void AudioManagerBase::RemoveOutputDeviceChangeListener(
350 AudioDeviceListener* listener) { 360 AudioDeviceListener* listener) {
(...skipping 13 matching lines...) Expand all
364 } 374 }
365 375
366 AudioParameters AudioManagerBase::GetOutputStreamParameters( 376 AudioParameters AudioManagerBase::GetOutputStreamParameters(
367 const std::string& device_id) { 377 const std::string& device_id) {
368 return GetPreferredOutputStreamParameters(device_id, 378 return GetPreferredOutputStreamParameters(device_id,
369 AudioParameters()); 379 AudioParameters());
370 } 380 }
371 381
372 AudioParameters AudioManagerBase::GetInputStreamParameters( 382 AudioParameters AudioManagerBase::GetInputStreamParameters(
373 const std::string& device_id) { 383 const std::string& device_id) {
374 NOTREACHED(); 384 return GetPreferredInputStreamParameters(device_id,
375 return AudioParameters(); 385 AudioParameters());
376 } 386 }
377 387
378 std::string AudioManagerBase::GetAssociatedOutputDeviceID( 388 std::string AudioManagerBase::GetAssociatedOutputDeviceID(
379 const std::string& input_device_id) { 389 const std::string& input_device_id) {
380 return ""; 390 return "";
381 } 391 }
382 392
383 std::string AudioManagerBase::GetDefaultOutputDeviceID() { 393 std::string AudioManagerBase::GetDefaultOutputDeviceID() {
384 return ""; 394 return "";
385 } 395 }
386 396
387 int AudioManagerBase::GetUserBufferSize() { 397 int AudioManagerBase::GetUserBufferSize() {
388 const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); 398 const CommandLine* cmd_line = CommandLine::ForCurrentProcess();
389 int buffer_size = 0; 399 int buffer_size = 0;
390 std::string buffer_size_str(cmd_line->GetSwitchValueASCII( 400 std::string buffer_size_str(cmd_line->GetSwitchValueASCII(
391 switches::kAudioBufferSize)); 401 switches::kAudioBufferSize));
392 if (base::StringToInt(buffer_size_str, &buffer_size) && buffer_size > 0) 402 if (base::StringToInt(buffer_size_str, &buffer_size) && buffer_size > 0)
393 return buffer_size; 403 return buffer_size;
394 404
395 return 0; 405 return 0;
396 } 406 }
397 407
398 scoped_ptr<AudioLog> AudioManagerBase::CreateAudioLog( 408 scoped_ptr<AudioLog> AudioManagerBase::CreateAudioLog(
399 AudioLogFactory::AudioComponent component) { 409 AudioLogFactory::AudioComponent component) {
400 return audio_log_factory_->CreateAudioLog(component); 410 return audio_log_factory_->CreateAudioLog(component);
401 } 411 }
402 412
413 AudioParameters AudioManagerBase::GetSupportedInputHardwareParameters(
414 const std::string& device_id, const AudioParameters& preferred_params) {
415 // Delete all the idle input proxy streams.
416 for (AudioInputProxies::iterator iter = input_proxies_.begin();
417 iter != input_proxies_.end();) {
418 if ((*iter)->is_idle())
419 input_proxies_.erase(iter++);
420 else
421 ++iter;
422 }
423
424 //#if defined(OS_MACOSX)
425 // Find out if the existing streams using different format to open
426 // the device, if there is any, we should force all the existing streams and
427 // the new stream to use the native hardware parameters.
428 AudioParameters use_native_params;
429 for (AudioInputProxies::iterator iter = input_proxies_.begin();
430 iter != input_proxies_.end(); ++iter) {
431 if ((*iter)->device_id() == device_id &&
432 (*iter)->input_parameters() != preferred_params) {
433 if (!use_native_params.IsValid()) {
434 use_native_params = GetInputStreamParameters(device_id);
435 DCHECK(use_native_params.IsValid());
436 }
437
438 (*iter)->MaybeRestartStream(use_native_params);
439 }
440 }
441
442 if (use_native_params.IsValid())
443 return use_native_params;
444 //#endif
445
446 return preferred_params;
447 }
448
403 } // namespace media 449 } // namespace media
OLDNEW
« no previous file with comments | « media/audio/audio_manager_base.h ('k') | media/audio/audio_parameters.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698