| 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 5bd9f664413d8e4fb3fb581604fa44075f1e46d9..b28c2a3930be6f0ac9ae334ddc2e6ddb0d30178c 100644
|
| --- a/media/base/audio_renderer_mixer_input.cc
|
| +++ b/media/base/audio_renderer_mixer_input.cc
|
| @@ -127,28 +127,39 @@ void AudioRendererMixerInput::SwitchOutputDevice(
|
| return;
|
| }
|
|
|
| - OutputDeviceStatus new_mixer_status = OUTPUT_DEVICE_STATUS_ERROR_INTERNAL;
|
| - AudioRendererMixer* new_mixer =
|
| - mixer_pool_->GetMixer(owner_id_, params_, latency_, device_id,
|
| - security_origin, &new_mixer_status);
|
| - if (new_mixer_status != OUTPUT_DEVICE_STATUS_OK) {
|
| - callback.Run(new_mixer_status);
|
| - return;
|
| - }
|
| -
|
| - device_id_ = device_id;
|
| - security_origin_ = security_origin;
|
| -
|
| if (mixer_) {
|
| + OutputDeviceStatus new_mixer_status = OUTPUT_DEVICE_STATUS_ERROR_INTERNAL;
|
| + AudioRendererMixer* new_mixer =
|
| + mixer_pool_->GetMixer(owner_id_, params_, latency_, device_id,
|
| + security_origin, &new_mixer_status);
|
| + if (new_mixer_status != OUTPUT_DEVICE_STATUS_OK) {
|
| + callback.Run(new_mixer_status);
|
| + return;
|
| + }
|
| +
|
| bool was_playing = playing_;
|
| Stop();
|
| + device_id_ = device_id;
|
| + security_origin_ = security_origin;
|
| mixer_ = new_mixer;
|
| mixer_->AddErrorCallback(error_cb_);
|
| started_ = true;
|
| +
|
| if (was_playing)
|
| Play();
|
| +
|
| } else {
|
| - mixer_pool_->ReturnMixer(new_mixer);
|
| + OutputDeviceStatus new_mixer_status =
|
| + mixer_pool_
|
| + ->GetOutputDeviceInfo(owner_id_, 0 /* session_id */, device_id,
|
| + security_origin)
|
| + .device_status();
|
| + if (new_mixer_status != OUTPUT_DEVICE_STATUS_OK) {
|
| + callback.Run(new_mixer_status);
|
| + return;
|
| + }
|
| + device_id_ = device_id;
|
| + security_origin_ = security_origin;
|
| }
|
|
|
| callback.Run(OUTPUT_DEVICE_STATUS_OK);
|
|
|