[FFmpeg-devel] [PATCH] avcodec/hevc_cabac: cabac_init_state, do not use magic number which not listed on the spec

Nuo Mi nuomi2021 at gmail.com
Sun Mar 21 07:07:40 EET 2021


passed h264,hevc decoder fate test.

On Sun, Mar 21, 2021 at 1:06 PM Nuo Mi <nuomi2021 at gmail.com> wrote:

> Magic number 124 and ^= are not listed on the spec.
> Strictly following the spec will make a reader's life much easier. See
> (9-6) for details
> ---
>  libavcodec/hevc_cabac.c | 10 ++++------
>  1 file changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/libavcodec/hevc_cabac.c b/libavcodec/hevc_cabac.c
> index 9b8c8e342d..7ac340f471 100644
> --- a/libavcodec/hevc_cabac.c
> +++ b/libavcodec/hevc_cabac.c
> @@ -496,12 +496,10 @@ static void cabac_init_state(HEVCContext *s)
>          int init_value = init_values[init_type][i];
>          int m = (init_value >> 4) * 5 - 45;
>          int n = ((init_value & 15) << 3) - 16;
> -        int pre = 2 * (((m * av_clip(s->sh.slice_qp, 0, 51)) >> 4) + n) -
> 127;
> -
> -        pre ^= pre >> 31;
> -        if (pre > 124)
> -            pre = 124 + (pre & 1);
> -        s->HEVClc->cabac_state[i] = pre;
> +        int pre = av_clip(((m * av_clip(s->sh.slice_qp, 0, 51)) >> 4) +
> n, 1, 126);
> +        int val_mps = (pre <= 63 ) ? 0 : 1;
> +        int state = val_mps ? (pre - 64) : (63 - pre);
> +        s->HEVClc->cabac_state[i] = (state << 1) + val_mps;
>      }
>
>      for (i = 0; i < 4; i++)
> --
> 2.25.1
>
>


More information about the ffmpeg-devel mailing list