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()); |
DaleCurtis
2014/08/26 20:09:29
This seems wrong. Only the creating controller sho
henrika (OOO until Aug 14)
2014/08/27 13:54:38
Done.
|
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 => " |
DaleCurtis
2014/08/26 20:09:29
Ditto. All this is doing is spamming all listeners
henrika (OOO until Aug 14)
2014/08/27 13:54:38
Done.
|
+ << "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( |
DaleCurtis
2014/08/26 20:09:29
Further, none of this is actually a state change,
henrika (OOO until Aug 14)
2014/08/27 13:54:38
Done.
|
+ "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()); |