[FFmpeg-devel] [PATCH v2 30/36] cbs_h264: Fix range and default value of max mv lengths

Mark Thompson sw at jkqxz.net
Sun Jun 17 17:27:52 EEST 2018


On 15/06/18 04:01, Xiang, Haihao wrote:
> On Fri, 2018-06-08 at 00:43 +0100, Mark Thompson wrote:
>> The max and default values are 15, not 16.
> 
> I guessed you mixed both h264 and h265. The h264 doc i have specifies the range
> for log2_max_mv_length_vertical/log2_max_mv_length_horizontal is [0, 16] and the
> value of log2_max_mv_length_vertical/log2_max_mv_length_horizontal should be
> inferred to 16 when log2_max_mv_length_vertical/log2_max_mv_length_horizontal is
> not present.

Try the 2016/10 version (or later).

I was initially thinking the previous 16 value was an error on my part, but Andreas Rheinhardt noted that it was 16 in older standards and therefore we need to continue to accept 16 as an input value.

>> ---
>>  libavcodec/cbs_h264_syntax_template.c | 8 ++++----
>>  libavcodec/vaapi_encode_h264.c        | 4 ++--
>>  2 files changed, 6 insertions(+), 6 deletions(-)
>>
>> diff --git a/libavcodec/cbs_h264_syntax_template.c
>> b/libavcodec/cbs_h264_syntax_template.c
>> index 027b555db6..21edcb799e 100644
>> --- a/libavcodec/cbs_h264_syntax_template.c
>> +++ b/libavcodec/cbs_h264_syntax_template.c
>> @@ -185,16 +185,16 @@ static int FUNC(vui_parameters)(CodedBitstreamContext
>> *ctx, RWContext *rw,
>>          flag(motion_vectors_over_pic_boundaries_flag);
>>          ue(max_bytes_per_pic_denom, 0, 16);
>>          ue(max_bits_per_mb_denom,   0, 16);
>> -        ue(log2_max_mv_length_horizontal, 0, 16);
>> -        ue(log2_max_mv_length_vertical,   0, 16);
>> +        ue(log2_max_mv_length_horizontal, 0, 15);
>> +        ue(log2_max_mv_length_vertical,   0, 15);

So, removed this change to the bounds but kept the new inferred values below.

>>          ue(max_num_reorder_frames,  0, H264_MAX_DPB_FRAMES);
>>          ue(max_dec_frame_buffering, 0, H264_MAX_DPB_FRAMES);
>>      } else {
>>          infer(motion_vectors_over_pic_boundaries_flag, 1);
>>          infer(max_bytes_per_pic_denom, 2);
>>          infer(max_bits_per_mb_denom,   1);
>> -        infer(log2_max_mv_length_horizontal, 16);
>> -        infer(log2_max_mv_length_vertical,   16);
>> +        infer(log2_max_mv_length_horizontal, 15);
>> +        infer(log2_max_mv_length_vertical,   15);
>>  
>>          if ((sps->profile_idc ==  44 || sps->profile_idc ==  86 ||
>>               sps->profile_idc == 110 || sps->profile_idc == 110 ||
>> diff --git a/libavcodec/vaapi_encode_h264.c b/libavcodec/vaapi_encode_h264.c
>> index 4034053dc0..0d7780110c 100644
>> --- a/libavcodec/vaapi_encode_h264.c
>> +++ b/libavcodec/vaapi_encode_h264.c
>> @@ -491,8 +491,8 @@ static int
>> vaapi_encode_h264_init_sequence_params(AVCodecContext *avctx)
>>  
>>      sps->vui.bitstream_restriction_flag    = 1;
>>      sps->vui.motion_vectors_over_pic_boundaries_flag = 1;
>> -    sps->vui.log2_max_mv_length_horizontal = 16;
>> -    sps->vui.log2_max_mv_length_vertical   = 16;
>> +    sps->vui.log2_max_mv_length_horizontal = 15;
>> +    sps->vui.log2_max_mv_length_vertical   = 15;
>>      sps->vui.max_num_reorder_frames        = (ctx->b_per_p > 0);
>>      sps->vui.max_dec_frame_buffering       = sps->max_num_ref_frames;
>>  

Thanks,

- Mark


More information about the ffmpeg-devel mailing list