| Index: media/filters/audio_renderer_base.cc
|
| diff --git a/media/filters/audio_renderer_base.cc b/media/filters/audio_renderer_base.cc
|
| index f3f9294c9bb12f52d8968e3831cdc2766bf57770..c0690e8333841d4c0790b8d8a4a0438334306c1e 100644
|
| --- a/media/filters/audio_renderer_base.cc
|
| +++ b/media/filters/audio_renderer_base.cc
|
| @@ -67,6 +67,7 @@ void AudioRendererBase::Seek(base::TimeDelta time, FilterCallback* callback) {
|
| DCHECK_EQ(0u, pending_reads_) << "Pending reads should have completed";
|
| state_ = kSeeking;
|
| seek_callback_.reset(callback);
|
| + seek_timestamp_ = time;
|
|
|
| // Throw away everything and schedule our reads.
|
| last_fill_buffer_time_ = base::TimeDelta();
|
| @@ -147,9 +148,14 @@ void AudioRendererBase::OnFillBufferDone(scoped_refptr<Buffer> buffer_in) {
|
| return;
|
| }
|
|
|
| - // Don't enqueue an end-of-stream buffer because it has no data.
|
| + // Don't enqueue an end-of-stream buffer because it has no data, otherwise
|
| + // discard decoded audio data until we reach our desired seek timestamp.
|
| if (buffer_in->IsEndOfStream()) {
|
| recieved_end_of_stream_ = true;
|
| + } else if (state_ == kSeeking && !buffer_in->IsEndOfStream() &&
|
| + (buffer_in->GetTimestamp() + buffer_in->GetDuration()) <
|
| + seek_timestamp_) {
|
| + ScheduleRead_Locked();
|
| } else {
|
| // Note: Calling this may schedule more reads.
|
| algorithm_->EnqueueBuffer(buffer_in);
|
|
|