Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(157)

Unified Diff: media/filters/ffmpeg_demuxer.cc

Issue 2808833005: Seek for video track changes on FFmpegDemuxer.
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/blink/webmediaplayer_impl.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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));
}
}
« no previous file with comments | « media/blink/webmediaplayer_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698