This is an automated email from the git hooks/post-receive script. Git pushed a commit to branch master in repository ffmpeg.
commit caa3fa6af070c1eeee59da027fdcde326fc64a89 Author: Kacper Michajłow <[email protected]> AuthorDate: Wed Jun 17 03:03:44 2026 +0200 Commit: Kacper Michajłow <[email protected]> CommitDate: Tue Jun 23 20:40:28 2026 +0200 avformat/hls: fix seeking to before the first timestamp find_timestamp_in_playlist() already selects the first segment when the target is below the playlist's first timestamp, but returns 0. hls_read_seek() treats that as a failure, and all seek operation is failed. This breaks seeking to the very start whenever the requested timestamp is slightly below the first one. Clamp such targets to the first segment and report success instead. Fixes: https://github.com/mpv-player/mpv/issues/14840#issuecomment-4703186169 Signed-off-by: Kacper Michajłow <[email protected]> --- libavformat/hls.c | 5 ++++- tests/ref/seek/hls | 33 ++++++++++++++++++++++----------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/libavformat/hls.c b/libavformat/hls.c index 8788deee7d..ea58a6d2f6 100644 --- a/libavformat/hls.c +++ b/libavformat/hls.c @@ -2019,8 +2019,11 @@ static int find_timestamp_in_playlist(HLSContext *c, struct playlist *pls, 0 : c->first_timestamp; if (timestamp < pos) { + /* Seeking before the start of the playlist, clamp to the first segment. */ *seq_no = pls->start_seq_no; - return 0; + if (seg_start_ts) + *seg_start_ts = pos; + return 1; } for (i = 0; i < pls->n_segments; i++) { diff --git a/tests/ref/seek/hls b/tests/ref/seek/hls index 5b23cf6f96..a9b3badaf8 100644 --- a/tests/ref/seek/hls +++ b/tests/ref/seek/hls @@ -1,7 +1,10 @@ ret: 0 st: 1 flags:1 dts: 1.400000 pts: 1.500000 pos: 564 size: 3913 -ret:-1 st:-1 flags:0 ts:-1.000000 -ret:-1 st:-1 flags:1 ts:-0.105833 -ret:-1 st: 0 flags:0 ts: 0.788333 +ret: 0 st:-1 flags:0 ts:-1.000000 +ret: 0 st: 1 flags:1 dts: 1.400000 pts: 1.500000 pos: 564 size: 3913 +ret: 0 st:-1 flags:1 ts:-0.105833 +ret: 0 st: 0 flags:1 dts: 1.515211 pts: 1.515211 pos: -1 size: 1254 +ret: 0 st: 0 flags:0 ts: 0.788333 +ret: 0 st: 1 flags:1 dts: 1.400000 pts: 1.500000 pos: 564 size: 3913 ret: 0 st: 0 flags:1 ts: 1.682500 ret: 0 st: 0 flags:1 dts: 1.698078 pts: 1.698078 pos: 11092 size: 1253 ret: 0 st: 1 flags:0 ts: 2.576667 @@ -10,9 +13,12 @@ ret: 0 st: 1 flags:1 ts: 3.470833 ret: 0 st: 0 flags:1 dts: 1.515211 pts: 1.515211 pos: -1 size: 1254 ret: 0 st:-1 flags:0 ts: 4.365002 ret: 0 st: 0 flags:1 dts: 4.388689 pts: 4.388689 pos: 45308 size: 1254 -ret:-1 st:-1 flags:1 ts:-0.740831 -ret:-1 st: 0 flags:0 ts: 0.153333 -ret:-1 st: 0 flags:1 ts: 1.047500 +ret: 0 st:-1 flags:1 ts:-0.740831 +ret: 0 st: 0 flags:1 dts: 1.515211 pts: 1.515211 pos: -1 size: 1254 +ret: 0 st: 0 flags:0 ts: 0.153333 +ret: 0 st: 1 flags:1 dts: 1.400000 pts: 1.500000 pos: 564 size: 3913 +ret: 0 st: 0 flags:1 ts: 1.047500 +ret: 0 st: 1 flags:1 dts: 1.400000 pts: 1.500000 pos: 564 size: 3913 ret: 0 st: 1 flags:0 ts: 1.941667 ret: 0 st: 0 flags:1 dts: 1.959300 pts: 1.959300 pos: 24252 size: 1254 ret: 0 st: 1 flags:1 ts: 2.835833 @@ -21,9 +27,12 @@ ret: 0 st:-1 flags:0 ts: 3.730004 ret: 0 st: 0 flags:1 dts: 3.735622 pts: 3.735622 pos: -1 size: 1254 ret: 0 st:-1 flags:1 ts: 4.624171 ret: 0 st: 0 flags:1 dts: 4.493178 pts: 4.493178 pos: 50572 size: 1254 -ret:-1 st: 0 flags:0 ts:-0.481667 -ret:-1 st: 0 flags:1 ts: 0.412500 -ret:-1 st: 1 flags:0 ts: 1.306667 +ret: 0 st: 0 flags:0 ts:-0.481667 +ret: 0 st: 1 flags:1 dts: 1.400000 pts: 1.500000 pos: 564 size: 3913 +ret: 0 st: 0 flags:1 ts: 0.412500 +ret: 0 st: 1 flags:1 dts: 1.400000 pts: 1.500000 pos: 564 size: 3913 +ret: 0 st: 1 flags:0 ts: 1.306667 +ret: 0 st: 1 flags:1 dts: 1.400000 pts: 1.500000 pos: 564 size: 3913 ret: 0 st: 1 flags:1 ts: 2.200844 ret: 0 st: 0 flags:1 dts: 1.515211 pts: 1.515211 pos: -1 size: 1254 ret: 0 st:-1 flags:0 ts: 3.095006 @@ -32,8 +41,10 @@ ret: 0 st:-1 flags:1 ts: 3.989173 ret: 0 st: 0 flags:1 dts: 1.515211 pts: 1.515211 pos: -1 size: 1254 ret: 0 st: 0 flags:0 ts: 4.883344 ret: 0 st: 0 flags:1 dts: 4.885011 pts: 4.885011 pos: -1 size: 1253 -ret:-1 st: 0 flags:1 ts:-0.222489 -ret:-1 st: 1 flags:0 ts: 0.671678 +ret: 0 st: 0 flags:1 ts:-0.222489 +ret: 0 st: 1 flags:1 dts: 1.400000 pts: 1.500000 pos: 564 size: 3913 +ret: 0 st: 1 flags:0 ts: 0.671678 +ret: 0 st: 1 flags:1 dts: 1.400000 pts: 1.500000 pos: 564 size: 3913 ret: 0 st: 1 flags:1 ts: 1.565844 ret: 0 st: 0 flags:1 dts: 1.515211 pts: 1.515211 pos: -1 size: 1254 ret: 0 st:-1 flags:0 ts: 2.460008 _______________________________________________ ffmpeg-cvslog mailing list -- [email protected] To unsubscribe send an email to [email protected]
