Index: media/audio/audio_output_resampler.cc |
diff --git a/media/audio/audio_output_resampler.cc b/media/audio/audio_output_resampler.cc |
index 86b40dda55fe2a1b1ebcacc2b0d6dad229c8c07a..3179ddbc6efbb9106fb75de45d355511fcc04e03 100644 |
--- a/media/audio/audio_output_resampler.cc |
+++ b/media/audio/audio_output_resampler.cc |
@@ -291,6 +291,30 @@ void AudioOutputResampler::Shutdown() { |
DCHECK(callbacks_.empty()); |
} |
+void AudioOutputResampler::CloseStreamsForWedgeFix() { |
+ DCHECK(message_loop_->BelongsToCurrentThread()); |
+ |
+ // Stop and close all active streams. Once all streams across all dispatchers |
+ // have been closed the AudioManager will call RestartStreamsForWedgeFix(). |
+ for (CallbackMap::iterator it = callbacks_.begin(); it != callbacks_.end(); |
+ ++it) { |
+ dispatcher_->StopStream(it->first); |
+ dispatcher_->CloseStream(it->first); |
+ } |
+ |
+ // Close all idle streams as well. |
+ dispatcher_->CloseStreamsForWedgeFix(); |
+} |
+ |
+void AudioOutputResampler::RestartStreamsForWedgeFix() { |
+ DCHECK(message_loop_->BelongsToCurrentThread()); |
+ for (CallbackMap::iterator it = callbacks_.begin(); it != callbacks_.end(); |
+ ++it) { |
+ dispatcher_->OpenStream(); |
+ dispatcher_->StartStream(it->second, it->first); |
+ } |
+} |
+ |
OnMoreDataConverter::OnMoreDataConverter(const AudioParameters& input_params, |
const AudioParameters& output_params) |
: io_ratio_(static_cast<double>(input_params.GetBytesPerSecond()) / |