summaryrefslogtreecommitdiffstats
path: root/media/audio/audio_output_controller.cc
diff options
context:
space:
mode:
Diffstat (limited to 'media/audio/audio_output_controller.cc')
-rw-r--r--media/audio/audio_output_controller.cc17
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(