Index: media/filters/audio_renderer_algorithm.cc |
diff --git a/media/filters/audio_renderer_algorithm.cc b/media/filters/audio_renderer_algorithm.cc |
index df2e53697a22a7a847405ef902b9c1aebda5063a..ebe334a0f1a0c76c1063ed1c79512cc36fd4c6bb 100644 |
--- a/media/filters/audio_renderer_algorithm.cc |
+++ b/media/filters/audio_renderer_algorithm.cc |
@@ -146,6 +146,7 @@ int AudioRendererAlgorithm::FillBuffer(AudioBus* dest, |
if (playback_rate == 0) |
return 0; |
+ DCHECK_GT(playback_rate, 0); |
DCHECK_EQ(channels_, dest->channels()); |
// Optimize the muted case to issue a single clear instead of performing |
@@ -160,7 +161,10 @@ int AudioRendererAlgorithm::FillBuffer(AudioBus* dest, |
// only skip over complete frames, so a partial frame may remain for next |
// time. |
muted_partial_frame_ += frames_to_render * playback_rate; |
- int seek_frames = static_cast<int>(muted_partial_frame_); |
+ // Handle the case where muted_partial_frame_ rounds up to |
+ // audio_buffer_.frames()+1. |
+ int seek_frames = std::min(static_cast<int>(muted_partial_frame_), |
+ audio_buffer_.frames()); |
dest->ZeroFramesPartial(dest_offset, frames_to_render); |
audio_buffer_.SeekFrames(seek_frames); |