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

Unified 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/audio_manager_base.cc
diff --git a/media/audio/audio_manager_base.cc b/media/audio/audio_manager_base.cc
index 3b36b106fa681659dc78b6e894a1965a7d93cae4..6d328af274cfffe8052b83be93f7f9d232de6281 100644
--- a/media/audio/audio_manager_base.cc
+++ b/media/audio/audio_manager_base.cc
@@ -9,6 +9,7 @@
#include "base/command_line.h"
#include "base/strings/string_number_conversions.h"
#include "build/build_config.h"
+#include "media/audio/audio_input_proxy.h"
#include "media/audio/audio_output_dispatcher_impl.h"
#include "media/audio/audio_output_proxy.h"
#include "media/audio/audio_output_resampler.h"
@@ -203,9 +204,14 @@ AudioInputStream* AudioManagerBase::MakeAudioInputStream(
case AudioParameters::AUDIO_PCM_LINEAR:
stream = MakeLinearInputStream(params, device_id);
break;
- case AudioParameters::AUDIO_PCM_LOW_LATENCY:
- stream = MakeLowLatencyInputStream(params, device_id);
+ case AudioParameters::AUDIO_PCM_LOW_LATENCY: {
+ const AudioParameters hardware_params =
+ GetSupportedInputHardwareParameters(device_id, params);
+ input_proxies_.push_back(
+ new AudioInputProxy(this, params, hardware_params, device_id));
+ stream = static_cast<AudioInputStream*>(input_proxies_.back());
break;
+ }
case AudioParameters::AUDIO_FAKE:
stream = FakeAudioInputStream::MakeFakeStream(this, params);
break;
@@ -334,10 +340,14 @@ void AudioManagerBase::Shutdown() {
void AudioManagerBase::ShutdownOnAudioThread() {
DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(input_proxies_.empty());
while (!output_dispatchers_.empty()) {
output_dispatchers_.back()->dispatcher->Shutdown();
output_dispatchers_.pop_back();
}
+
+ while (!input_proxies_.empty())
+ input_proxies_.pop_back();
}
void AudioManagerBase::AddOutputDeviceChangeListener(
@@ -371,8 +381,8 @@ AudioParameters AudioManagerBase::GetOutputStreamParameters(
AudioParameters AudioManagerBase::GetInputStreamParameters(
const std::string& device_id) {
- NOTREACHED();
- return AudioParameters();
+ return GetPreferredInputStreamParameters(device_id,
+ AudioParameters());
}
std::string AudioManagerBase::GetAssociatedOutputDeviceID(
@@ -400,4 +410,40 @@ scoped_ptr<AudioLog> AudioManagerBase::CreateAudioLog(
return audio_log_factory_->CreateAudioLog(component);
}
+AudioParameters AudioManagerBase::GetSupportedInputHardwareParameters(
+ const std::string& device_id, const AudioParameters& preferred_params) {
+ // Delete all the idle input proxy streams.
+ for (AudioInputProxies::iterator iter = input_proxies_.begin();
+ iter != input_proxies_.end();) {
+ if ((*iter)->is_idle())
+ input_proxies_.erase(iter++);
+ else
+ ++iter;
+ }
+
+//#if defined(OS_MACOSX)
+ // Find out if the existing streams using different format to open
+ // the device, if there is any, we should force all the existing streams and
+ // the new stream to use the native hardware parameters.
+ AudioParameters use_native_params;
+ for (AudioInputProxies::iterator iter = input_proxies_.begin();
+ iter != input_proxies_.end(); ++iter) {
+ if ((*iter)->device_id() == device_id &&
+ (*iter)->input_parameters() != preferred_params) {
+ if (!use_native_params.IsValid()) {
+ use_native_params = GetInputStreamParameters(device_id);
+ DCHECK(use_native_params.IsValid());
+ }
+
+ (*iter)->MaybeRestartStream(use_native_params);
+ }
+ }
+
+ if (use_native_params.IsValid())
+ return use_native_params;
+//#endif
+
+ return preferred_params;
+}
+
} // namespace media
« 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