[FFmpeg-devel] [PATCH] get rid of ff_cos_tabs and ff_sin_tabs offsets

Reimar Döffinger Reimar.Doeffinger
Wed Nov 4 10:16:08 CET 2009


Hello,
currently ff_cos_tabs and ff_sin_tabs are indexed as [nr_bits - 4].
Attached patch instead adds NULL padding to get rid of that offset.
Obviously it wastes up to 64 bytes, but the slightly less confusing
code seems worth it to me, particularly since I intend to add
a function to initialize a specific element of those tables, where
it would be non-obvious if the argument is the index or the "bits".
-------------- next part --------------
Index: libavcodec/fft.c
===================================================================
--- libavcodec/fft.c	(revision 20431)
+++ libavcodec/fft.c	(working copy)
@@ -45,6 +45,7 @@
 COSTABLE(65536);
 #endif
 COSTABLE_CONST FFTSample * const ff_cos_tabs[] = {
+    NULL, NULL, NULL, NULL,
     ff_cos_16, ff_cos_32, ff_cos_64, ff_cos_128, ff_cos_256, ff_cos_512, ff_cos_1024,
     ff_cos_2048, ff_cos_4096, ff_cos_8192, ff_cos_16384, ff_cos_32768, ff_cos_65536,
 };
@@ -99,7 +100,7 @@
         for(j=4; j<=nbits; j++) {
             int m = 1<<j;
             double freq = 2*M_PI/m;
-            FFTSample *tab = ff_cos_tabs[j-4];
+            FFTSample *tab = ff_cos_tabs[j];
             for(i=0; i<=m/4; i++)
                 tab[i] = cos(i*freq);
             for(i=1; i<m/4; i++)
Index: libavcodec/rdft.c
===================================================================
--- libavcodec/rdft.c	(revision 20431)
+++ libavcodec/rdft.c	(working copy)
@@ -43,6 +43,7 @@
 SINTABLE(65536);
 #endif
 SINTABLE_CONST FFTSample * const ff_sin_tabs[] = {
+    NULL, NULL, NULL, NULL,
     ff_sin_16, ff_sin_32, ff_sin_64, ff_sin_128, ff_sin_256, ff_sin_512, ff_sin_1024,
     ff_sin_2048, ff_sin_4096, ff_sin_8192, ff_sin_16384, ff_sin_32768, ff_sin_65536,
 };
@@ -63,8 +64,8 @@
     if (ff_fft_init(&s->fft, nbits-1, trans == IRDFT || trans == RIDFT) < 0)
         return -1;
 
-    s->tcos = ff_cos_tabs[nbits-4];
-    s->tsin = ff_sin_tabs[nbits-4]+(trans == RDFT || trans == IRIDFT)*(n>>2);
+    s->tcos = ff_cos_tabs[nbits];
+    s->tsin = ff_sin_tabs[nbits]+(trans == RDFT || trans == IRIDFT)*(n>>2);
 #if !CONFIG_HARDCODED_TABLES
     for (i = 0; i < (n>>2); i++) {
         s->tsin[i] = sin(i*theta);
Index: libavcodec/dsputil.h
===================================================================
--- libavcodec/dsputil.h	(revision 20431)
+++ libavcodec/dsputil.h	(working copy)
@@ -767,7 +767,7 @@
 extern COSTABLE(16384);
 extern COSTABLE(32768);
 extern COSTABLE(65536);
-extern COSTABLE_CONST FFTSample* const ff_cos_tabs[13];
+extern COSTABLE_CONST FFTSample* const ff_cos_tabs[17];
 
 extern SINTABLE(16);
 extern SINTABLE(32);



More information about the ffmpeg-devel mailing list