[FFmpeg-cvslog] aacdec: move fixed/float DSP initialization to templated init functions
Lynne
git at videolan.org
Tue Apr 23 09:59:00 EEST 2024
ffmpeg | branch: master | Lynne <dev at lynne.ee> | Sat Mar 16 06:05:45 2024 +0100| [2f90d8398148b04db31e197f49154240c36e1849] | committer: Lynne
aacdec: move fixed/float DSP initialization to templated init functions
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2f90d8398148b04db31e197f49154240c36e1849
---
libavcodec/aac/aacdec.c | 4 +---
libavcodec/aac/aacdec_dsp_template.c | 2 +-
libavcodec/aac/aacdec_fixed.c | 10 +++++++++-
libavcodec/aac/aacdec_float.c | 16 +++++++++++++++-
libavcodec/aacdec.h | 2 +-
libavcodec/aacdec_template.c | 35 ++++-------------------------------
6 files changed, 31 insertions(+), 38 deletions(-)
diff --git a/libavcodec/aac/aacdec.c b/libavcodec/aac/aacdec.c
index d31c64d08d..3af0e808fd 100644
--- a/libavcodec/aac/aacdec.c
+++ b/libavcodec/aac/aacdec.c
@@ -124,9 +124,7 @@ av_cold int ff_aac_decode_init_common(AVCodecContext *avctx)
ac->dsp = is_fixed ? aac_dsp_fixed : aac_dsp;
ac->proc = is_fixed ? aac_proc_fixed : aac_proc;
- ac->dsp.init_tables();
-
- return 0;
+ return ac->dsp.init(ac);
}
#define AACDEC_FLAGS AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM
diff --git a/libavcodec/aac/aacdec_dsp_template.c b/libavcodec/aac/aacdec_dsp_template.c
index 338e512ed2..f260d32e4a 100644
--- a/libavcodec/aac/aacdec_dsp_template.c
+++ b/libavcodec/aac/aacdec_dsp_template.c
@@ -616,7 +616,7 @@ static void AAC_RENAME(apply_prediction)(AACDecContext *ac, SingleChannelElement
}
const AACDecDSP AAC_RENAME(aac_dsp) = {
- .init_tables = &AAC_RENAME(init_tables),
+ .init = &AAC_RENAME(init),
.dequant_scalefactors = &AAC_RENAME(dequant_scalefactors),
.apply_mid_side_stereo = &AAC_RENAME(apply_mid_side_stereo),
diff --git a/libavcodec/aac/aacdec_fixed.c b/libavcodec/aac/aacdec_fixed.c
index 41f25d8148..d706cfcc92 100644
--- a/libavcodec/aac/aacdec_fixed.c
+++ b/libavcodec/aac/aacdec_fixed.c
@@ -35,6 +35,8 @@
#include "libavcodec/aac_defines.h"
+#include "libavcodec/avcodec.h"
+#include "libavcodec/aacdec.h"
#include "libavcodec/aactab.h"
#include "libavcodec/sinewin_fixed_tablegen.h"
#include "libavcodec/kbdwin.h"
@@ -58,10 +60,16 @@ static void init_tables_fixed_fn(void)
init_sine_windows_fixed();
}
-static void init_tables_fixed(void)
+static int init_fixed(AACDecContext *ac)
{
static AVOnce init_fixed_once = AV_ONCE_INIT;
ff_thread_once(&init_fixed_once, init_tables_fixed_fn);
+
+ ac->fdsp = avpriv_alloc_fixed_dsp(ac->avctx->flags & AV_CODEC_FLAG_BITEXACT);
+ if (!ac->fdsp)
+ return AVERROR(ENOMEM);
+
+ return 0;
}
static const int cce_scale_fixed[8] = {
diff --git a/libavcodec/aac/aacdec_float.c b/libavcodec/aac/aacdec_float.c
index 73aaa72f68..6801085098 100644
--- a/libavcodec/aac/aacdec_float.c
+++ b/libavcodec/aac/aacdec_float.c
@@ -35,6 +35,8 @@
#include "libavcodec/aac_defines.h"
+#include "libavcodec/avcodec.h"
+#include "libavcodec/aacdec.h"
#include "libavcodec/aactab.h"
#include "libavcodec/sinewin.h"
#include "libavcodec/kbdwin.h"
@@ -61,10 +63,22 @@ static void init_tables_float_fn(void)
AAC_RENAME(ff_init_ff_sine_windows)(9);
}
-static void init_tables(void)
+static int init(AACDecContext *ac)
{
static AVOnce init_float_once = AV_ONCE_INIT;
ff_thread_once(&init_float_once, init_tables_float_fn);
+
+ ac->fdsp = avpriv_float_dsp_alloc(ac->avctx->flags & AV_CODEC_FLAG_BITEXACT);
+ if (!ac->fdsp)
+ return AVERROR(ENOMEM);
+
+ ff_aac_float_common_init();
+
+#if ARCH_MIPS
+ ff_aacdec_init_mips(ac);
+#endif
+
+ return 0;
}
static const float cce_scale[] = {
diff --git a/libavcodec/aacdec.h b/libavcodec/aacdec.h
index 2a997823ee..2e3ee961b0 100644
--- a/libavcodec/aacdec.h
+++ b/libavcodec/aacdec.h
@@ -216,7 +216,7 @@ typedef struct AACDecProc {
* DSP-specific primitives
*/
typedef struct AACDecDSP {
- void (*init_tables)(void);
+ int (*init)(AACDecContext *ac);
void (*dequant_scalefactors)(SingleChannelElement *sce);
diff --git a/libavcodec/aacdec_template.c b/libavcodec/aacdec_template.c
index 30ec914520..ad40c0ca09 100644
--- a/libavcodec/aacdec_template.c
+++ b/libavcodec/aacdec_template.c
@@ -1088,18 +1088,11 @@ static int sample_rate_idx (int rate)
else return 11;
}
-static void aacdec_init(AACDecContext *ac);
-
static av_cold void aac_static_table_init(void)
{
AAC_RENAME(ff_aac_sbr_init)();
ff_aacdec_common_init_once();
-
-#if !USE_FIXED
- ff_aac_float_common_init();
-#else
-#endif
}
static AVOnce aac_table_init = AV_ONCE_INIT;
@@ -1121,12 +1114,10 @@ static av_cold int aac_decode_init(AVCodecContext *avctx)
ac->avctx = avctx;
ac->oc[1].m4ac.sample_rate = avctx->sample_rate;
- aacdec_init(ac);
-#if USE_FIXED
- avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
-#else
- avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
-#endif /* USE_FIXED */
+ if (ac->is_fixed)
+ avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
+ else
+ avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
if (avctx->extradata_size > 0) {
if ((ret = decode_audio_specific_config(ac, ac->avctx, &ac->oc[1].m4ac,
@@ -1164,15 +1155,6 @@ static av_cold int aac_decode_init(AVCodecContext *avctx)
}
}
-#if USE_FIXED
- ac->fdsp = avpriv_alloc_fixed_dsp(avctx->flags & AV_CODEC_FLAG_BITEXACT);
-#else
- ac->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
-#endif /* USE_FIXED */
- if (!ac->fdsp) {
- return AVERROR(ENOMEM);
- }
-
return ff_aac_decode_init_common(avctx);
}
@@ -2411,12 +2393,3 @@ static int aac_decode_frame(AVCodecContext *avctx, AVFrame *frame,
return buf_size > buf_offset ? buf_consumed : buf_size;
}
-
-static void aacdec_init(AACDecContext *c)
-{
-#if !USE_FIXED
-#if ARCH_MIPS
- ff_aacdec_init_mips(c);
-#endif
-#endif /* !USE_FIXED */
-}
More information about the ffmpeg-cvslog
mailing list