summaryrefslogtreecommitdiff
path: root/libavcodec/vp3.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-11-06 11:03:34 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-12-08 17:51:47 +0100
commit420476ec7819ae15efb6d294767c454601715d74 (patch)
tree7ee34888744368d789aef5a916b0fccc695fd2e6 /libavcodec/vp3.c
parent802fc678b262ea5d3523169184a9ec9503bf7807 (diff)
avcodec/vp3: Remove code duplication when initializing Theora VLCs
theora_init_huffman_tables() does essentially the same as ff_init_vlcs_from_lengths(). Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavcodec/vp3.c')
-rw-r--r--libavcodec/vp3.c21
1 files changed, 6 insertions, 15 deletions
diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c
index 2f43de757e..cf64a8c61e 100644
--- a/libavcodec/vp3.c
+++ b/libavcodec/vp3.c
@@ -2319,20 +2319,6 @@ static av_cold int init_frames(Vp3DecodeContext *s)
return 0;
}
-static av_cold int theora_init_huffman_tables(VLC *vlc, const HuffTable *huff)
-{
- uint32_t code = 0, codes[32];
-
- for (unsigned i = 0; i < huff->nb_entries; i++) {
- codes[i] = code >> (31 - huff->entries[i].len);
- code += 0x80000000U >> huff->entries[i].len;
- }
- return ff_init_vlc_sparse(vlc, 11, huff->nb_entries,
- &huff->entries[0].len, sizeof(huff->entries[0]), 1,
- codes, 4, 4,
- &huff->entries[0].sym, sizeof(huff->entries[0]), 1, 0);
-}
-
static av_cold int vp3_decode_init(AVCodecContext *avctx)
{
Vp3DecodeContext *s = avctx->priv_data;
@@ -2460,7 +2446,12 @@ static av_cold int vp3_decode_init(AVCodecContext *avctx)
}
} else {
for (i = 0; i < FF_ARRAY_ELEMS(s->coeff_vlc); i++) {
- ret = theora_init_huffman_tables(&s->coeff_vlc[i], &s->huffman_table[i]);
+ const HuffTable *tab = &s->huffman_table[i];
+
+ ret = ff_init_vlc_from_lengths(&s->coeff_vlc[i], 11, tab->nb_entries,
+ &tab->entries[0].len, sizeof(*tab->entries),
+ &tab->entries[0].sym, sizeof(*tab->entries), 1,
+ 0, 0, avctx);
if (ret < 0)
return ret;
}