diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-11-01 01:21:06 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-12-08 17:51:46 +0100 |
commit | d4a4a6747d53a5707f1a13861dc2cc4e7e19e332 (patch) | |
tree | 8bc0c68c348262991d6e776aedcab58791d913b2 | |
parent | f31bf4a1f93920fe67447a11632817efa978d92d (diff) | |
download | ffmpeg-d4a4a6747d53a5707f1a13861dc2cc4e7e19e332.tar.gz |
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 <andreas.rheinhardt@gmail.com>
-rw-r--r-- | libavcodec/sheervideo.c | 13 |
1 files 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, |