Mercurial > libavcodec.hg
comparison rdft.c @ 10408:8fd8f6c1cdcc libavcodec
Add support for hardcoded ff_sin_* tables.
| author | reimar |
|---|---|
| date | Thu, 15 Oct 2009 18:04:55 +0000 |
| parents | 57acce8b1380 |
| children | 63910f7ba293 |
comparison
equal
deleted
inserted
replaced
| 10407:57acce8b1380 | 10408:8fd8f6c1cdcc |
|---|---|
| 25 * @file libavcodec/rdft.c | 25 * @file libavcodec/rdft.c |
| 26 * (Inverse) Real Discrete Fourier Transforms. | 26 * (Inverse) Real Discrete Fourier Transforms. |
| 27 */ | 27 */ |
| 28 | 28 |
| 29 /* sin(2*pi*x/n) for 0<=x<n/4, followed by n/2<=x<3n/4 */ | 29 /* sin(2*pi*x/n) for 0<=x<n/4, followed by n/2<=x<3n/4 */ |
| 30 #if !CONFIG_HARDCODED_TABLES | |
| 30 SINTABLE(16); | 31 SINTABLE(16); |
| 31 SINTABLE(32); | 32 SINTABLE(32); |
| 32 SINTABLE(64); | 33 SINTABLE(64); |
| 33 SINTABLE(128); | 34 SINTABLE(128); |
| 34 SINTABLE(256); | 35 SINTABLE(256); |
| 38 SINTABLE(4096); | 39 SINTABLE(4096); |
| 39 SINTABLE(8192); | 40 SINTABLE(8192); |
| 40 SINTABLE(16384); | 41 SINTABLE(16384); |
| 41 SINTABLE(32768); | 42 SINTABLE(32768); |
| 42 SINTABLE(65536); | 43 SINTABLE(65536); |
| 43 FFTSample * const ff_sin_tabs[] = { | 44 #endif |
| 45 SINTABLE_CONST FFTSample * const ff_sin_tabs[] = { | |
| 44 ff_sin_16, ff_sin_32, ff_sin_64, ff_sin_128, ff_sin_256, ff_sin_512, ff_sin_1024, | 46 ff_sin_16, ff_sin_32, ff_sin_64, ff_sin_128, ff_sin_256, ff_sin_512, ff_sin_1024, |
| 45 ff_sin_2048, ff_sin_4096, ff_sin_8192, ff_sin_16384, ff_sin_32768, ff_sin_65536, | 47 ff_sin_2048, ff_sin_4096, ff_sin_8192, ff_sin_16384, ff_sin_32768, ff_sin_65536, |
| 46 }; | 48 }; |
| 47 | 49 |
| 48 av_cold int ff_rdft_init(RDFTContext *s, int nbits, enum RDFTransformType trans) | 50 av_cold int ff_rdft_init(RDFTContext *s, int nbits, enum RDFTransformType trans) |
| 61 if (ff_fft_init(&s->fft, nbits-1, trans == IRDFT || trans == RIDFT) < 0) | 63 if (ff_fft_init(&s->fft, nbits-1, trans == IRDFT || trans == RIDFT) < 0) |
| 62 return -1; | 64 return -1; |
| 63 | 65 |
| 64 s->tcos = ff_cos_tabs[nbits-4]; | 66 s->tcos = ff_cos_tabs[nbits-4]; |
| 65 s->tsin = ff_sin_tabs[nbits-4]+(trans == RDFT || trans == IRIDFT)*(n>>2); | 67 s->tsin = ff_sin_tabs[nbits-4]+(trans == RDFT || trans == IRIDFT)*(n>>2); |
| 68 #if !CONFIG_HARDCODED_TABLES | |
| 66 for (i = 0; i < (n>>2); i++) { | 69 for (i = 0; i < (n>>2); i++) { |
| 67 s->tsin[i] = sin(i*theta); | 70 s->tsin[i] = sin(i*theta); |
| 68 } | 71 } |
| 72 #endif | |
| 69 return 0; | 73 return 0; |
| 70 } | 74 } |
| 71 | 75 |
| 72 /** Map one real FFT into two parallel real even and odd FFTs. Then interleave | 76 /** Map one real FFT into two parallel real even and odd FFTs. Then interleave |
| 73 * the two real FFTs into one complex FFT. Unmangle the results. | 77 * the two real FFTs into one complex FFT. Unmangle the results. |
