OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/audio/audio_output_controller.h" | 5 #include "media/audio/audio_output_controller.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/synchronization/waitable_event.h" | 10 #include "base/synchronization/waitable_event.h" |
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
312 } | 312 } |
313 } | 313 } |
314 | 314 |
315 int frames = sync_reader_->Read(source, dest); | 315 int frames = sync_reader_->Read(source, dest); |
316 sync_reader_->UpdatePendingBytes( | 316 sync_reader_->UpdatePendingBytes( |
317 buffers_state.total_bytes() + frames * params_.GetBytesPerFrame()); | 317 buffers_state.total_bytes() + frames * params_.GetBytesPerFrame()); |
318 return frames; | 318 return frames; |
319 } | 319 } |
320 | 320 |
321 void AudioOutputController::WaitTillDataReady() { | 321 void AudioOutputController::WaitTillDataReady() { |
322 if (!sync_reader_->DataReady()) { | 322 while (!sync_reader_->DataReady()) |
scherkus (not reviewing)
2012/11/21 21:37:57
how about backing up your comments w/ something li
DaleCurtis
2012/11/21 22:42:10
We'll need OS_MAC in there too for now since the h
| |
323 // In the different place we use different mechanism to poll, get max | 323 base::PlatformThread::YieldCurrentThread(); |
Chris Rogers
2012/11/21 19:33:37
We should probably check that this while is not sp
scherkus (not reviewing)
2012/11/21 21:37:57
perhaps a CHECK()-timeout and monitor for any repo
DaleCurtis
2012/11/21 22:42:10
CHECK() worries me, I've added a 1.5 second timeou
| |
324 // polling delay from constants used there. | |
325 const base::TimeDelta kMaxPollingDelay = TimeDelta::FromMilliseconds( | |
326 kPollNumAttempts * kPollPauseInMilliseconds); | |
327 Time start_time = Time::Now(); | |
328 do { | |
329 base::PlatformThread::Sleep(TimeDelta::FromMilliseconds(1)); | |
330 } while (!sync_reader_->DataReady() && | |
331 Time::Now() - start_time < kMaxPollingDelay); | |
332 } | |
333 } | 324 } |
334 | 325 |
335 void AudioOutputController::OnError(AudioOutputStream* stream, int code) { | 326 void AudioOutputController::OnError(AudioOutputStream* stream, int code) { |
336 // Handle error on the audio controller thread. | 327 // Handle error on the audio controller thread. |
337 message_loop_->PostTask(FROM_HERE, base::Bind( | 328 message_loop_->PostTask(FROM_HERE, base::Bind( |
338 &AudioOutputController::DoReportError, this, code)); | 329 &AudioOutputController::DoReportError, this, code)); |
339 } | 330 } |
340 | 331 |
341 void AudioOutputController::DoStopCloseAndClearStream(WaitableEvent* done) { | 332 void AudioOutputController::DoStopCloseAndClearStream(WaitableEvent* done) { |
342 DCHECK(message_loop_->BelongsToCurrentThread()); | 333 DCHECK(message_loop_->BelongsToCurrentThread()); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
386 case kPausedWhenStarting: | 377 case kPausedWhenStarting: |
387 case kPaused: | 378 case kPaused: |
388 // From the outside these three states are equivalent. | 379 // From the outside these three states are equivalent. |
389 return; | 380 return; |
390 default: | 381 default: |
391 NOTREACHED() << "Invalid original state."; | 382 NOTREACHED() << "Invalid original state."; |
392 } | 383 } |
393 } | 384 } |
394 | 385 |
395 } // namespace media | 386 } // namespace media |
OLD | NEW |