| 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..4644f75233eba22e88102f46f5799dc6ef3bf76c 100644
|
| --- a/media/audio/audio_manager_base.cc
|
| +++ b/media/audio/audio_manager_base.cc
|
| @@ -8,6 +8,7 @@
|
| #include "base/bind_helpers.h"
|
| #include "base/command_line.h"
|
| #include "base/strings/string_number_conversions.h"
|
| +#include "base/strings/stringprintf.h"
|
| #include "build/build_config.h"
|
| #include "media/audio/audio_output_dispatcher_impl.h"
|
| #include "media/audio/audio_output_proxy.h"
|
| @@ -80,6 +81,7 @@ AudioManagerBase::AudioManagerBase(AudioLogFactory* audio_log_factory)
|
| // block the UI thread when swapping devices.
|
| output_listeners_(
|
| ObserverList<AudioDeviceListener>::NOTIFY_EXISTING_ONLY),
|
| + state_listeners_(ObserverList<StateChangeListener>::NOTIFY_EXISTING_ONLY),
|
| audio_thread_("AudioThread"),
|
| audio_log_factory_(audio_log_factory) {
|
| #if defined(OS_WIN)
|
| @@ -187,27 +189,38 @@ AudioInputStream* AudioManagerBase::MakeAudioInputStream(
|
|
|
| if (!params.IsValid() || (params.channels() > kMaxInputChannels) ||
|
| device_id.empty()) {
|
| - DLOG(ERROR) << "Audio parameters are invalid for device " << device_id;
|
| + std::ostringstream oss;
|
| + oss << "MakeAudioInputStream => invalid parameters";
|
| + DLOG(ERROR) << oss;
|
| + NotifyAllStateChangeListeners(oss.str());
|
| return NULL;
|
| }
|
|
|
| if (num_input_streams_ >= max_num_input_streams_) {
|
| - DLOG(ERROR) << "Number of opened input audio streams "
|
| - << num_input_streams_
|
| - << " exceed the max allowed number " << max_num_input_streams_;
|
| + std::ostringstream oss;
|
| + oss << "MakeAudioInputStream => "
|
| + << "number of opened input audio streams " << num_input_streams_
|
| + << " exceed the max allowed number " << max_num_input_streams_;
|
| + DLOG(ERROR) << oss;
|
| + NotifyAllStateChangeListeners(oss.str());
|
| return NULL;
|
| }
|
|
|
| AudioInputStream* stream;
|
| + std::ostringstream oss;
|
| + oss << "MakeAudioInputStream(";
|
| switch (params.format()) {
|
| case AudioParameters::AUDIO_PCM_LINEAR:
|
| stream = MakeLinearInputStream(params, device_id);
|
| + oss << "AUDIO_PCM_LINEAR)";
|
| break;
|
| case AudioParameters::AUDIO_PCM_LOW_LATENCY:
|
| stream = MakeLowLatencyInputStream(params, device_id);
|
| + oss << "AUDIO_PCM_LOW_LATENCY)";
|
| break;
|
| case AudioParameters::AUDIO_FAKE:
|
| stream = FakeAudioInputStream::MakeFakeStream(this, params);
|
| + oss << "AUDIO_FAKE)";
|
| break;
|
| default:
|
| stream = NULL;
|
| @@ -217,6 +230,8 @@ AudioInputStream* AudioManagerBase::MakeAudioInputStream(
|
| if (stream) {
|
| ++num_input_streams_;
|
| }
|
| + oss << " => num_input_streams = " << num_input_streams_;
|
| + NotifyAllStateChangeListeners(oss.str());
|
|
|
| return stream;
|
| }
|
| @@ -315,6 +330,9 @@ void AudioManagerBase::ReleaseInputStream(AudioInputStream* stream) {
|
| DCHECK(stream);
|
| // TODO(xians) : Have a clearer destruction path for the AudioInputStream.
|
| --num_input_streams_;
|
| + std::string log_string = base::StringPrintf(
|
| + "ReleaseInputStream => num_input_streams = %d", num_input_streams_);
|
| + NotifyAllStateChangeListeners(log_string);
|
| delete stream;
|
| }
|
|
|
| @@ -358,6 +376,25 @@ void AudioManagerBase::NotifyAllOutputDeviceChangeListeners() {
|
| FOR_EACH_OBSERVER(AudioDeviceListener, output_listeners_, OnDeviceChange());
|
| }
|
|
|
| +void AudioManagerBase::AddStateChangeListener(StateChangeListener* listener) {
|
| + DCHECK(task_runner_->BelongsToCurrentThread());
|
| + state_listeners_.AddObserver(listener);
|
| +}
|
| +
|
| +void AudioManagerBase::RemoveStateChangeListener(
|
| + StateChangeListener* listener) {
|
| + DCHECK(task_runner_->BelongsToCurrentThread());
|
| + state_listeners_.RemoveObserver(listener);
|
| +}
|
| +
|
| +void AudioManagerBase::NotifyAllStateChangeListeners(const std::string& msg) {
|
| + DCHECK(task_runner_->BelongsToCurrentThread());
|
| + std::string log_string("AMB::");
|
| + log_string += msg;
|
| + FOR_EACH_OBSERVER(
|
| + StateChangeListener, state_listeners_, OnStateChange(log_string));
|
| +}
|
| +
|
| AudioParameters AudioManagerBase::GetDefaultOutputStreamParameters() {
|
| return GetPreferredOutputStreamParameters(GetDefaultOutputDeviceID(),
|
| AudioParameters());
|
|
|