diff mbox series

[FFmpeg-devel,1/3] avcodec/atrac3: Don't use too big VLC tables

Message ID 20201023101204.760326-1-andreas.rheinhardt@gmail.com
State Accepted
Commit e4eeb851fdfd023662f999093b473b76255cec03
Headers show
Series [FFmpeg-devel,1/3] avcodec/atrac3: Don't use too big VLC tables | expand

Checks

Context Check Description
andriy/x86_make success Make finished
andriy/x86_make_fate success Make fate finished

Commit Message

Andreas Rheinhardt Oct. 23, 2020, 10:12 a.m. UTC
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>
---
 libavcodec/atrac3.c     | 13 ++++++++-----
 libavcodec/atrac3data.h |  4 ----
 2 files changed, 8 insertions(+), 9 deletions(-)

Comments

Andreas Rheinhardt Oct. 26, 2020, 7:16 a.m. UTC | #1
Andreas Rheinhardt:
> 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>
> ---
>  libavcodec/atrac3.c     | 13 ++++++++-----
>  libavcodec/atrac3data.h |  4 ----
>  2 files changed, 8 insertions(+), 9 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;
>      }
>  }
>  
> diff --git a/libavcodec/atrac3data.h b/libavcodec/atrac3data.h
> index 5d91274f48..a731fb7c4a 100644
> --- a/libavcodec/atrac3data.h
> +++ b/libavcodec/atrac3data.h
> @@ -103,10 +103,6 @@ static const uint8_t* const huff_bits[7] = {
>      huffbits1, huffbits2, huffbits3, huffbits4, huffbits5, huffbits6, huffbits7,
>  };
>  
> -static const uint16_t atrac3_vlc_offs[9] = {
> -    0, 512, 1024, 1536, 2048, 2560, 3072, 3584, 4096
> -};
> -
>  /* selector tables */
>  
>  static const uint8_t clc_length_tab[8] = { 0, 4, 3, 3, 4, 4, 5, 6 };
> 
Will apply this patchset later today unless there are objections.

- Andreas
diff mbox series

Patch

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;
     }
 }
 
diff --git a/libavcodec/atrac3data.h b/libavcodec/atrac3data.h
index 5d91274f48..a731fb7c4a 100644
--- a/libavcodec/atrac3data.h
+++ b/libavcodec/atrac3data.h
@@ -103,10 +103,6 @@  static const uint8_t* const huff_bits[7] = {
     huffbits1, huffbits2, huffbits3, huffbits4, huffbits5, huffbits6, huffbits7,
 };
 
-static const uint16_t atrac3_vlc_offs[9] = {
-    0, 512, 1024, 1536, 2048, 2560, 3072, 3584, 4096
-};
-
 /* selector tables */
 
 static const uint8_t clc_length_tab[8] = { 0, 4, 3, 3, 4, 4, 5, 6 };