summaryrefslogtreecommitdiff
path: root/libavcodec/atrac3.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-10-23 11:33:34 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-10-27 10:19:38 +0100
commite4eeb851fdfd023662f999093b473b76255cec03 (patch)
tree29fedc265736e7b09d5dfaad31c893ed0cf088f3 /libavcodec/atrac3.c
parent718e862da3e254c58447c0873decb335f688fa09 (diff)
downloadffmpeg-e4eeb851fdfd023662f999093b473b76255cec03.tar.gz
avcodec/atrac3: Don't use too big VLC tables
The longest code of any of the VLC tables used is eight bits long, so using nine bits long VLC tables is wasteful. Furthermore, there are only seven VLC tables used, yet the code up until now made it look like there should be eight. This has been corrected, too. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavcodec/atrac3.c')
-rw-r--r--libavcodec/atrac3.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/libavcodec/atrac3.c b/libavcodec/atrac3.c
index dc68e507aa..01b7f06bff 100644
--- a/libavcodec/atrac3.c
+++ b/libavcodec/atrac3.c
@@ -58,6 +58,8 @@
#define SAMPLES_PER_FRAME 1024
#define MDCT_SIZE 512
+#define ATRAC3_VLC_BITS 8
+
typedef struct GainBlock {
AtracGainInfo g_block[4];
} GainBlock;
@@ -116,7 +118,7 @@ typedef struct ATRAC3Context {
} ATRAC3Context;
static DECLARE_ALIGNED(32, float, mdct_window)[MDCT_SIZE];
-static VLC_TYPE atrac3_vlc_table[4096][2];
+static VLC_TYPE atrac3_vlc_table[7 * 1 << ATRAC3_VLC_BITS][2];
static VLC spectral_coeff_tab[7];
/**
@@ -851,6 +853,7 @@ static int atrac3al_decode_frame(AVCodecContext *avctx, void *data,
static av_cold void atrac3_init_static_data(void)
{
+ VLC_TYPE (*table)[2] = atrac3_vlc_table;
int i;
init_imdct_window();
@@ -858,12 +861,12 @@ static av_cold void atrac3_init_static_data(void)
/* Initialize the VLC tables. */
for (i = 0; i < 7; i++) {
- spectral_coeff_tab[i].table = &atrac3_vlc_table[atrac3_vlc_offs[i]];
- spectral_coeff_tab[i].table_allocated = atrac3_vlc_offs[i + 1] -
- atrac3_vlc_offs[i ];
- init_vlc(&spectral_coeff_tab[i], 9, huff_tab_sizes[i],
+ spectral_coeff_tab[i].table = table;
+ spectral_coeff_tab[i].table_allocated = 256;
+ init_vlc(&spectral_coeff_tab[i], ATRAC3_VLC_BITS, huff_tab_sizes[i],
huff_bits[i], 1, 1,
huff_codes[i], 1, 1, INIT_VLC_USE_NEW_STATIC);
+ table += 256;
}
}