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

Unified Diff: media/base/audio_renderer_mixer_input.cc

Issue 1942803002: Caching AudioOutputDevice instances in mixer manager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: First round of comments addressed Created 4 years, 7 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: media/base/audio_renderer_mixer_input.cc
diff --git a/media/base/audio_renderer_mixer_input.cc b/media/base/audio_renderer_mixer_input.cc
index 55dbfc8404f76d012cc8550ce2e45f16f7f0bec0..b8711c461e0c4b564da393136491fa9057c2c5f2 100644
--- a/media/base/audio_renderer_mixer_input.cc
+++ b/media/base/audio_renderer_mixer_input.cc
@@ -9,25 +9,28 @@
#include "base/bind.h"
#include "base/callback_helpers.h"
#include "media/base/audio_renderer_mixer.h"
+#include "media/base/audio_renderer_mixer_pool.h"
namespace media {
AudioRendererMixerInput::AudioRendererMixerInput(
- const GetMixerCB& get_mixer_cb,
- const RemoveMixerCB& remove_mixer_cb,
+ AudioRendererMixerPool* mixer_pool,
+ int source_render_frame_id,
const std::string& device_id,
const url::Origin& security_origin)
- : started_(false),
+ : mixer_pool_(mixer_pool),
+ started_(false),
playing_(false),
volume_(1.0f),
- get_mixer_cb_(get_mixer_cb),
- remove_mixer_cb_(remove_mixer_cb),
+ source_render_frame_id_(source_render_frame_id),
device_id_(device_id),
security_origin_(security_origin),
mixer_(nullptr),
callback_(nullptr),
error_cb_(base::Bind(&AudioRendererMixerInput::OnRenderError,
- base::Unretained(this))) {}
+ base::Unretained(this))) {
+ DCHECK(mixer_pool_);
+}
AudioRendererMixerInput::~AudioRendererMixerInput() {
DCHECK(!started_);
@@ -51,7 +54,8 @@ void AudioRendererMixerInput::Start() {
DCHECK(callback_); // Initialized.
started_ = true;
- mixer_ = get_mixer_cb_.Run(params_, device_id_, security_origin_, nullptr);
+ mixer_ = mixer_pool_->GetMixer(source_render_frame_id_, params_, device_id_,
+ security_origin_, nullptr);
if (!mixer_) {
callback_->OnRenderError();
return;
@@ -77,7 +81,8 @@ void AudioRendererMixerInput::Stop() {
// Stop() by an error event since it may outlive this ref-counted object. We
// should instead have sane ownership semantics: http://crbug.com/151051
mixer_->RemoveErrorCallback(error_cb_);
- remove_mixer_cb_.Run(params_, device_id_, security_origin_);
+ mixer_pool_->ReturnMixer(source_render_frame_id_, params_, device_id_,
+ security_origin_);
mixer_ = nullptr;
}
@@ -112,7 +117,10 @@ bool AudioRendererMixerInput::SetVolume(double volume) {
}
OutputDeviceInfo AudioRendererMixerInput::GetOutputDeviceInfo() {
- return mixer_ ? mixer_->GetOutputDeviceInfo() : OutputDeviceInfo();
+ return mixer_ ? mixer_->GetOutputDeviceInfo()
+ : mixer_pool_->GetOutputDeviceInfo(
+ source_render_frame_id_, 0 /* session_id */, device_id_,
+ security_origin_);
}
void AudioRendererMixerInput::SwitchOutputDevice(
@@ -139,7 +147,8 @@ void AudioRendererMixerInput::SwitchOutputDevice(
OutputDeviceStatus new_mixer_status = OUTPUT_DEVICE_STATUS_ERROR_INTERNAL;
AudioRendererMixer* new_mixer =
- get_mixer_cb_.Run(params_, device_id, security_origin, &new_mixer_status);
+ mixer_pool_->GetMixer(source_render_frame_id_, params_, device_id,
+ security_origin, &new_mixer_status);
if (new_mixer_status != OUTPUT_DEVICE_STATUS_OK) {
callback.Run(new_mixer_status);
return;

Powered by Google App Engine
This is Rietveld 408576698