[FFmpeg-cvslog] aacdec: initialize float/fixed SBR tables only when either is needed
Lynne
git at videolan.org
Tue Apr 23 09:59:18 EEST 2024
ffmpeg | branch: master | Lynne <dev at lynne.ee> | Fri Mar 22 07:13:08 2024 +0100| [e3650886c7e1df3301ec2011a02147c3e32e33ad] | committer: Lynne
aacdec: initialize float/fixed SBR tables only when either is needed
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e3650886c7e1df3301ec2011a02147c3e32e33ad
---
libavcodec/aac/aacdec.c | 29 +++++++++++++++--------------
libavcodec/aac/aacdec_fixed.c | 3 +++
libavcodec/aac/aacdec_float.c | 3 +++
3 files changed, 21 insertions(+), 14 deletions(-)
diff --git a/libavcodec/aac/aacdec.c b/libavcodec/aac/aacdec.c
index 01a10468fa..4a29c1b092 100644
--- a/libavcodec/aac/aacdec.c
+++ b/libavcodec/aac/aacdec.c
@@ -29,6 +29,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
+/* We use several quantization functions here (Q31, Q30),
+ * for which we need this to be defined for them to work as expected. */
+#define USE_FIXED 1
+
#include <limits.h>
#include <stddef.h>
@@ -184,8 +188,8 @@ static int frame_configure_elements(AVCodecContext *avctx)
for (id = 0; id < MAX_ELEM_ID; id++) {
ChannelElement *che = ac->che[type][id];
if (che) {
- che->ch[0].AAC_RENAME(output) = che->ch[0].AAC_RENAME(ret_buf);
- che->ch[1].AAC_RENAME(output) = che->ch[1].AAC_RENAME(ret_buf);
+ che->ch[0].output = che->ch[0].ret_buf;
+ che->ch[1].output = che->ch[1].ret_buf;
}
}
}
@@ -202,7 +206,7 @@ static int frame_configure_elements(AVCodecContext *avctx)
/* map output channel pointers to AVFrame data */
for (ch = 0; ch < avctx->ch_layout.nb_channels; ch++) {
if (ac->output_element[ch])
- ac->output_element[ch]->AAC_RENAME(output) = (INTFLOAT *)ac->frame->extended_data[ch];
+ ac->output_element[ch]->output = (void *)ac->frame->extended_data[ch];
}
return 0;
@@ -1107,9 +1111,6 @@ static int sample_rate_idx (int rate)
static av_cold void aac_static_table_init(void)
{
- ff_aac_sbr_init();
- ff_aac_sbr_init_fixed();
-
ff_aacdec_common_init_once();
}
static AVOnce aac_table_init = AV_ONCE_INIT;
@@ -1118,8 +1119,8 @@ static av_cold int decode_close(AVCodecContext *avctx)
{
AACDecContext *ac = avctx->priv_data;
int is_fixed = ac->is_fixed;
- void (*sbr_close)(ChannelElement *che) = is_fixed ? RENAME_FIXED(ff_aac_sbr_ctx_close)
- : ff_aac_sbr_ctx_close;
+ void (*sbr_close)(ChannelElement *che) = is_fixed ? ff_aac_sbr_ctx_close_fixed :
+ ff_aac_sbr_ctx_close;
for (int type = 0; type < FF_ARRAY_ELEMS(ac->che); type++) {
for (int i = 0; i < MAX_ELEM_ID; i++) {
@@ -2069,10 +2070,10 @@ static void spectral_to_sample(AACDecContext *ac, int samples)
}
}
if (che->ch[0].tns.present)
- ac->dsp.apply_tns(che->ch[0].AAC_RENAME(coeffs),
+ ac->dsp.apply_tns(che->ch[0].coeffs,
&che->ch[0].tns, &che->ch[0].ics, 1);
if (che->ch[1].tns.present)
- ac->dsp.apply_tns(che->ch[1].AAC_RENAME(coeffs),
+ ac->dsp.apply_tns(che->ch[1].coeffs,
&che->ch[1].tns, &che->ch[1].ics, 1);
if (type <= TYPE_CPE)
apply_channel_coupling(ac, che, type, i, BETWEEN_TNS_AND_IMDCT, ac->dsp.apply_dependent_coupling);
@@ -2088,12 +2089,12 @@ static void spectral_to_sample(AACDecContext *ac, int samples)
if (ac->oc[1].m4ac.sbr > 0) {
if (ac->is_fixed)
ff_aac_sbr_apply_fixed(ac, che, type,
- che->ch[0].AAC_RENAME(output),
- che->ch[1].AAC_RENAME(output));
+ (void *)che->ch[0].output,
+ (void *)che->ch[1].output);
else
ff_aac_sbr_apply(ac, che, type,
- che->ch[0].AAC_RENAME(output),
- che->ch[1].AAC_RENAME(output));
+ (void *)che->ch[0].output,
+ (void *)che->ch[1].output);
}
}
if (type <= TYPE_CCE)
diff --git a/libavcodec/aac/aacdec_fixed.c b/libavcodec/aac/aacdec_fixed.c
index a65ba19137..92204180a1 100644
--- a/libavcodec/aac/aacdec_fixed.c
+++ b/libavcodec/aac/aacdec_fixed.c
@@ -41,6 +41,7 @@
#include "libavcodec/sinewin_fixed_tablegen.h"
#include "libavcodec/kbdwin.h"
#include "libavcodec/cbrt_data.h"
+#include "libavcodec/aacsbr.h"
DECLARE_ALIGNED(32, static INTFLOAT, AAC_RENAME2(aac_kbd_long_1024))[1024];
DECLARE_ALIGNED(32, static INTFLOAT, AAC_RENAME2(aac_kbd_short_128))[128];
@@ -57,6 +58,8 @@ static void init_tables_fixed_fn(void)
AAC_RENAME(ff_kbd_window_init)(AAC_RENAME(aac_kbd_long_960), 4.0, 960);
AAC_RENAME(ff_kbd_window_init)(AAC_RENAME(aac_kbd_short_120), 6.0, 120);
+ AAC_RENAME(ff_aac_sbr_init)();
+
init_sine_windows_fixed();
}
diff --git a/libavcodec/aac/aacdec_float.c b/libavcodec/aac/aacdec_float.c
index 834ad89b99..5c4eec1204 100644
--- a/libavcodec/aac/aacdec_float.c
+++ b/libavcodec/aac/aacdec_float.c
@@ -42,6 +42,7 @@
#include "libavcodec/kbdwin.h"
#include "libavcodec/cbrt_data.h"
#include "libavutil/mathematics.h"
+#include "libavcodec/aacsbr.h"
DECLARE_ALIGNED(32, static float, sine_120)[120];
DECLARE_ALIGNED(32, static float, sine_960)[960];
@@ -61,6 +62,8 @@ static void init_tables_float_fn(void)
AAC_RENAME(ff_sine_window_init)(AAC_RENAME(sine_960), 960);
AAC_RENAME(ff_sine_window_init)(AAC_RENAME(sine_120), 120);
AAC_RENAME(ff_init_ff_sine_windows)(9);
+
+ AAC_RENAME(ff_aac_sbr_init)();
}
static int init(AACDecContext *ac)
More information about the ffmpeg-cvslog
mailing list