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); |