| Index: media/filters/ffmpeg_demuxer.cc
|
| diff --git a/media/filters/ffmpeg_demuxer.cc b/media/filters/ffmpeg_demuxer.cc
|
| index c686aa9de4c933cbde609efbce9d3c2891c8e694..6a83079c7c6f061102918045144454b267849b1f 100644
|
| --- a/media/filters/ffmpeg_demuxer.cc
|
| +++ b/media/filters/ffmpeg_demuxer.cc
|
| @@ -514,6 +514,12 @@ void FFmpegDemuxerStream::EnqueuePacket(ScopedAVPacket packet) {
|
| return;
|
| }
|
|
|
| + if (is_audio && last_packet_timestamp_ != kNoTimestamp &&
|
| + buffer->timestamp() < last_packet_timestamp_) {
|
| + LOG(ERROR) << "Dropping: " << buffer->timestamp();
|
| + return;
|
| + }
|
| +
|
| // If enabled, and no codec delay is present, mark audio packets with negative
|
| // timestamps for post-decode discard. If codec delay is present, discard is
|
| // handled by the decoder using that value.
|
| @@ -1697,8 +1703,22 @@ void FFmpegDemuxer::OnSelectedVideoTrackChanged(
|
| }
|
| }
|
| if (selected_stream) {
|
| - DVLOG(1) << __func__ << ": enabling stream " << selected_stream;
|
| + LOG(ERROR) << __func__ << ": enabling stream " << selected_stream;
|
| selected_stream->set_enabled(true, curr_time);
|
| + selected_stream->FlushBuffers();
|
| +
|
| + base::TimeDelta seek_time =
|
| + start_time_ < base::TimeDelta()
|
| + ? curr_time + start_time_
|
| + : curr_time < start_time_ ? start_time_ : curr_time;
|
| + blocking_task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(base::IgnoreResult(&av_seek_frame), glue_->format_context(),
|
| + selected_stream->av_stream()->index,
|
| + ConvertToTimeBase(selected_stream->av_stream()->time_base,
|
| + seek_time),
|
| + // Always seek to a timestamp <= to the desired timestamp.
|
| + AVSEEK_FLAG_BACKWARD));
|
| }
|
| }
|
|
|
|
|