James Almer:
> Will be reused in the following patch.
> 
> Signed-off-by: James Almer <jamr...@gmail.com>
> ---
> Moved the comment for the function to its new place, but otherwise, no
> difference compared to v2.
> 
>  libavcodec/cbs_h2645.c                | 10 ++++++++++
>  libavcodec/cbs_h265_syntax_template.c |  9 +++------
>  2 files changed, 13 insertions(+), 6 deletions(-)
> 
> diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c
> index d42073cc5a..095e449ddc 100644
> --- a/libavcodec/cbs_h2645.c
> +++ b/libavcodec/cbs_h2645.c
> @@ -233,6 +233,16 @@ static int cbs_write_se_golomb(CodedBitstreamContext 
> *ctx, PutBitContext *pbc,
>      return 0;
>  }
>  
> +// payload_extension_present() - true if we are before the last 1-bit
> +// in the payload structure, which must be in the last byte.
> +static int cbs_h265_payload_extension_present(GetBitContext *gbc, uint32_t 
> payload_size,
> +                                              int cur_pos)
> +{
> +    int bits_left = payload_size * 8 - cur_pos;
> +    return (bits_left > 0 &&
> +            (bits_left > 7 || show_bits(gbc, bits_left) & 
> MAX_UINT_BITS(bits_left - 1)));
Consider a buffering period SEI message whose bit position is 7 mod 8
before the payload extension present check and where there is only one
bit, namely a zero bit left in the SEI message. According to the
definition of payload_extension_present() in the standard, it will
Consider a buffering period SEI message whose bit position is 7 mod 8
before the payload extension present check and where there is only one
bit, namely a zero bit left in the SEI message. According to the
definition of payload_extension_present() in the standard, it will
return true and the last bit is use_alt_cpb_params_flag (with a value
zero); yet nevertheless the more_data_in_payload() check after the
buffering_period() returns false. This is a valid SEI message according
to the current version of the standard (in fact, for all versions except
for the very first version).

Yet the check above will return false in this scenario and the SEI
message unit will be considered invalid. I don't object to this, but you
should mention this discrepancy in a comment.

- Andreas

> +}
> +
>  #define HEADER(name) do { \
>          ff_cbs_trace_header(ctx, name); \
>      } while (0)
> diff --git a/libavcodec/cbs_h265_syntax_template.c 
> b/libavcodec/cbs_h265_syntax_template.c
> index a51b12cfc6..ed08b06e9c 100644
> --- a/libavcodec/cbs_h265_syntax_template.c
> +++ b/libavcodec/cbs_h265_syntax_template.c
> @@ -1572,7 +1572,7 @@ static int 
> FUNC(sei_buffering_period)(CodedBitstreamContext *ctx, RWContext *rw,
>      int err, i, length;
>  
>  #ifdef READ
> -    int start_pos, end_pos, bits_left;
> +    int start_pos, end_pos;
>      start_pos = get_bits_count(rw);
>  #endif
>  
> @@ -1651,12 +1651,9 @@ static int 
> FUNC(sei_buffering_period)(CodedBitstreamContext *ctx, RWContext *rw,
>      }
>  
>  #ifdef READ
> -    // payload_extension_present() - true if we are before the last 1-bit
> -    // in the payload structure, which must be in the last byte.
>      end_pos = get_bits_count(rw);
> -    bits_left = *payload_size * 8 - (end_pos - start_pos);
> -    if (bits_left > 0 &&
> -        (bits_left > 7 || ff_ctz(show_bits(rw, bits_left)) < bits_left - 1))
> +    if (cbs_h265_payload_extension_present(rw, *payload_size,
> +                                           end_pos - start_pos))
>          flag(use_alt_cpb_params_flag);
>      else
>          infer(use_alt_cpb_params_flag, 0);
> 

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to