| 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..f61206e7f4f7162d8c5432d1db54de3c414a14e2 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 owner_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),
|
| + owner_id_(owner_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(owner_id_, params_, device_id_,
|
| + security_origin_, nullptr);
|
| if (!mixer_) {
|
| callback_->OnRenderError();
|
| return;
|
| @@ -77,7 +81,7 @@ 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(owner_id_, params_, device_id_, security_origin_);
|
| mixer_ = nullptr;
|
| }
|
|
|
| @@ -112,7 +116,10 @@ bool AudioRendererMixerInput::SetVolume(double volume) {
|
| }
|
|
|
| OutputDeviceInfo AudioRendererMixerInput::GetOutputDeviceInfo() {
|
| - return mixer_ ? mixer_->GetOutputDeviceInfo() : OutputDeviceInfo();
|
| + return mixer_
|
| + ? mixer_->GetOutputDeviceInfo()
|
| + : mixer_pool_->GetOutputDeviceInfo(owner_id_, 0 /* session_id */,
|
| + device_id_, security_origin_);
|
| }
|
|
|
| void AudioRendererMixerInput::SwitchOutputDevice(
|
| @@ -138,8 +145,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);
|
| + AudioRendererMixer* new_mixer = mixer_pool_->GetMixer(
|
| + owner_id_, params_, device_id, security_origin, &new_mixer_status);
|
| if (new_mixer_status != OUTPUT_DEVICE_STATUS_OK) {
|
| callback.Run(new_mixer_status);
|
| return;
|
|
|