[FFmpeg-cvslog] aacdec: duplicate table initialization

Lynne git at videolan.org
Tue Apr 23 09:58:37 EEST 2024


ffmpeg | branch: master | Lynne <dev at lynne.ee> | Sat Mar 16 00:12:56 2024 +0100| [a309aa412755f7bb16eead43bcaff1a9dcdb5954] | committer: Lynne

aacdec: duplicate table initialization

Preparation to move all table init and support windowing functions.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a309aa412755f7bb16eead43bcaff1a9dcdb5954
---

 libavcodec/aac/aacdec.c              |  2 ++
 libavcodec/aac/aacdec_dsp_template.c |  2 ++
 libavcodec/aac/aacdec_fixed.c        | 26 ++++++++++++++++++++++++--
 libavcodec/aac/aacdec_float.c        | 27 +++++++++++++++++++++++++++
 libavcodec/aacdec.h                  |  2 ++
 5 files changed, 57 insertions(+), 2 deletions(-)

diff --git a/libavcodec/aac/aacdec.c b/libavcodec/aac/aacdec.c
index 00353bddc7..26612f4a14 100644
--- a/libavcodec/aac/aacdec.c
+++ b/libavcodec/aac/aacdec.c
@@ -120,6 +120,8 @@ av_cold int ff_aac_decode_init_common(AVCodecContext *avctx)
 
     ac->dsp = is_fixed ? aac_dsp_fixed : aac_dsp;
 
+    ac->dsp.init_tables();
+
     return 0;
 }
 
diff --git a/libavcodec/aac/aacdec_dsp_template.c b/libavcodec/aac/aacdec_dsp_template.c
index 5e18b30d99..30151604c2 100644
--- a/libavcodec/aac/aacdec_dsp_template.c
+++ b/libavcodec/aac/aacdec_dsp_template.c
@@ -311,6 +311,8 @@ static void AAC_RENAME(update_ltp)(AACDecContext *ac, SingleChannelElement *sce)
 }
 
 const AACDecDSP AAC_RENAME(aac_dsp) = {
+    .init_tables = &AAC_RENAME(init_tables),
+
     .dequant_scalefactors = &AAC_RENAME(dequant_scalefactors),
     .apply_mid_side_stereo = &AAC_RENAME(apply_mid_side_stereo),
     .apply_intensity_stereo = &AAC_RENAME(apply_intensity_stereo),
diff --git a/libavcodec/aac/aacdec_fixed.c b/libavcodec/aac/aacdec_fixed.c
index 9b66f22d2f..9dd8f34f55 100644
--- a/libavcodec/aac/aacdec_fixed.c
+++ b/libavcodec/aac/aacdec_fixed.c
@@ -31,12 +31,34 @@
 
 #define USE_FIXED 1
 
+#include "libavutil/thread.h"
+
 #include "libavcodec/aac_defines.h"
 
 #include "libavcodec/aactab.h"
 #include "libavcodec/sinewin_fixed_tablegen.h"
+#include "libavcodec/kbdwin.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];
+DECLARE_ALIGNED(32, static INTFLOAT, AAC_RENAME(aac_kbd_long_960))[960];
+DECLARE_ALIGNED(32, static INTFLOAT, AAC_RENAME(aac_kbd_short_120))[120];
+
+static void init_tables_fixed_fn(void)
+{
+    AAC_RENAME(ff_kbd_window_init)(AAC_RENAME2(aac_kbd_long_1024), 4.0, 1024);
+    AAC_RENAME(ff_kbd_window_init)(AAC_RENAME2(aac_kbd_short_128), 6.0, 128);
+
+    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);
+
+    init_sine_windows_fixed();
+}
 
-DECLARE_ALIGNED(32, extern int, AAC_RENAME2(aac_kbd_long_1024))[1024];
-DECLARE_ALIGNED(32, extern int, AAC_RENAME2(aac_kbd_short_128))[128];
+static void init_tables_fixed(void)
+{
+    static AVOnce init_fixed_once = AV_ONCE_INIT;
+    ff_thread_once(&init_fixed_once, init_tables_fixed_fn);
+}
 
 #include "aacdec_dsp_template.c"
diff --git a/libavcodec/aac/aacdec_float.c b/libavcodec/aac/aacdec_float.c
index ba1b06cc21..6a5e8483b0 100644
--- a/libavcodec/aac/aacdec_float.c
+++ b/libavcodec/aac/aacdec_float.c
@@ -31,9 +31,36 @@
 
 #define USE_FIXED 0
 
+#include "libavutil/thread.h"
+
 #include "libavcodec/aac_defines.h"
 
 #include "libavcodec/aactab.h"
 #include "libavcodec/sinewin.h"
+#include "libavcodec/kbdwin.h"
+
+DECLARE_ALIGNED(32, static float, sine_120)[120];
+DECLARE_ALIGNED(32, static float, sine_960)[960];
+DECLARE_ALIGNED(32, static float, aac_kbd_long_960)[960];
+DECLARE_ALIGNED(32, static float, aac_kbd_short_120)[120];
+
+static void init_tables_float_fn(void)
+{
+    AAC_RENAME(ff_kbd_window_init)(AAC_RENAME2(aac_kbd_long_1024), 4.0, 1024);
+    AAC_RENAME(ff_kbd_window_init)(AAC_RENAME2(aac_kbd_short_128), 6.0, 128);
+
+    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_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);
+}
+
+static void init_tables(void)
+{
+    static AVOnce init_float_once = AV_ONCE_INIT;
+    ff_thread_once(&init_float_once, init_tables_float_fn);
+}
 
 #include "aacdec_dsp_template.c"
diff --git a/libavcodec/aacdec.h b/libavcodec/aacdec.h
index 109c38d8e2..30da1fc198 100644
--- a/libavcodec/aacdec.h
+++ b/libavcodec/aacdec.h
@@ -204,6 +204,8 @@ typedef struct DynamicRangeControl {
  * DSP-specific primitives
  */
 typedef struct AACDecDSP {
+    void (*init_tables)(void);
+
     void (*dequant_scalefactors)(SingleChannelElement *sce);
 
     void (*apply_mid_side_stereo)(AACDecContext *ac, ChannelElement *cpe);



More information about the ffmpeg-cvslog mailing list