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; |
} |