libavcodec/h264: Use inferred num_reorder_frames when VUI is absent When VUI bitstream_restriction is absent, H.264 specifies that max_num_reorder_frames should be inferred from the level's DPB limit. FFmpeg normally starts with has_b_frames = 0 to avoid latency for streams without B-frames, and increases the reorder buffer dynamically when out-of-order frames are detected. However, by only increasing has_b_frames to out_of_order, frames outside the initial reorder window can be emitted too early and dropped. When out-of-order frames are detected on a stream lacking VUI bitstream_restriction, set has_b_frames to the inferred sps->num_reorder_frames clamped to sps->ref_frame_count. Clamping to sps->ref_frame_count prevents over-allocating DPB reorder frames (e.g. up to 16 frames on low-resolution streams at high levels or 5 frames on 4K streams with 2 reference frames) while ensuring all B-frames are properly ordered. Streams without B-frames continue to have zero reorder delay. Bug: 495269752, 559001366 Change-Id: Ifcef68115ccebd0cd35fe53a742887779885d539 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/third_party/ffmpeg/+/8418569 Reviewed-by: Thomas Guilbert <tguilbert@chromium.org>
FFmpeg is a collection of libraries and tools to process multimedia content such as audio, video, subtitles and related metadata.
libavcodec provides implementation of a wider range of codecs.libavformat implements streaming protocols, container formats and basic I/O access.libavutil includes hashers, decompressors and miscellaneous utility functions.libavfilter provides means to alter decoded audio and video through a directed graph of connected filters.libavdevice provides an abstraction to access capture and playback devices.libswresample implements audio mixing and resampling routines.libswscale implements color conversion and scaling routines.aviocat, ismindex and qt-faststart.The offline documentation is available in the doc/ directory.
The online documentation is available in the main website and in the wiki.
Coding examples are available in the doc/examples directory.
FFmpeg codebase is mainly LGPL-licensed with optional components licensed under GPL. Please refer to the LICENSE file for detailed information.
Patches should be submitted to the ffmpeg-devel mailing list using git format-patch or git send-email. Github pull requests should be avoided because they are not part of our review process and will be ignored.