]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/sinewin_tablegen.h
avformat: Constify all muxer/demuxers
[ffmpeg] / libavcodec / sinewin_tablegen.h
index 1959074189dd404ebdb1b17fdc925dd5b77ca421..6887d59cfe9ba6bffe664b661c97ef53009d34d6 100644 (file)
 // do not use libavutil/libm.h since this is compiled both
 // for the host and the target and config.h is only valid for the target
 #include <math.h>
-#include "libavcodec/aac_defines.h"
 #include "libavutil/attributes.h"
 #include "libavutil/common.h"
 
 #if !CONFIG_HARDCODED_TABLES
+#ifndef BUILD_TABLES
+#include "libavutil/thread.h"
+#endif
+
 SINETABLE(  32);
 SINETABLE(  64);
 SINETABLE( 128);
@@ -42,37 +45,68 @@ SINETABLE(2048);
 SINETABLE(4096);
 SINETABLE(8192);
 #else
-#if USE_FIXED
-#include "libavcodec/sinewin_fixed_tables.h"
-#else
 #include "libavcodec/sinewin_tables.h"
 #endif
-#endif
 
-#if USE_FIXED
-#define SIN_FIX(a) (int)floor((a) * 0x80000000 + 0.5)
-#else
-#define SIN_FIX(a) a
-#endif
-
-SINETABLE_CONST INTFLOAT * const AAC_RENAME(ff_sine_windows)[] = {
+SINETABLE_CONST float *const ff_sine_windows[] = {
     NULL, NULL, NULL, NULL, NULL, // unused
-    AAC_RENAME(ff_sine_32) , AAC_RENAME(ff_sine_64), AAC_RENAME(ff_sine_128),
-    AAC_RENAME(ff_sine_256), AAC_RENAME(ff_sine_512), AAC_RENAME(ff_sine_1024),
-    AAC_RENAME(ff_sine_2048), AAC_RENAME(ff_sine_4096), AAC_RENAME(ff_sine_8192),
+    ff_sine_32,   ff_sine_64,   ff_sine_128,
+    ff_sine_256,  ff_sine_512,  ff_sine_1024,
+    ff_sine_2048, ff_sine_4096, ff_sine_8192,
 };
 
 // Generate a sine window.
-av_cold void AAC_RENAME(ff_sine_window_init)(INTFLOAT *window, int n) {
+av_cold void ff_sine_window_init(float *window, int n)
+{
     int i;
     for(i = 0; i < n; i++)
-        window[i] = SIN_FIX(sinf((i + 0.5) * (M_PI / (2.0 * n))));
+        window[i] = sinf((i + 0.5) * (M_PI / (2.0 * n)));
+}
+
+#if !CONFIG_HARDCODED_TABLES && !defined(BUILD_TABLES)
+#define INIT_FF_SINE_WINDOW_INIT_FUNC(index)        \
+static void init_ff_sine_window_ ## index(void)     \
+{                                                   \
+    ff_sine_window_init(ff_sine_windows[index], 1 << index);\
 }
 
-av_cold void AAC_RENAME(ff_init_ff_sine_windows)(int index) {
-    assert(index >= 5 && index < FF_ARRAY_ELEMS(AAC_RENAME(ff_sine_windows)));
+INIT_FF_SINE_WINDOW_INIT_FUNC(5)
+INIT_FF_SINE_WINDOW_INIT_FUNC(6)
+INIT_FF_SINE_WINDOW_INIT_FUNC(7)
+INIT_FF_SINE_WINDOW_INIT_FUNC(8)
+INIT_FF_SINE_WINDOW_INIT_FUNC(9)
+INIT_FF_SINE_WINDOW_INIT_FUNC(10)
+INIT_FF_SINE_WINDOW_INIT_FUNC(11)
+INIT_FF_SINE_WINDOW_INIT_FUNC(12)
+INIT_FF_SINE_WINDOW_INIT_FUNC(13)
+
+static void (*const sine_window_init_func_array[])(void) = {
+    init_ff_sine_window_5,
+    init_ff_sine_window_6,
+    init_ff_sine_window_7,
+    init_ff_sine_window_8,
+    init_ff_sine_window_9,
+    init_ff_sine_window_10,
+    init_ff_sine_window_11,
+    init_ff_sine_window_12,
+    init_ff_sine_window_13,
+};
+
+static AVOnce init_sine_window_once[9] = {
+    AV_ONCE_INIT, AV_ONCE_INIT, AV_ONCE_INIT, AV_ONCE_INIT, AV_ONCE_INIT,
+    AV_ONCE_INIT, AV_ONCE_INIT, AV_ONCE_INIT, AV_ONCE_INIT
+};
+#endif
+
+av_cold void ff_init_ff_sine_windows(int index)
+{
+    assert(index >= 5 && index < FF_ARRAY_ELEMS(ff_sine_windows));
 #if !CONFIG_HARDCODED_TABLES
-    AAC_RENAME(ff_sine_window_init)(AAC_RENAME(ff_sine_windows)[index], 1 << index);
+#ifdef BUILD_TABLES
+    ff_sine_window_init(ff_sine_windows[index], 1 << index);
+#else
+    ff_thread_once(&init_sine_window_once[index - 5], sine_window_init_func_array[index - 5]);
+#endif
 #endif
 }