Index: media/base/audio_renderer_mixer.cc |
diff --git a/media/base/audio_renderer_mixer.cc b/media/base/audio_renderer_mixer.cc |
index 11b12110260d9cbf6d4325db50afbcdc438f5d42..7ee07181574e5beb7b9acac3a8ff3780157cec19 100644 |
--- a/media/base/audio_renderer_mixer.cc |
+++ b/media/base/audio_renderer_mixer.cc |
@@ -31,42 +31,51 @@ AudioRendererMixer::~AudioRendererMixer() { |
// Ensures that all mixer inputs have stopped themselves prior to destruction |
// and have called RemoveMixerInput(). |
- DCHECK_EQ(mixer_inputs_.size(), 0U); |
+ DCHECK_EQ(error_callbacks_.size(), 0U); |
} |
-void AudioRendererMixer::AddMixerInput(AudioConverter::InputCallback* input, |
- const base::Closure& error_cb) { |
- base::AutoLock auto_lock(mixer_inputs_lock_); |
- |
+void AudioRendererMixer::AddMixerInput(AudioConverter::InputCallback* input) { |
+ base::AutoLock auto_lock(lock_); |
if (!playing_) { |
playing_ = true; |
last_play_time_ = base::TimeTicks::Now(); |
audio_sink_->Play(); |
} |
- DCHECK(mixer_inputs_.find(input) == mixer_inputs_.end()); |
- mixer_inputs_[input] = error_cb; |
+ DCHECK(error_callbacks_.find(input) != error_callbacks_.end()); |
audio_converter_.AddInput(input); |
} |
void AudioRendererMixer::RemoveMixerInput( |
AudioConverter::InputCallback* input) { |
- base::AutoLock auto_lock(mixer_inputs_lock_); |
+ base::AutoLock auto_lock(lock_); |
audio_converter_.RemoveInput(input); |
+} |
- DCHECK(mixer_inputs_.find(input) != mixer_inputs_.end()); |
- mixer_inputs_.erase(input); |
+void AudioRendererMixer::RegisterErrorCallback( |
+ AudioConverter::InputCallback* input, |
scherkus (not reviewing)
2014/06/03 02:01:31
would using a map/list/vector work? there doesn't
DaleCurtis
2014/06/03 20:26:19
This is using a map so I'm not sure what you're as
|
+ const base::Closure& error_cb) { |
+ base::AutoLock auto_lock(lock_); |
+ DCHECK(error_callbacks_.find(input) == error_callbacks_.end()); |
+ error_callbacks_[input] = error_cb; |
+} |
+ |
+void AudioRendererMixer::UnregisterErrorCallback( |
+ AudioConverter::InputCallback* input) { |
+ base::AutoLock auto_lock(lock_); |
+ DCHECK(error_callbacks_.find(input) != error_callbacks_.end()); |
+ error_callbacks_.erase(input); |
} |
int AudioRendererMixer::Render(AudioBus* audio_bus, |
int audio_delay_milliseconds) { |
- base::AutoLock auto_lock(mixer_inputs_lock_); |
+ base::AutoLock auto_lock(lock_); |
// If there are no mixer inputs and we haven't seen one for a while, pause the |
// sink to avoid wasting resources when media elements are present but remain |
// in the pause state. |
const base::TimeTicks now = base::TimeTicks::Now(); |
- if (!mixer_inputs_.empty()) { |
+ if (!audio_converter_.empty()) { |
last_play_time_ = now; |
} else if (now - last_play_time_ >= pause_delay_ && playing_) { |
audio_sink_->Pause(); |
@@ -79,11 +88,13 @@ int AudioRendererMixer::Render(AudioBus* audio_bus, |
} |
void AudioRendererMixer::OnRenderError() { |
- base::AutoLock auto_lock(mixer_inputs_lock_); |
+ base::AutoLock auto_lock(lock_); |
// Call each mixer input and signal an error. |
- for (AudioRendererMixerInputSet::iterator it = mixer_inputs_.begin(); |
- it != mixer_inputs_.end(); ++it) { |
+ for (AudioRendererMixerErrorCallbackMap::iterator it = |
+ error_callbacks_.begin(); |
+ it != error_callbacks_.end(); |
+ ++it) { |
it->second.Run(); |
} |
} |