Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1518)

Unified Diff: content/renderer/media/audio_renderer_mixer_manager.cc

Issue 11166002: Plumb render view ID from audio-related code in renderer through IPCs to AudioRendererHost in brows… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased. Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698