Skip to content

utils/frame_queue: add PTS drift compensation

Niklas Haas requested to merge haasn/libplacebo:pl_queue_drift into master

By default, allows for correcting drift/jitter of up to 1 ms per frame, in line with expected jitter from e.g. Matroska sources. This is enough to cover the mismatch between 23.976 Hz and 24.000 Hz, but not the mismatch between 24 and 25 Hz (which is just over 1ms per frame).

There are two use cases in which this code will be useful:

  1. Displaying 23.976 Hz video files on e.g. 60.000 Hz monitor (or any other near-miss), in display-timed mode. Given the usual 3:2 cadence, after five vsyncs (three source frames), we will have:

    Vsync (wallclock) PTS = 83.33333333333334 Frame PTS = 83.41675008341676

    This is a difference of 0.1ms, and will therefore be fixed by this code, adjusting all future wallclock PTS up by the cumulative drift (0.1ms).

  2. Displaying any video with some amount of jitter on the PTS measurements. This avoids some situation where we have frames with weights 0.999 and 0.001 for example. Normally this should get rounded away by the frame mixing code anyway, but it's better to have an exact match.

Merge request reports