diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2010-12-14 14:50:58 +0000 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2010-12-14 14:50:58 +0000 |
commit | 228315bbd3f8b2e77cea5fe0a14e461716f0c466 (patch) | |
tree | 438f5d93264b6760ab6081eb69280238e0373a1e /libavcodec/ac3enc.c | |
parent | a8d2b06b7c3c16cd624c846f9808408057a62935 (diff) | |
download | ffmpeg-228315bbd3f8b2e77cea5fe0a14e461716f0c466.tar.gz |
Fix the fixed-point MDCT and FFT tests so that they actually compile and work.
Also, use LFG from libavutil instead of random().
Originally committed as revision 25955 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/ac3enc.c')
-rw-r--r-- | libavcodec/ac3enc.c | 64 |
1 files changed, 30 insertions, 34 deletions
diff --git a/libavcodec/ac3enc.c b/libavcodec/ac3enc.c index 88c2f64082..eb4f753d95 100644 --- a/libavcodec/ac3enc.c +++ b/libavcodec/ac3enc.c @@ -1280,14 +1280,15 @@ static av_cold int AC3_encode_close(AVCodecContext *avctx) return 0; } -#if 0 +#ifdef TEST /*************************************************************************/ /* TEST */ -#undef random -#define FN (N/4) +#include "libavutil/lfg.h" -void fft_test(void) +#define FN (MDCT_SAMPLES/4) + +static void fft_test(AVLFG *lfg) { IComplex in[FN], in1[FN]; int k, n, i; @@ -1296,8 +1297,8 @@ void fft_test(void) /* FFT test */ for(i=0;i<FN;i++) { - in[i].re = random() % 65535 - 32767; - in[i].im = random() % 65535 - 32767; + in[i].re = av_lfg_get(lfg) % 65535 - 32767; + in[i].im = av_lfg_get(lfg) % 65535 - 32767; in1[i] = in[i]; } fft(in, 7); @@ -1311,67 +1312,62 @@ void fft_test(void) sum_re += in1[n].re * cos(a) - in1[n].im * sin(a); sum_im += in1[n].re * sin(a) + in1[n].im * cos(a); } - printf("%3d: %6d,%6d %6.0f,%6.0f\n", + av_log(NULL, AV_LOG_DEBUG, "%3d: %6d,%6d %6.0f,%6.0f\n", k, in[k].re, in[k].im, sum_re / FN, sum_im / FN); } } -void mdct_test(void) +static void mdct_test(AVLFG *lfg) { - int16_t input[N]; - int32_t output[N/2]; - float input1[N]; - float output1[N/2]; + int16_t input[MDCT_SAMPLES]; + int32_t output[AC3_MAX_COEFS]; + float input1[MDCT_SAMPLES]; + float output1[AC3_MAX_COEFS]; float s, a, err, e, emax; int i, k, n; - for(i=0;i<N;i++) { - input[i] = (random() % 65535 - 32767) * 9 / 10; + for(i=0;i<MDCT_SAMPLES;i++) { + input[i] = (av_lfg_get(lfg) % 65535 - 32767) * 9 / 10; input1[i] = input[i]; } mdct512(output, input); /* do it by hand */ - for(k=0;k<N/2;k++) { + for(k=0;k<AC3_MAX_COEFS;k++) { s = 0; - for(n=0;n<N;n++) { - a = (2*M_PI*(2*n+1+N/2)*(2*k+1) / (4 * N)); + for(n=0;n<MDCT_SAMPLES;n++) { + a = (2*M_PI*(2*n+1+MDCT_SAMPLES/2)*(2*k+1) / (4 * MDCT_SAMPLES)); s += input1[n] * cos(a); } - output1[k] = -2 * s / N; + output1[k] = -2 * s / MDCT_SAMPLES; } err = 0; emax = 0; - for(i=0;i<N/2;i++) { - printf("%3d: %7d %7.0f\n", i, output[i], output1[i]); + for(i=0;i<AC3_MAX_COEFS;i++) { + av_log(NULL, AV_LOG_DEBUG, "%3d: %7d %7.0f\n", i, output[i], output1[i]); e = output[i] - output1[i]; if (e > emax) emax = e; err += e * e; } - printf("err2=%f emax=%f\n", err / (N/2), emax); + av_log(NULL, AV_LOG_DEBUG, "err2=%f emax=%f\n", err / AC3_MAX_COEFS, emax); } -void test_ac3(void) +int main(void) { - AC3EncodeContext ctx; - unsigned char frame[AC3_MAX_CODED_FRAME_SIZE]; - int16_t samples[AC3_FRAME_SIZE]; - int ret, i; + AVLFG lfg; - AC3_encode_init(&ctx, 44100, 64000, 1); + av_log_set_level(AV_LOG_DEBUG); + mdct_init(9); - fft_test(); - mdct_test(); + fft_test(&lfg); + mdct_test(&lfg); - for(i=0;i<AC3_FRAME_SIZE;i++) - samples[i] = (int)(sin(2*M_PI*i*1000.0/44100) * 10000); - ret = AC3_encode_frame(&ctx, frame, samples); - printf("ret=%d\n", ret); + return 0; } -#endif +#endif /* TEST */ AVCodec ac3_encoder = { "ac3", |