Chromium Code Reviews| Index: media/audio/audio_output_controller.cc |
| diff --git a/media/audio/audio_output_controller.cc b/media/audio/audio_output_controller.cc |
| index 8aa2b4f38acfdfa989986ab5f4b035c3f1627bc9..9ddafe4a78d46bb66156240ceb74599f0dbaedcb 100644 |
| --- a/media/audio/audio_output_controller.cc |
| +++ b/media/audio/audio_output_controller.cc |
| @@ -36,7 +36,8 @@ AudioOutputController::AudioOutputController( |
| params.sample_rate(), |
| TimeDelta::FromMilliseconds(kPowerMeasurementTimeConstantMillis)), |
| on_more_io_data_called_(0), |
| - ignore_errors_during_stop_close_(false) { |
| + ignore_errors_during_stop_close_(false), |
| + frames_skipped_(0) { |
| DCHECK(audio_manager); |
| DCHECK(handler_); |
| DCHECK(sync_reader_); |
| @@ -160,7 +161,7 @@ void AudioOutputController::DoPlay() { |
| return; |
| // Ask for first packet. |
| - sync_reader_->UpdatePendingBytes(0); |
| + sync_reader_->UpdatePendingBytes(0, 0); |
| state_ = kPlaying; |
| @@ -213,7 +214,7 @@ void AudioOutputController::DoPause() { |
| // Let the renderer know we've stopped. Necessary to let PPAPI clients know |
| // audio has been shutdown. TODO(dalecurtis): This stinks. PPAPI should have |
| // a better way to know when it should exit PPB_Audio_Shared::Run(). |
| - sync_reader_->UpdatePendingBytes(kuint32max); |
| + sync_reader_->UpdatePendingBytes(kuint32max, 0); |
| handler_->OnPaused(); |
| } |
| @@ -293,8 +294,11 @@ int AudioOutputController::OnMoreData(AudioBus* dest, |
| sync_reader_->Read(dest); |
| const int frames = dest->frames(); |
| - sync_reader_->UpdatePendingBytes(base::saturated_cast<uint32>( |
| - total_bytes_delay + frames * params_.GetBytesPerFrame())); |
| + sync_reader_->UpdatePendingBytes( |
| + base::saturated_cast<uint32>(total_bytes_delay + |
|
tommi (sloooow) - chröme
2015/12/01 13:34:25
this saturated cast looks like a hack. :-/
Can we
Henrik Grunell
2015/12/03 17:01:07
Agree, I don't know why we would fear it overflowi
|
| + frames * params_.GetBytesPerFrame()), |
| + frames_skipped_); |
| + frames_skipped_ = 0; |
| if (will_monitor_audio_levels()) |
| power_monitor_.Scan(*dest, frames); |
| @@ -302,6 +306,12 @@ int AudioOutputController::OnMoreData(AudioBus* dest, |
| return frames; |
| } |
| +void AudioOutputController::OnSkippedData(uint32 frames_skipped) { |
|
tommi (sloooow) - chröme
2015/12/01 13:34:25
thread check
Henrik Grunell
2015/12/03 17:01:06
Done.
|
| + // Store the number of skipped frames, will be passed to the provider in |
| + // OnMoreData(). |
| + frames_skipped_ += frames_skipped; |
| +} |
| + |
| void AudioOutputController::OnError(AudioOutputStream* stream) { |
| { |
| base::AutoLock auto_lock(error_lock_); |