~ubuntu-branches/ubuntu/jaunty/xvidcap/jaunty-proposed

« back to all changes in this revision

Viewing changes to ffmpeg/libavcodec/fft-test.c

  • Committer: Bazaar Package Importer
  • Author(s): Lionel Le Folgoc
  • Date: 2008-12-26 00:10:06 UTC
  • mto: This revision was merged to the branch mainline in revision 8.
  • Revision ID: james.westby@ubuntu.com-20081226001006-wd8cuqn8d81smkdp
Tags: upstream-1.1.7
ImportĀ upstreamĀ versionĀ 1.1.7

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
#include <math.h>
28
28
#include <unistd.h>
29
29
#include <sys/time.h>
 
30
#include <stdlib.h>
 
31
#include <string.h>
 
32
 
 
33
#undef exit
 
34
#undef random
30
35
 
31
36
int mm_flags;
32
37
 
45
50
void fft_ref_init(int nbits, int inverse)
46
51
{
47
52
    int n, i;
48
 
    float c1, s1, alpha;
 
53
    double c1, s1, alpha;
49
54
 
50
55
    n = 1 << nbits;
51
56
    exptab = av_malloc((n / 2) * sizeof(FFTComplex));
64
69
void fft_ref(FFTComplex *tabr, FFTComplex *tab, int nbits)
65
70
{
66
71
    int n, i, j, k, n2;
67
 
    float tmp_re, tmp_im, s, c;
 
72
    double tmp_re, tmp_im, s, c;
68
73
    FFTComplex *q;
69
74
 
70
75
    n = 1 << nbits;
90
95
    }
91
96
}
92
97
 
93
 
void imdct_ref(float *out, float *in, int n)
 
98
void imdct_ref(float *out, float *in, int nbits)
94
99
{
 
100
    int n = 1<<nbits;
95
101
    int k, i, a;
96
 
    float sum, f;
 
102
    double sum, f;
97
103
 
98
104
    for(i=0;i<n;i++) {
99
105
        sum = 0;
107
113
}
108
114
 
109
115
/* NOTE: no normalisation by 1 / N is done */
110
 
void mdct_ref(float *output, float *input, int n)
 
116
void mdct_ref(float *output, float *input, int nbits)
111
117
{
 
118
    int n = 1<<nbits;
112
119
    int k, i;
113
 
    float a, s;
 
120
    double a, s;
114
121
 
115
122
    /* do it by hand */
116
123
    for(k=0;k<n/2;k++) {
139
146
void check_diff(float *tab1, float *tab2, int n)
140
147
{
141
148
    int i;
 
149
    double max= 0;
 
150
    double error= 0;
142
151
 
143
152
    for(i=0;i<n;i++) {
144
 
        if (fabsf(tab1[i] - tab2[i]) >= 1e-3) {
 
153
        double e= fabsf(tab1[i] - tab2[i]);
 
154
        if (e >= 1e-3) {
145
155
            av_log(NULL, AV_LOG_ERROR, "ERROR %d: %f %f\n",
146
156
                   i, tab1[i], tab2[i]);
147
157
        }
 
158
        error+= e*e;
 
159
        if(e>max) max= e;
148
160
    }
 
161
    av_log(NULL, AV_LOG_INFO, "max:%f e:%g\n", max, sqrt(error)/n);
149
162
}
150
163
 
151
164
 
235
248
 
236
249
    if (do_mdct) {
237
250
        if (do_inverse) {
238
 
            imdct_ref((float *)tab_ref, (float *)tab1, fft_size);
 
251
            imdct_ref((float *)tab_ref, (float *)tab1, fft_nbits);
239
252
            ff_imdct_calc(m, tab2, (float *)tab1, tabtmp);
240
253
            check_diff((float *)tab_ref, tab2, fft_size);
241
254
        } else {
242
 
            mdct_ref((float *)tab_ref, (float *)tab1, fft_size);
 
255
            mdct_ref((float *)tab_ref, (float *)tab1, fft_nbits);
243
256
 
244
257
            ff_mdct_calc(m, tab2, (float *)tab1, tabtmp);
245
258