Variable frame rate (VFR) files have been difficult to work with. This is because during sequential decoding, spacing between frames is not always equal, but it was assumed to be equal. This can result in movie getting out of sync with sound and difference between preview and rendered image. A way to resolve these issues was to build and use timecodes which is quite lengthy and resource intensive process. Such issues are also difficult to communicate through UI because it is not possible to predict if timecode usage would be needed. With this patch, double buffer is used to keep previously decoded frame. If current frame has PTS greater than what we are looking for, it is not time to display it yet, and previous frame is displayed instead. Each `AVFrame` has information about it's duration, so in theory double buffering would not be needed, but in practice this information is unreliable. To ensure double buffer is always used, function `ffmpeg_decode_video_frame_scan` is used for sequential decoding, even if no scanning is expected. This approach is similar to D6392, but this implementation does not require seeking so it is much faster. Currently `AVFrame` is only referenced, so no data is copied and therefore no overhead is added. Note: There is one known issue where seeking fails even with double buffering: Some files may seek too far in stream and miss requested PTS. These require preseeking or greater negative subframe offset Fixes: T86361, T72347 Reviewed By: zeddb, sergey Differential Revision: https://developer.blender.org/D13583