[FFmpeg-cvslog] h264_metadata: Don't use inferred value of buffering frames

Andreas Rheinhardt git at videolan.org
Tue Nov 13 23:15:22 EET 2018


ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at googlemail.com> | Mon Nov 12 15:18:15 2018 +0100| [3c9c9b1568ef6a9babb4237cf8850017ef547668] | committer: Mark Thompson

h264_metadata: Don't use inferred value of buffering frames

Using the value of buffering frames inferred from the old level is
not a sensible approach when one wants to guess the level.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at googlemail.com>
Signed-off-by: Mark Thompson <sw at jkqxz.net>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3c9c9b1568ef6a9babb4237cf8850017ef547668
---

 libavcodec/h264_metadata_bsf.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/libavcodec/h264_metadata_bsf.c b/libavcodec/h264_metadata_bsf.c
index 521bc36b7e..e674f2a88d 100644
--- a/libavcodec/h264_metadata_bsf.c
+++ b/libavcodec/h264_metadata_bsf.c
@@ -222,7 +222,7 @@ static int h264_metadata_update_sps(AVBSFContext *bsf,
         if (ctx->level == LEVEL_AUTO) {
             const H264LevelDescriptor *desc;
             int64_t bit_rate;
-            int width, height;
+            int width, height, dpb_frames;
 
             if (sps->vui.nal_hrd_parameters_present_flag) {
                 bit_rate = (sps->vui.nal_hrd_parameters.bit_rate_value_minus1[0] + 1) *
@@ -236,13 +236,16 @@ static int h264_metadata_update_sps(AVBSFContext *bsf,
                 bit_rate = 0;
             }
 
+            // Don't use max_dec_frame_buffering if it is only inferred.
+            dpb_frames = sps->vui.bitstream_restriction_flag ?
+                sps->vui.max_dec_frame_buffering : H264_MAX_DPB_FRAMES;
+
             width  = 16 * (sps->pic_width_in_mbs_minus1 + 1);
             height = 16 * (sps->pic_height_in_map_units_minus1 + 1) *
                 (2 - sps->frame_mbs_only_flag);
 
             desc = ff_h264_guess_level(sps->profile_idc, bit_rate,
-                                       width, height,
-                                       sps->vui.max_dec_frame_buffering);
+                                       width, height, dpb_frames);
             if (desc) {
                 level_idc = desc->level_idc;
             } else {



More information about the ffmpeg-cvslog mailing list