[FFmpeg-devel] [PATCH 4/4] avcodec/aactab: Deduplicate ltp_coef and tns_tmp2_map tables

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Fri Mar 1 05:08:35 EET 2024


This will allow to make aac_defines.h decoder-only.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
---
 libavcodec/aacdec_fixed.c    | 43 ++++++++++++++++++++++++++++++++++++
 libavcodec/aacdec_template.c |  4 ++--
 libavcodec/aacenc_ltp.c      |  4 ++--
 libavcodec/aacenc_tns.c      |  2 +-
 libavcodec/aactab.c          | 39 ++++++++++++++++++++++++++++++++
 libavcodec/aactab.h          | 36 ++----------------------------
 6 files changed, 89 insertions(+), 39 deletions(-)

diff --git a/libavcodec/aacdec_fixed.c b/libavcodec/aacdec_fixed.c
index 2abe6acb6b..5d5ae34838 100644
--- a/libavcodec/aacdec_fixed.c
+++ b/libavcodec/aacdec_fixed.c
@@ -89,6 +89,49 @@ DECLARE_ALIGNED(32, static int, AAC_RENAME2(aac_kbd_short_128))[128];
 DECLARE_ALIGNED(32, static int, AAC_RENAME2(aac_kbd_long_960))[960];
 DECLARE_ALIGNED(32, static int, AAC_RENAME2(aac_kbd_short_120))[120];
 
+/* @name ltp_coef
+ * Table of the LTP coefficients
+ */
+static const int ltp_coef_fixed[8] = {
+    Q30(0.570829), Q30(0.696616), Q30(0.813004), Q30(0.911304),
+    Q30(0.984900), Q30(1.067894), Q30(1.194601), Q30(1.369533),
+};
+
+/* @name tns_tmp2_map
+ * Tables of the tmp2[] arrays of LPC coefficients used for TNS.
+ * The suffix _M_N[] indicate the values of coef_compress and coef_res
+ * respectively.
+ * @{
+ */
+static const int tns_tmp2_map_1_3[4] = {
+    Q31(0.00000000), Q31(-0.43388373),  Q31(0.64278758),  Q31(0.34202015),
+};
+
+static const int tns_tmp2_map_0_3[8] = {
+    Q31(0.00000000), Q31(-0.43388373), Q31(-0.78183150), Q31(-0.97492790),
+    Q31(0.98480773), Q31( 0.86602539), Q31( 0.64278758), Q31( 0.34202015),
+};
+
+static const int tns_tmp2_map_1_4[8] = {
+    Q31(0.00000000), Q31(-0.20791170), Q31(-0.40673664), Q31(-0.58778524),
+    Q31(0.67369562), Q31( 0.52643216), Q31( 0.36124167), Q31( 0.18374951),
+};
+
+static const int tns_tmp2_map_0_4[16] = {
+    Q31( 0.00000000), Q31(-0.20791170), Q31(-0.40673664), Q31(-0.58778524),
+    Q31(-0.74314481), Q31(-0.86602539), Q31(-0.95105654), Q31(-0.99452192),
+    Q31( 0.99573416), Q31( 0.96182561), Q31( 0.89516330), Q31( 0.79801720),
+    Q31( 0.67369562), Q31( 0.52643216), Q31( 0.36124167), Q31( 0.18374951),
+};
+
+static const int * const tns_tmp2_map_fixed[4] = {
+    tns_tmp2_map_0_3,
+    tns_tmp2_map_0_4,
+    tns_tmp2_map_1_3,
+    tns_tmp2_map_1_4
+};
+// @}
+
 static av_always_inline void reset_predict_state(PredictorState *ps)
 {
     ps->r0.mant   = 0;
diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c
index 6561abb14e..3d96ed6f29 100644
--- a/libavcodec/aacdec_template.c
+++ b/libavcodec/aacdec_template.c
@@ -1298,7 +1298,7 @@ static void decode_ltp(LongTermPrediction *ltp,
     int sfb;
 
     ltp->lag  = get_bits(gb, 11);
-    ltp->coef = ltp_coef[get_bits(gb, 3)];
+    ltp->coef = AAC_RENAME2(ltp_coef)[get_bits(gb, 3)];
     for (sfb = 0; sfb < FFMIN(max_sfb, MAX_LTP_LONG_SFB); sfb++)
         ltp->used[sfb] = get_bits1(gb);
 }
@@ -1611,7 +1611,7 @@ static int decode_tns(AACDecContext *ac, TemporalNoiseShaping *tns,
                     tmp2_idx = 2 * coef_compress + coef_res;
 
                     for (i = 0; i < tns->order[w][filt]; i++)
-                        tns->coef[w][filt][i] = tns_tmp2_map[tmp2_idx][get_bits(gb, coef_len)];
+                        tns->coef[w][filt][i] = AAC_RENAME2(tns_tmp2_map)[tmp2_idx][get_bits(gb, coef_len)];
                 }
             }
         }
diff --git a/libavcodec/aacenc_ltp.c b/libavcodec/aacenc_ltp.c
index f3075f0e71..9901891d68 100644
--- a/libavcodec/aacenc_ltp.c
+++ b/libavcodec/aacenc_ltp.c
@@ -92,8 +92,8 @@ static void get_lag(float *buf, const float *new, LongTermPrediction *ltp)
         }
     }
     ltp->lag = FFMAX(av_clip_uintp2(lag, 11), 0);
-    ltp->coef_idx = quant_array_idx(max_ratio, ltp_coef, 8);
-    ltp->coef = ltp_coef[ltp->coef_idx];
+    ltp->coef_idx = quant_array_idx(max_ratio, ff_ltp_coef, 8);
+    ltp->coef     = ff_ltp_coef[ltp->coef_idx];
 }
 
 static void generate_samples(float *buf, LongTermPrediction *ltp)
diff --git a/libavcodec/aacenc_tns.c b/libavcodec/aacenc_tns.c
index b2418a0236..60888fece7 100644
--- a/libavcodec/aacenc_tns.c
+++ b/libavcodec/aacenc_tns.c
@@ -148,7 +148,7 @@ static inline void quantize_coefs(double *coef, int *idx, float *lpc, int order,
                                   int c_bits)
 {
     int i;
-    const float *quant_arr = tns_tmp2_map[c_bits];
+    const float *quant_arr = ff_tns_tmp2_map[c_bits];
     for (i = 0; i < order; i++) {
         idx[i] = quant_array_idx(coef[i], quant_arr, c_bits ? 16 : 8);
         lpc[i] = quant_arr[idx[i]];
diff --git a/libavcodec/aactab.c b/libavcodec/aactab.c
index 63a478f33f..020267f389 100644
--- a/libavcodec/aactab.c
+++ b/libavcodec/aactab.c
@@ -105,6 +105,45 @@ av_cold void ff_aac_float_common_init(void)
     static AVOnce init_static_once = AV_ONCE_INIT;
     ff_thread_once(&init_static_once, aac_float_common_init);
 }
+
+const float ff_ltp_coef[8] = {
+    0.570829, 0.696616, 0.813004, 0.911304,
+    0.984900, 1.067894, 1.194601, 1.369533,
+};
+
+/* @name tns_tmp2_map
+ * Tables of the tmp2[] arrays of LPC coefficients used for TNS.
+ * The suffix _M_N[] indicate the values of coef_compress and coef_res
+ * respectively.
+ * @{
+ */
+static const float tns_tmp2_map_1_3[4] = {
+    0.00000000, -0.43388373,  0.64278758,  0.34202015,
+};
+
+static const float tns_tmp2_map_0_3[8] = {
+    0.00000000, -0.43388373, -0.78183150, -0.97492790,
+    0.98480773,  0.86602539,  0.64278758,  0.34202015,
+};
+
+static const float tns_tmp2_map_1_4[8] = {
+    0.00000000, -0.20791170, -0.40673664, -0.58778524,
+    0.67369562,  0.52643216,  0.36124167,  0.18374951,
+};
+
+static const float tns_tmp2_map_0_4[16] = {
+     0.00000000, -0.20791170, -0.40673664, -0.58778524,
+    -0.74314481, -0.86602539, -0.95105654, -0.99452192,
+     0.99573416,  0.96182561,  0.89516330,  0.79801720,
+     0.67369562,  0.52643216,  0.36124167,  0.18374951,
+};
+
+const float * const ff_tns_tmp2_map[4] = {
+    tns_tmp2_map_0_3,
+    tns_tmp2_map_0_4,
+    tns_tmp2_map_1_3,
+    tns_tmp2_map_1_4
+};
 #endif
 
 const uint8_t ff_aac_num_swb_1024[] = {
diff --git a/libavcodec/aactab.h b/libavcodec/aactab.h
index 81db29a4e4..e1a2d8b9a1 100644
--- a/libavcodec/aactab.h
+++ b/libavcodec/aactab.h
@@ -31,7 +31,6 @@
 #define AVCODEC_AACTAB_H
 
 #include "libavutil/mem_internal.h"
-#include "aac_defines.h"
 
 #include <stdint.h>
 
@@ -45,44 +44,13 @@ extern float ff_aac_pow34sf_tab[428];
 /* @name ltp_coef
  * Table of the LTP coefficients
  */
-static const INTFLOAT ltp_coef[8] = {
-    Q30(0.570829), Q30(0.696616), Q30(0.813004), Q30(0.911304),
-    Q30(0.984900), Q30(1.067894), Q30(1.194601), Q30(1.369533),
-};
+extern const float ff_ltp_coef[8];
 
 /* @name tns_tmp2_map
  * Tables of the tmp2[] arrays of LPC coefficients used for TNS.
- * The suffix _M_N[] indicate the values of coef_compress and coef_res
- * respectively.
  * @{
  */
-static const INTFLOAT tns_tmp2_map_1_3[4] = {
-    Q31(0.00000000), Q31(-0.43388373),  Q31(0.64278758),  Q31(0.34202015),
-};
-
-static const INTFLOAT tns_tmp2_map_0_3[8] = {
-    Q31(0.00000000), Q31(-0.43388373), Q31(-0.78183150), Q31(-0.97492790),
-    Q31(0.98480773), Q31( 0.86602539), Q31( 0.64278758), Q31( 0.34202015),
-};
-
-static const INTFLOAT tns_tmp2_map_1_4[8] = {
-    Q31(0.00000000), Q31(-0.20791170), Q31(-0.40673664), Q31(-0.58778524),
-    Q31(0.67369562), Q31( 0.52643216), Q31( 0.36124167), Q31( 0.18374951),
-};
-
-static const INTFLOAT tns_tmp2_map_0_4[16] = {
-    Q31( 0.00000000), Q31(-0.20791170), Q31(-0.40673664), Q31(-0.58778524),
-    Q31(-0.74314481), Q31(-0.86602539), Q31(-0.95105654), Q31(-0.99452192),
-    Q31( 0.99573416), Q31( 0.96182561), Q31( 0.89516330), Q31( 0.79801720),
-    Q31( 0.67369562), Q31( 0.52643216), Q31( 0.36124167), Q31( 0.18374951),
-};
-
-static const INTFLOAT * const tns_tmp2_map[4] = {
-    tns_tmp2_map_0_3,
-    tns_tmp2_map_0_4,
-    tns_tmp2_map_1_3,
-    tns_tmp2_map_1_4
-};
+extern const float *const ff_tns_tmp2_map[4];
 // @}
 
 /* @name window coefficients
-- 
2.40.1



More information about the ffmpeg-devel mailing list