[vlc-devel] [PATCH] es_out: scale preroll clock-origin compensation by the playback rate

Steve Lhomme robux4 at ycbcr.xyz
Wed Jul 8 04:28:22 UTC 2026


Hello Ismail,

If you have an account on code.videolan.org you should submit your patch 
as a merge request there, with these explanations. We do not accept 
patches through the mailing list anymore.

Thanks in avdance.

On 08/07/2026 01:26, Ismail Degani wrote:
> Hi devs,
> 
> Submitting my first vlc patch for an issue I've had for years (reported 
> 7 years ago! #21890) which Claude gave me the superpowers to finally fix =)
> 
> If you slow a video down — say to 0.25x — and then seek, VLC freezes at 
> the target position for a long time before playback resumes: several 
> seconds with short-GOP files, and 30 seconds or more with the 5-10 
> second GOPs typical of phone recordings and web video. The slower the 
> rate, the longer the freeze.
> 
> What happens: after a precise seek, the demuxer restarts at the previous 
> keyframe, and EsOutDecodersStopBuffering() rebases the clock origin by 
> subtracting i_buffering_duration — a stream-time quantity — from a 
> system-time date, without scaling by the playback rate. Timestamp 
> conversion then stretches the keyframe-to-target preroll by 1/rate, so 
> playback stalls for exactly preroll * (1/rate - 1). The pts_delay part 
> of that compensation is fine as-is (the input clock already compensates 
> it on every conversion via ClockGetTsOffset(), which is also why caching 
> settings don't affect the stall), so the fix scales only the preroll 
> term. At 1.0x the added term is zero and nothing changes; at rates above 
> 1x the same math currently makes the first post-seek frames late by the 
> mirrored amount, which this also fixes.
> 
> A note on the filing of #21890: it is labeled Demux: Adaptive because it 
> was reported against an HLS stream in 2019, but the stall reproduces on 
> a plain local mp4 — the root cause is in core es_out/clock code, not the 
> adaptive demuxer. That mislabeling may be part of why it has sat unfixed 
> for so long. The same defect is behind the slow-motion seek freezes 
> reported against VLC-Android.
> 
> Measured with a headless libvlc driver polling media_player_get_time() 
> every 250 ms around a seek to 60s (local mp4, 1.67 s preroll, file- 
> caching 1000; "stall" = wall time until the reported time advanced 200 
> ms past the target):
> 
> master (8115e53): unpatched patched
> 1.0x 1.75 s 1.75 s (unchanged)
> 2.0x 1.50 s 1.50 s (unchanged)
> 0.25x 6.25 s 2.25 s
> 0.1x 18.0 s 2.5 s
> 
> The patched residual at slow rates is the measurement floor itself: 
> advancing 200 ms of stream time takes 0.8 s / 2 s of wall time at 
> 0.25x / 0.1x. The same fix was also verified on the 3.0.x branch with a 
> rebuilt libvlccore 3.0.20: the 0.25x stall dropped from ~5-6 s to under 
> 1 s, and 0.1x from ~15-17 s to under 2 s. A formatted 3.0.x backport is 
> ready — happy to send it as a follow-up patch or open a [3.0] merge request.
> 
> Quick repro: generate a two-minute test clip with "ffmpeg -f lavfi -i 
> testsrc2=duration=120:size=640x360:rate=30 -f lavfi -i 
> sine=frequency=440:duration=120 -c:v libx264 -preset ultrafast -c:a aac 
> test120.mp4", play it, set rate 0.25, seek to ~60s. Running with -- 
> input-fast-seek avoids the stall entirely (keyframe seeks have no 
> preroll), which isolates the preroll term.
> 
> The patch is attached (git format-patch against master 8115e53) rather 
> than inline because this message is sent through a mailer that can't 
> guarantee inline whitespace survives; the full commit message and 
> measurements are inside it, and I can resend inline via git send-email 
> if that's preferred.
> 
> Two disclosures: I prepared and validated this with AI assistance (noted 
> in a Co-authored-by trailer), and I have reviewed the change and the 
> measurements myself. I also have a https://www.google.com/url?q=http:// 
> code.videolan.org&source=gmail&ust=1783552830165000&sa=E <https:// 
> www.google.com/url?q=http:// 
> code.videolan.org&source=gmail&ust=1783552830165000&sa=E> account 
> pending administrator approval — if a merge request is more convenient 
> for review, I'd gladly resubmit there once it's approved.
> 
> Thanks!
> Ismail
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel



More information about the vlc-devel mailing list