From 1320d336eff2d08f82aa98301fced00178aaea0a Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Wed, 28 Oct 2020 10:48:09 +0100 Subject: [PATCH] avcodec/rv10: Make VLC tables smaller These tables were huge (14 bits) because one needed 14 bits in order to find out whether a code is valid and in the VLC table or a valid code that required hacky workarounds due to RealVideo 1.0 using multiple codes for the same symbol and the code predating the introduction of symbols tables for VLCs. Signed-off-by: Andreas Rheinhardt --- libavcodec/rv10.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libavcodec/rv10.c b/libavcodec/rv10.c index 4d4c2b0f2e..0727899337 100644 --- a/libavcodec/rv10.c +++ b/libavcodec/rv10.c @@ -47,7 +47,7 @@ #define RV_GET_MICRO_VER(x) (((x) >> 12) & 0xFF) #define MAX_VLC_ENTRIES 1023 // Note: Does not include the skip entries. -#define DC_VLC_BITS 14 // FIXME find a better solution +#define DC_VLC_BITS 9 typedef struct RVDecContext { MpegEncContext m; @@ -346,14 +346,14 @@ static av_cold void rv10_build_vlc(VLC *vlc, const uint16_t len_count[15], static av_cold void rv10_init_static(void) { - static VLC_TYPE table[16896 + 16640][2]; + static VLC_TYPE table[1472 + 992][2]; rv_dc_lum.table = table; - rv_dc_lum.table_allocated = 16896; + rv_dc_lum.table_allocated = 1472; rv10_build_vlc(&rv_dc_lum, rv_lum_len_count, rv_sym_run_len, FF_ARRAY_ELEMS(rv_sym_run_len)); - rv_dc_chrom.table = &table[16896]; - rv_dc_chrom.table_allocated = 16640; + rv_dc_chrom.table = &table[1472]; + rv_dc_chrom.table_allocated = 992; rv10_build_vlc(&rv_dc_chrom, rv_chrom_len_count, rv_sym_run_len, FF_ARRAY_ELEMS(rv_sym_run_len) - 2); ff_h263_decode_init_vlc();