[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