diff options
author | enal@chromium.org <enal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-14 21:19:18 +0000 |
---|---|---|
committer | enal@chromium.org <enal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-14 21:19:18 +0000 |
commit | 3a4294a044b1f4f587243d398f64bb93e2864ec5 (patch) | |
tree | 332c9592c6dd88fd737d21c32981b5b684dba120 /media/audio/audio_output_controller.cc | |
parent | c88217162034acbee26563db5f0ecbab15085cb0 (diff) | |
download | chromium_src-3a4294a044b1f4f587243d398f64bb93e2864ec5.zip chromium_src-3a4294a044b1f4f587243d398f64bb93e2864ec5.tar.gz chromium_src-3a4294a044b1f4f587243d398f64bb93e2864ec5.tar.bz2 |
Change the way we are stopping audio stream on Mac.
We are seeing countless problems when restarting or closing audio
stream, and suspect it is caused by wrong use of Mac OS X API.
Do it exactly as done in Apple's Mac core audio sample --
Stop() does not stop the stream itelf, but instead waits for audio
callback to stop and signal that stream is stopped.
BUG=102395
TEST=No observable diffs, but crashes and seek problems should go away.
Review URL: https://chromiumcodereview.appspot.com/10545160
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@142235 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/audio/audio_output_controller.cc')
-rw-r--r-- | media/audio/audio_output_controller.cc | 28 |
1 files changed, 1 insertions, 27 deletions
diff --git a/media/audio/audio_output_controller.cc b/media/audio/audio_output_controller.cc index 70f7a1c..60dd285 100644 --- a/media/audio/audio_output_controller.cc +++ b/media/audio/audio_output_controller.cc @@ -16,10 +16,6 @@ using base::Time; using base::TimeDelta; using base::WaitableEvent; -// Workaround for crbug.com/128128. -// Minimal delay between stream->Stop() and stream->Start(). -const int kMacWorkaroundInMilliseconds = 50; - namespace media { // Signal a pause in low-latency mode. @@ -38,10 +34,7 @@ AudioOutputController::AudioOutputController(EventHandler* handler, sync_reader_(sync_reader), message_loop_(NULL), number_polling_attempts_left_(0), - ALLOW_THIS_IN_INITIALIZER_LIST(weak_this_(this)), - previous_stop_time_( - Time::Now() - - TimeDelta::FromMilliseconds(kMacWorkaroundInMilliseconds + 1)) { + ALLOW_THIS_IN_INITIALIZER_LIST(weak_this_(this)) { } AudioOutputController::~AudioOutputController() { @@ -209,24 +202,6 @@ void AudioOutputController::PollAndStartIfDataReady() { void AudioOutputController::StartStream() { DCHECK(message_loop_->BelongsToCurrentThread()); - -#if defined(OS_MACOSX) - // HACK: workaround for crbug.com/128128. - // Mac OS crashes if we start playback too soon after previous ended. - // Audio mixer contains better fix, it keeps physical stream opened for - // some time after logical one is closed, so sequence of play / pause / play / - // pause / ... would reuse the same stream, but we need fix for M20. - // TODO(enal): Remove after turning on mixer by default. - int milliseconds_since_stop = - (Time::Now() - previous_stop_time_).InMilliseconds(); - if ((milliseconds_since_stop >= 0) && - (milliseconds_since_stop < kMacWorkaroundInMilliseconds)) { - base::PlatformThread::Sleep( - TimeDelta::FromMilliseconds(kMacWorkaroundInMilliseconds - - milliseconds_since_stop)); - } -#endif - state_ = kPlaying; // We start the AudioOutputStream lazily. @@ -244,7 +219,6 @@ void AudioOutputController::DoPause() { // because it discards all the internal buffer in the audio device. // TODO(hclam): Actually pause the audio device. stream_->Stop(); - previous_stop_time_ = Time::Now(); } switch (state_) { |