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

Unified Diff: media/audio/audio_manager_base.cc

Issue 61203008: Attempt to fix audio wedges by restarting all streams. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix mock. Created 7 years 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 | « media/audio/audio_manager_base.h ('k') | media/audio/audio_output_controller.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/audio_manager_base.cc
diff --git a/media/audio/audio_manager_base.cc b/media/audio/audio_manager_base.cc
index 52d545ea3f0b0d5b0513b711d8a0eb4e24a927af..fc6574c1ef857e8aaee4ce78b325188ad2e17bbf 100644
--- a/media/audio/audio_manager_base.cc
+++ b/media/audio/audio_manager_base.cc
@@ -418,4 +418,32 @@ int AudioManagerBase::GetUserBufferSize() {
return 0;
}
+void AudioManagerBase::FixWedgedAudio() {
+ DCHECK(message_loop_->BelongsToCurrentThread());
+#if defined(OS_MACOSX)
+ // Through trial and error, we've found that one way to restore audio after a
+ // hang is to close all outstanding audio streams. Once all streams have been
+ // closed, new streams appear to work correctly.
+ //
+ // In Chrome terms, this means we need to ask all AudioOutputDispatchers to
+ // close all Open()'d streams. Once all streams across all dispatchers have
+ // been closed, we ask for all previously Start()'d streams to be recreated
+ // using the same AudioSourceCallback they had before.
+ //
+ // Since this operation takes place on the audio thread we can be sure that no
+ // other state-changing stream operations will take place while the fix is in
+ // progress.
+ //
+ // See http://crbug.com/160920 for additional details.
+ for (AudioOutputDispatchers::iterator it = output_dispatchers_.begin();
+ it != output_dispatchers_.end(); ++it) {
+ (*it)->dispatcher->CloseStreamsForWedgeFix();
+ }
+ for (AudioOutputDispatchers::iterator it = output_dispatchers_.begin();
+ it != output_dispatchers_.end(); ++it) {
+ (*it)->dispatcher->RestartStreamsForWedgeFix();
+ }
+#endif
+}
+
} // namespace media
« no previous file with comments | « media/audio/audio_manager_base.h ('k') | media/audio/audio_output_controller.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698