[FFmpeg-devel] [PATCH 1/4] avcodec/magicyuv: Use a compile time constant for vlc_bits

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Fri Oct 27 00:37:57 EEST 2023


Michael Niedermayer:
> This will permit further optimizations
> 
> Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> ---
>  libavcodec/magicyuv.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/libavcodec/magicyuv.c b/libavcodec/magicyuv.c
> index 4a143cdbbf7..78d7f44cd65 100644
> --- a/libavcodec/magicyuv.c
> +++ b/libavcodec/magicyuv.c
> @@ -124,13 +124,13 @@ static void magicyuv_median_pred16(uint16_t *dst, const uint16_t *src1,
>      x = 0; \
>      for (; x < width-c && get_bits_left(&gb) > 0;) {\
>          ret = get_vlc_multi(&gb, (uint8_t *)dst + x * b, multi, \
> -                            vlc, vlc_bits, 3); \
> +                            vlc, VLC_BITS, 3); \
>          if (ret <= 0) \
>              return AVERROR_INVALIDDATA; \
>          x += ret; \
>      } \
>      for (; x < width && get_bits_left(&gb) > 0; x++) \
> -        dst[x] = get_vlc2(&gb, vlc, vlc_bits, 3); \
> +        dst[x] = get_vlc2(&gb, vlc, VLC_BITS, 3); \
>      dst += stride; \
>  }
>  
> @@ -155,7 +155,6 @@ static int magy_decode_slice10(AVCodecContext *avctx, void *tdata,
>          ptrdiff_t stride = p->linesize[i] / 2;
>          const VLC_MULTI_ELEM *const multi = s->multi[i].table;
>          const VLCElem *const vlc = s->vlc[i].table;
> -        const int vlc_bits = s->vlc[i].bits;
>          int flags, pred;
>          int ret = init_get_bits8(&gb, s->buf + s->slices[i][j].start,
>                                   s->slices[i][j].size);

The VLCs are created via "ff_vlc_init_multi_from_lengths(vlc, multi,
FFMIN(he[0].len, VLC_BITS), nb_elems, nb_elems,", so the number of bits
of the VLC is not a compile-time constant.

- Andreas



More information about the ffmpeg-devel mailing list