diff options
Diffstat (limited to 'media/audio/audio_output_controller.cc')
-rw-r--r-- | media/audio/audio_output_controller.cc | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/media/audio/audio_output_controller.cc b/media/audio/audio_output_controller.cc index adad10a..b83aa61 100644 --- a/media/audio/audio_output_controller.cc +++ b/media/audio/audio_output_controller.cc @@ -7,6 +7,10 @@ #include "base/bind.h" #include "base/debug/trace_event.h" #include "base/message_loop.h" +#include "base/threading/platform_thread.h" +#include "base/time.h" + +using base::Time; namespace media { @@ -359,6 +363,19 @@ uint32 AudioOutputController::OnMoreData( return size; } +void AudioOutputController::WaitTillDataReady() { + if (LowLatencyMode() && !sync_reader_->DataReady()) { + // In the different place we use different mechanism to poll, get max + // polling delay from constants used there. + const int kMaxPollingDelayMs = kPollNumAttempts * kPollPauseInMilliseconds; + Time start_time = Time::Now(); + do { + base::PlatformThread::Sleep(1); + } while (!sync_reader_->DataReady() && + (Time::Now() - start_time).InMilliseconds() < kMaxPollingDelayMs); + } +} + void AudioOutputController::OnError(AudioOutputStream* stream, int code) { // Handle error on the audio controller thread. message_loop_->PostTask(FROM_HERE, base::Bind( |