Index: media/filters/source_buffer_stream.cc |
diff --git a/media/filters/source_buffer_stream.cc b/media/filters/source_buffer_stream.cc |
index 82fe81f1f26b327420c16937386caab7fbfeec4e..fe3dbfea4fca61cd406a420363b5ea62b194e62b 100644 |
--- a/media/filters/source_buffer_stream.cc |
+++ b/media/filters/source_buffer_stream.cc |
@@ -1229,6 +1229,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) && |
+ (*itr)->SameConfigThruRange(preroll_dts, seek_dts)) { |
+ seek_dts = preroll_dts; |
+ } |
+ } |
+ } |
+ |
SeekAndSetSelectedRange(*itr, seek_dts); |
seek_pending_ = false; |
} |