Index: content/renderer/media/audio_renderer_mixer_manager.cc |
diff --git a/content/renderer/media/audio_renderer_mixer_manager.cc b/content/renderer/media/audio_renderer_mixer_manager.cc |
index 411ae8b430a346e647f51e447faeaee20bdc7694..1a485215280c76fb2342e7f3de4757c58b6f31bd 100644 |
--- a/content/renderer/media/audio_renderer_mixer_manager.cc |
+++ b/content/renderer/media/audio_renderer_mixer_manager.cc |
@@ -22,20 +22,24 @@ AudioRendererMixerManager::~AudioRendererMixerManager() { |
DCHECK(mixers_.empty()); |
} |
-media::AudioRendererMixerInput* AudioRendererMixerManager::CreateInput() { |
+media::AudioRendererMixerInput* AudioRendererMixerManager::CreateInput( |
+ int render_view_id) { |
return new media::AudioRendererMixerInput( |
base::Bind( |
- &AudioRendererMixerManager::GetMixer, base::Unretained(this)), |
+ &AudioRendererMixerManager::GetMixer, base::Unretained(this), |
+ render_view_id), |
base::Bind( |
- &AudioRendererMixerManager::RemoveMixer, base::Unretained(this))); |
+ &AudioRendererMixerManager::RemoveMixer, base::Unretained(this), |
+ render_view_id)); |
} |
media::AudioRendererMixer* AudioRendererMixerManager::GetMixer( |
- const media::AudioParameters& params) { |
+ int render_view_id, const media::AudioParameters& params) { |
base::AutoLock auto_lock(mixers_lock_); |
- AudioRendererMixerMap::iterator it = mixers_.find(params); |
- if (it != mixers_.end()) { |
+ MixerByParamsMap& mixers_by_params = mixers_[render_view_id]; |
+ MixerByParamsMap::iterator it = mixers_by_params.find(params); |
+ if (it != mixers_by_params.end()) { |
it->second.ref_count++; |
return it->second.mixer; |
} |
@@ -48,25 +52,32 @@ media::AudioRendererMixer* AudioRendererMixerManager::GetMixer( |
hardware_sample_rate_, 16, hardware_buffer_size_); |
media::AudioRendererMixer* mixer = new media::AudioRendererMixer( |
- params, output_params, AudioDeviceFactory::NewOutputDevice()); |
+ params, output_params, |
+ AudioDeviceFactory::NewOutputDevice(render_view_id)); |
AudioRendererMixerReference mixer_reference = { mixer, 1 }; |
- mixers_[params] = mixer_reference; |
+ mixers_by_params[params] = mixer_reference; |
return mixer; |
} |
void AudioRendererMixerManager::RemoveMixer( |
- const media::AudioParameters& params) { |
+ int render_view_id, const media::AudioParameters& params) { |
base::AutoLock auto_lock(mixers_lock_); |
- AudioRendererMixerMap::iterator it = mixers_.find(params); |
- DCHECK(it != mixers_.end()); |
+ AudioRendererMixerMap::iterator mixers_it = mixers_.find(render_view_id); |
+ DCHECK(mixers_it != mixers_.end()); |
+ MixerByParamsMap& mixers_by_params = mixers_it->second; |
+ MixerByParamsMap::iterator it = mixers_by_params.find(params); |
+ DCHECK(it != mixers_by_params.end()); |
// Only remove the mixer if AudioRendererMixerManager is the last owner. |
it->second.ref_count--; |
if (it->second.ref_count == 0) { |
delete it->second.mixer; |
- mixers_.erase(it); |
+ mixers_by_params.erase(it); |
+ if (mixers_by_params.empty()) { |
+ mixers_.erase(mixers_it); |
+ } |
} |
} |