| Index: media/filters/audio_renderer_impl.cc
|
| diff --git a/media/filters/audio_renderer_impl.cc b/media/filters/audio_renderer_impl.cc
|
| index fdfb45df916a5a1d3b376ceb9151b5b0c44d383a..fc5b7bf589af914cec7184837c8f763606d5d9b0 100644
|
| --- a/media/filters/audio_renderer_impl.cc
|
| +++ b/media/filters/audio_renderer_impl.cc
|
| @@ -399,8 +399,22 @@ bool AudioRendererImpl::HandleSplicerBuffer(
|
| if (state_ == kUnderflow || state_ == kRebuffering)
|
| ChangeState_Locked(kPlaying);
|
| } else {
|
| - if (state_ == kPrerolling && IsBeforePrerollTime(buffer))
|
| - return true;
|
| + if (state_ == kPrerolling) {
|
| + if (IsBeforePrerollTime(buffer))
|
| + return true;
|
| +
|
| + // Trim off any additional time before the preroll timestamp.
|
| + const base::TimeDelta trim_time =
|
| + preroll_timestamp_ - buffer->timestamp();
|
| + if (trim_time > base::TimeDelta()) {
|
| + buffer->TrimStart(buffer->frame_count() *
|
| + (static_cast<double>(trim_time.InMicroseconds()) /
|
| + buffer->duration().InMicroseconds()));
|
| + }
|
| + // If the entire buffer was trimmed, request a new one.
|
| + if (!buffer->frame_count())
|
| + return true;
|
| + }
|
|
|
| if (state_ != kUninitialized && state_ != kStopped)
|
| algorithm_->EnqueueBuffer(buffer);
|
|
|