Index: media/base/audio_renderer_mixer.cc |
diff --git a/media/base/audio_renderer_mixer.cc b/media/base/audio_renderer_mixer.cc |
index 1a0417a81e6ebeb25a76a1e6639efa06c0e7e1fc..7db9b3f64c150e6bed188086d10b031ba224bc97 100644 |
--- a/media/base/audio_renderer_mixer.cc |
+++ b/media/base/audio_renderer_mixer.cc |
@@ -34,8 +34,8 @@ AudioRendererMixer::~AudioRendererMixer() { |
DCHECK_EQ(mixer_inputs_.size(), 0U); |
} |
-void AudioRendererMixer::AddMixerInput( |
- const scoped_refptr<AudioRendererMixerInput>& input) { |
+void AudioRendererMixer::AddMixerInput(AudioConverter::InputCallback* input, |
+ const base::Closure& error_cb) { |
base::AutoLock auto_lock(mixer_inputs_lock_); |
if (!playing_) { |
@@ -44,15 +44,18 @@ void AudioRendererMixer::AddMixerInput( |
audio_sink_->Play(); |
} |
- mixer_inputs_.push_back(input); |
+ DCHECK(mixer_inputs_.find(input) == mixer_inputs_.end()); |
+ mixer_inputs_[input] = error_cb; |
audio_converter_.AddInput(input); |
} |
void AudioRendererMixer::RemoveMixerInput( |
- const scoped_refptr<AudioRendererMixerInput>& input) { |
+ AudioConverter::InputCallback* input) { |
base::AutoLock auto_lock(mixer_inputs_lock_); |
audio_converter_.RemoveInput(input); |
- mixer_inputs_.remove(input); |
+ |
+ DCHECK(mixer_inputs_.find(input) != mixer_inputs_.end()); |
+ mixer_inputs_.erase(input); |
} |
int AudioRendererMixer::Render(AudioBus* audio_bus, |
@@ -70,13 +73,8 @@ int AudioRendererMixer::Render(AudioBus* audio_bus, |
playing_ = false; |
} |
- // Set the delay information for each mixer input. |
- for (AudioRendererMixerInputSet::iterator it = mixer_inputs_.begin(); |
- it != mixer_inputs_.end(); ++it) { |
- (*it)->set_audio_delay_milliseconds(audio_delay_milliseconds); |
- } |
- |
- audio_converter_.Convert(audio_bus); |
+ audio_converter_.ConvertWithDelay( |
+ base::TimeDelta::FromMilliseconds(audio_delay_milliseconds), audio_bus); |
return audio_bus->frames(); |
} |
@@ -86,7 +84,7 @@ void AudioRendererMixer::OnRenderError() { |
// Call each mixer input and signal an error. |
for (AudioRendererMixerInputSet::iterator it = mixer_inputs_.begin(); |
it != mixer_inputs_.end(); ++it) { |
- (*it)->OnRenderError(); |
+ it->second.Run(); |
} |
} |