From dd6f8120b33038e44a78314f71ede1034e1a9f08 Mon Sep 17 00:00:00 2001 From: Richard Stanway Date: Mon, 25 Apr 2016 01:04:39 +0200 Subject: [PATCH] libff: Seek to frame 0 for sources with no duration --- deps/libff/libff/ff-demuxer.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/deps/libff/libff/ff-demuxer.c b/deps/libff/libff/ff-demuxer.c index b4d2e8b71..2feef7af5 100644 --- a/deps/libff/libff/ff-demuxer.c +++ b/deps/libff/libff/ff-demuxer.c @@ -502,7 +502,7 @@ static bool handle_seek(struct ff_demuxer *demuxer) seek_stream = demuxer->audio_decoder->stream; } - if (seek_stream != NULL) { + if (seek_stream != NULL && demuxer->format_context->duration != AV_NOPTS_VALUE) { seek_target = av_rescale_q(seek_target, AV_TIME_BASE_Q, seek_stream->time_base); @@ -531,8 +531,13 @@ static bool handle_seek(struct ff_demuxer *demuxer) static void seek_beginning(struct ff_demuxer *demuxer) { - demuxer->seek_flags = AVSEEK_FLAG_BACKWARD; - demuxer->seek_pos = demuxer->format_context->start_time; + if (demuxer->format_context->duration == AV_NOPTS_VALUE) { + demuxer->seek_flags = AVSEEK_FLAG_FRAME; + demuxer->seek_pos = 0; + } else { + demuxer->seek_flags = AVSEEK_FLAG_BACKWARD; + demuxer->seek_pos = demuxer->format_context->start_time; + } demuxer->seek_request = true; demuxer->seek_flush = false; av_log(NULL, AV_LOG_VERBOSE, "looping media %s", demuxer->input);