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

Unified Diff: media/base/audio_renderer_mixer_input.cc

Issue 2389783002: Make AudioRendererMixerInput::SwitchOutputDevice to work correctly even if it has not been initiali… (Closed)
Patch Set: Created 4 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
« no previous file with comments | « no previous file | media/base/audio_renderer_mixer_input_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « no previous file | media/base/audio_renderer_mixer_input_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698