From d4a4a6747d53a5707f1a13861dc2cc4e7e19e332 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Sun, 1 Nov 2020 01:21:06 +0100 Subject: [PATCH] avcodec/sheervideo: Simplify creating VLC table ff_init_vlc_from_lengths() can be used to offload the computation of the codes; it also needn't check whether the codes are already properly ordered (they are). Signed-off-by: Andreas Rheinhardt --- libavcodec/sheervideo.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/libavcodec/sheervideo.c b/libavcodec/sheervideo.c index 3e60ef26a5..b3fb92b6b5 100644 --- a/libavcodec/sheervideo.c +++ b/libavcodec/sheervideo.c @@ -1784,11 +1784,10 @@ static void decode_rgb(AVCodecContext *avctx, AVFrame *p, GetBitContext *gb) static av_cold int build_vlc(VLC *vlc, const SheerTable *table) { const uint8_t *cur = table->lens; - uint16_t codes[1024]; uint8_t lens[1024]; unsigned count = 0; - for (unsigned step = 1, len = 1, index = 0; len > 0; len += step) { + for (int step = 1, len = 1; len > 0; len += step) { unsigned new_count = count; if (len == 16) { @@ -1797,17 +1796,13 @@ static av_cold int build_vlc(VLC *vlc, const SheerTable *table) } else new_count += *cur++; - for (; count < new_count; count++) { - codes[count] = index >> (32 - len); - index += 1U << (32 - len); + for (; count < new_count; count++) lens[count] = len; - } } ff_free_vlc(vlc); - return init_vlc(vlc, SHEER_VLC_BITS, count, - lens, sizeof(*lens), sizeof(*lens), - codes, sizeof(*codes), sizeof(*codes), 0); + return ff_init_vlc_from_lengths(vlc, SHEER_VLC_BITS, count, + lens, sizeof(*lens), NULL, 0, 0, 0, 0, NULL); } static int decode_frame(AVCodecContext *avctx,