aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-11-01 01:21:06 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-12-08 17:51:46 +0100
commitd4a4a6747d53a5707f1a13861dc2cc4e7e19e332 (patch)
tree8bc0c68c348262991d6e776aedcab58791d913b2
parentf31bf4a1f93920fe67447a11632817efa978d92d (diff)
downloadffmpeg-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.c13
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,