Chromium Code Reviews| Index: media/audio/audio_output_stream_sink.cc |
| diff --git a/media/audio/audio_output_stream_sink.cc b/media/audio/audio_output_stream_sink.cc |
| index b94e2d265847d33f2a93cab9dc3e8a90a7cbd140..0a107e94bd3314325e266044619441ef9cd0ea29 100644 |
| --- a/media/audio/audio_output_stream_sink.cc |
| +++ b/media/audio/audio_output_stream_sink.cc |
| @@ -4,6 +4,7 @@ |
| #include "media/audio/audio_output_stream_sink.h" |
| +#include <algorithm> |
| #include <cmath> |
| #include "base/bind.h" |
| @@ -82,18 +83,20 @@ bool AudioOutputStreamSink::CurrentThreadIsRenderingThread() { |
| return false; |
| } |
| -int AudioOutputStreamSink::OnMoreData(AudioBus* dest, |
| - uint32_t total_bytes_delay, |
| - uint32_t frames_skipped) { |
| +int AudioOutputStreamSink::OnMoreData(base::TimeTicks target_playout_time, |
| + int prior_frames_skipped, |
| + AudioBus* dest) { |
| // Note: Runs on the audio thread created by the OS. |
| base::AutoLock al(callback_lock_); |
| if (!active_render_callback_) |
| return 0; |
| - uint32_t frames_delayed = std::round(static_cast<double>(total_bytes_delay) / |
| - active_params_.GetBytesPerFrame()); |
| + base::TimeDelta delay = |
| + std::max(target_playout_time - base::TimeTicks::Now(), base::TimeDelta()); |
| + uint32_t frames_delayed = delay.InSeconds() * active_params_.sample_rate(); |
|
miu
2016/08/31 23:26:54
s/InSeconds/InSecondsF/ to prevent serious loss of
James West
2016/09/13 07:40:50
Done.
|
| - return active_render_callback_->Render(dest, frames_delayed, frames_skipped); |
| + return active_render_callback_->Render(dest, frames_delayed, |
| + prior_frames_skipped); |
| } |
| void AudioOutputStreamSink::OnError(AudioOutputStream* stream) { |
| @@ -154,4 +157,4 @@ void AudioOutputStreamSink::ClearCallback() { |
| active_render_callback_ = NULL; |
| } |
| -} // namepace media |
| +} // namespace media |