From 4ed0fea0fa6189a69f549f4c40a6b51c155ef584 Mon Sep 17 00:00:00 2001 From: Andreas Rheinhardt Date: Thu, 29 Feb 2024 21:51:59 +0100 Subject: [PATCH] avcodec/aactab: Deduplicate ltp_coef and tns_tmp2_map tables This will allow to make aac_defines.h decoder-only. Reviewed-by: Lynne Signed-off-by: Andreas Rheinhardt --- 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 591ff6aedf..58f7921074 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 @@ -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