---
libavcodec/fft-test.c | 21 ++++++++++++---------
1 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/libavcodec/fft-test.c b/libavcodec/fft-test.c
index 59a53dd..daebc71 100644
--- a/libavcodec/fft-test.c
+++ b/libavcodec/fft-test.c
@@ -59,14 +59,15 @@
# define FMT "%6d"
#endif
-struct {
+typedef struct {
float re, im;
-} *exptab;
+} FComplex;
-static void fft_ref_init(int nbits, int inverse)
+static FComplex* fft_ref_init(int nbits, int inverse)
{
int n, i;
double c1, s1, alpha;
+ FComplex *exptab;
n = 1 << nbits;
exptab = av_malloc((n / 2) * sizeof(*exptab));
@@ -80,9 +81,10 @@ static void fft_ref_init(int nbits, int inverse)
exptab[i].re = c1;
exptab[i].im = s1;
}
+ return exptab;
}
-static void fft_ref(FFTComplex *tabr, FFTComplex *tab, int nbits)
+static void fft_ref(FFTComplex *tabr, FFTComplex *tab, const FComplex *exptab,
int nbits)
{
int n, i, j, k, n2;
double tmp_re, tmp_im, s, c;
@@ -254,6 +256,7 @@ int main(int argc, char **argv)
DCTContext d1, *d = &d1;
int fft_size_2;
#endif
+ FComplex *exptab = NULL;
int fft_nbits, fft_size;
double scale = 1.0;
AVLFG prng;
@@ -313,7 +316,7 @@ int main(int argc, char **argv)
else
av_log(NULL, AV_LOG_INFO,"FFT");
ff_fft_init(s, fft_nbits, do_inverse);
- fft_ref_init(fft_nbits, do_inverse);
+ exptab = fft_ref_init(fft_nbits, do_inverse);
break;
#if CONFIG_FFT_FLOAT
case TRANSFORM_RDFT:
@@ -322,7 +325,7 @@ int main(int argc, char **argv)
else
av_log(NULL, AV_LOG_INFO,"DFT_R2C");
ff_rdft_init(r, fft_nbits, do_inverse ? IDFT_C2R : DFT_R2C);
- fft_ref_init(fft_nbits, do_inverse);
+ exptab = fft_ref_init(fft_nbits, do_inverse);
break;
case TRANSFORM_DCT:
if (do_inverse)
@@ -367,7 +370,7 @@ int main(int argc, char **argv)
s->fft_permute(s, tab);
s->fft_calc(s, tab);
- fft_ref(tab_ref, tab1, fft_nbits);
+ fft_ref(tab_ref, tab1, exptab, fft_nbits);
err = check_diff((FFTSample *)tab_ref, (FFTSample *)tab, fft_size * 2,
1.0);
break;
#if CONFIG_FFT_FLOAT
@@ -385,7 +388,7 @@ int main(int argc, char **argv)
tab2[1] = tab1[fft_size_2].re;
r->rdft_calc(r, tab2);
- fft_ref(tab_ref, tab1, fft_nbits);
+ fft_ref(tab_ref, tab1, exptab, fft_nbits);
for (i = 0; i < fft_size; i++) {
tab[i].re = tab2[i];
tab[i].im = 0;
@@ -397,7 +400,7 @@ int main(int argc, char **argv)
tab1[i].im = 0;
}
r->rdft_calc(r, tab2);
- fft_ref(tab_ref, tab1, fft_nbits);
+ fft_ref(tab_ref, tab1, exptab, fft_nbits);
tab_ref[0].im = tab_ref[fft_size_2].re;
err = check_diff((float *)tab_ref, (float *)tab2, fft_size, 1.0);
}
--
1.7.3.1
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel