| Index: media/filters/audio_clock.cc
|
| diff --git a/media/filters/audio_clock.cc b/media/filters/audio_clock.cc
|
| index 0454e85e8f50d5466dec831e93f19e82b5bd33c4..e315fa31e2d7084218136c5266461fa23ec92f90 100644
|
| --- a/media/filters/audio_clock.cc
|
| +++ b/media/filters/audio_clock.cc
|
| @@ -45,20 +45,32 @@ void AudioClock::WroteSilence(int frames, int delay_frames) {
|
| PushBufferedAudio(frames, 0, kNoTimestamp());
|
| }
|
|
|
| -base::TimeDelta AudioClock::CurrentMediaTimestamp() const {
|
| +base::TimeDelta AudioClock::CurrentMediaTimestamp(
|
| + base::TimeDelta time_since_writing) const {
|
| + int frames_to_skip =
|
| + static_cast<int>(time_since_writing.InSecondsF() * sample_rate_);
|
| int silence_frames = 0;
|
| for (size_t i = 0; i < buffered_audio_.size(); ++i) {
|
| + int frames = buffered_audio_[i].frames;
|
| + if (frames_to_skip > 0) {
|
| + if (frames <= frames_to_skip) {
|
| + frames_to_skip -= frames;
|
| + continue;
|
| + }
|
| + frames -= frames_to_skip;
|
| + frames_to_skip = 0;
|
| + }
|
| +
|
| // Account for silence ahead of the buffer closest to being played.
|
| if (buffered_audio_[i].playback_rate == 0) {
|
| - silence_frames += buffered_audio_[i].frames;
|
| + silence_frames += frames;
|
| continue;
|
| }
|
|
|
| // Multiply by playback rate as frames represent time-scaled audio.
|
| return buffered_audio_[i].endpoint_timestamp -
|
| base::TimeDelta::FromMicroseconds(
|
| - ((buffered_audio_[i].frames * buffered_audio_[i].playback_rate) +
|
| - silence_frames) /
|
| + ((frames * buffered_audio_[i].playback_rate) + silence_frames) /
|
| sample_rate_ * base::Time::kMicrosecondsPerSecond);
|
| }
|
|
|
|
|