Chromium Code Reviews| Index: media/filters/source_buffer_stream.cc |
| diff --git a/media/filters/source_buffer_stream.cc b/media/filters/source_buffer_stream.cc |
| index 608253b2d87bc5fa38873fbc36a6a6b26f9d7203..a8b929add41bc8545928010358de8304589de3a3 100644 |
| --- a/media/filters/source_buffer_stream.cc |
| +++ b/media/filters/source_buffer_stream.cc |
| @@ -1105,6 +1105,18 @@ void SourceBufferStream::Seek(base::TimeDelta timestamp) { |
| if (itr == ranges_.end()) |
| return; |
| + if (!audio_configs_.empty()) { |
| + const auto& config = audio_configs_[(*itr)->GetConfigIdAtTime(seek_dts)]; |
| + if (config.codec() == kCodecOpus) { |
| + DecodeTimestamp preroll_dts = std::max(seek_dts - config.seek_preroll(), |
| + (*itr)->GetStartTimestamp()); |
| + if ((*itr)->CanSeekTo(preroll_dts) && |
|
chcunningham
2016/07/22 01:50:28
FYI: I've taken a conservative approach here. If w
wolenetz
2016/12/02 00:18:49
Acknowledged.
|
| + (*itr)->SameConfigThruRange(preroll_dts, seek_dts)) { |
| + seek_dts = preroll_dts; |
| + } |
| + } |
| + } |
| + |
| SeekAndSetSelectedRange(*itr, seek_dts); |
| seek_pending_ = false; |
| } |