On Sat, May 15, 2021 at 4:11 AM Gustav Grusell <gustav.grus...@gmail.com> wrote: > > Before, seeking in hls streams would always seek to the next keyframe after > the given timestamp. > With this fix, if AVSEEK_FLAG_BACKWARD is set, seeking will be to the first > keyframe of the > segment containing the given timestamp. This fixes #6850. > --- > libavformat/hls.c | 13 +++++++++---- > 1 file changed, 9 insertions(+), 4 deletions(-) > > diff --git a/libavformat/hls.c b/libavformat/hls.c > index 8fc6924c90..3f1fd2cb70 100644 > --- a/libavformat/hls.c > +++ b/libavformat/hls.c > @@ -2199,10 +2199,15 @@ static int hls_read_packet(AVFormatContext *s, > AVPacket *pkt) > > tb = get_timebase(pls); > ts_diff = av_rescale_rnd(pls->pkt->dts, AV_TIME_BASE, > - tb.den, AV_ROUND_DOWN) - > - pls->seek_timestamp; > - if (ts_diff >= 0 && (pls->seek_flags & AVSEEK_FLAG_ANY > || > - pls->pkt->flags & AV_PKT_FLAG_KEY)) { > + tb.den, AV_ROUND_DOWN) - > + pls->seek_timestamp; > + /* If AVSEEK_FLAG_BACKWARD set and not AVSEEK_FLAG_ANY, > + * we return the first keyframe encountered */ > + if ((pls->seek_flags & AVSEEK_FLAG_BACKWARD && > + !(pls->seek_flags & AVSEEK_FLAG_ANY) && > + pls->pkt->flags & AV_PKT_FLAG_KEY) || > + (ts_diff >= 0 && (pls->seek_flags & AVSEEK_FLAG_ANY > || > + pls->pkt->flags & > AV_PKT_FLAG_KEY))) { > pls->seek_timestamp = AV_NOPTS_VALUE; > break; > }
I think you can put your code above this line ( tb = get_timebase(pls). ) to avoid invalid code execution and keep the code aligned Regards, bevis _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".