Browse code

Merge remote-tracking branch 'qatar/master'

* qatar/master: (36 commits)
ARM: allow unaligned buffer in fixed-point NEON FFT4
fate: test more FFT etc sizes
dca: set AVCodecContext frame_size for DTS audio
YASM: Shut up unused variable compiler warning with --disable-yasm.
x86_32: Fix build on x86_32 with --disable-yasm.
iirfilter: add fate test
doxygen: Add qmul docs.
ogg: propagate return values and return more meaningful error values
H.264: fix overreads of qscale_table
Remove unused static tables and static inline functions.
eval: clear Parser instances before using
dct-test: remove 'ref' function pointer from tables
build: Remove deleted 'check' target from .PHONY list.
oggdec: Abort Ogg header parsing when encountering a data packet.
Add LGPL license boilerplate to files lacking it.
mxfenc: small typo fix
doxygen: Fix documentation for some VP8 functions.
sha: use AV_RB32() instead of assuming buffer can be cast to uint32_t*
des: allow unaligned input and output buffers
aes: allow unaligned input and output buffers
...

Conflicts:
libavcodec/dct-test.c
libavcodec/libvpxenc.c
libavcodec/x86/dsputil_mmx.c
libavcodec/x86/h264_qpel_mmx.c
libavfilter/x86/gradfun.c
libavformat/oggdec.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>

Michael Niedermayer authored on 2011/07/05 08:46:03
Showing 34 changed files
... ...
@@ -164,5 +164,5 @@ $(sort $(OBJDIRS)):
164 164
 # so this saves some time on slow systems.
165 165
 .SUFFIXES:
166 166
 
167
-.PHONY: all all-yes alltools *clean check config examples install*
167
+.PHONY: all all-yes alltools *clean config examples install*
168 168
 .PHONY: testprogs uninstall*
... ...
@@ -75,9 +75,9 @@
75 75
 .endm
76 76
 
77 77
 function fft4_neon
78
-        vld1.16         {d0-d1},  [r0,:128]
78
+        vld1.16         {d0-d1},  [r0]
79 79
         fft4            d0,  d1,  d2,  d3
80
-        vst1.16         {d0-d1},  [r0,:128]
80
+        vst1.16         {d0-d1},  [r0]
81 81
         bx              lr
82 82
 endfunc
83 83
 
... ...
@@ -1650,6 +1650,7 @@ static int dca_decode_frame(AVCodecContext * avctx,
1650 1650
     //set AVCodec values with parsed data
1651 1651
     avctx->sample_rate = s->sample_rate;
1652 1652
     avctx->bit_rate = s->bit_rate;
1653
+    avctx->frame_size = s->sample_blocks * 32;
1653 1654
 
1654 1655
     s->profile = FF_PROFILE_DTS;
1655 1656
 
... ...
@@ -68,12 +68,12 @@ void ff_simple_idct_neon(DCTELEM *data);
68 68
 void ff_simple_idct_axp(DCTELEM *data);
69 69
 
70 70
 struct algo {
71
-  const char *name;
72
-  enum { FDCT, IDCT } is_idct;
73
-  void (* func) (DCTELEM *block);
74
-  void (* ref)  (DCTELEM *block);
75
-  enum formattag { NO_PERM,MMX_PERM, MMX_SIMPLE_PERM, SCALE_PERM, SSE2_PERM, PARTTRANS_PERM } format;
76
-  int  mm_support;
71
+    const char *name;
72
+    void (*func)(DCTELEM *block);
73
+    enum formattag { NO_PERM, MMX_PERM, MMX_SIMPLE_PERM, SCALE_PERM,
74
+                     SSE2_PERM, PARTTRANS_PERM } format;
75
+    int mm_support;
76
+    int nonspec;
77 77
 };
78 78
 
79 79
 #ifndef FAAN_POSTSCALE
... ...
@@ -84,61 +84,69 @@ struct algo {
84 84
 
85 85
 static int cpu_flags;
86 86
 
87
-struct algo algos[] = {
88
-  {"REF-DBL",         0, ff_ref_fdct,        ff_ref_fdct, NO_PERM},
89
-  {"FAAN",            0, ff_faandct,         ff_ref_fdct, FAAN_SCALE},
90
-  {"FAANI",           1, ff_faanidct,        ff_ref_idct, NO_PERM},
91
-  {"IJG-AAN-INT",     0, fdct_ifast,         ff_ref_fdct, SCALE_PERM},
92
-  {"IJG-LLM-INT",     0, ff_jpeg_fdct_islow, ff_ref_fdct, NO_PERM},
93
-  {"REF-DBL",         1, ff_ref_idct,        ff_ref_idct, NO_PERM},
94
-  {"INT",             1, j_rev_dct,          ff_ref_idct, MMX_PERM},
95
-  {"SIMPLE-C",        1, ff_simple_idct,     ff_ref_idct, NO_PERM},
87
+static const struct algo fdct_tab[] = {
88
+    { "REF-DBL",        ff_ref_fdct,           NO_PERM    },
89
+    { "FAAN",           ff_faandct,            FAAN_SCALE },
90
+    { "IJG-AAN-INT",    fdct_ifast,            SCALE_PERM },
91
+    { "IJG-LLM-INT",    ff_jpeg_fdct_islow,    NO_PERM    },
96 92
 
97 93
 #if HAVE_MMX
98
-  {"MMX",             0, ff_fdct_mmx,        ff_ref_fdct, NO_PERM, AV_CPU_FLAG_MMX},
99
-#if HAVE_MMX2
100
-  {"MMX2",            0, ff_fdct_mmx2,       ff_ref_fdct, NO_PERM, AV_CPU_FLAG_MMX2},
101
-  {"SSE2",            0, ff_fdct_sse2,       ff_ref_fdct, NO_PERM, AV_CPU_FLAG_SSE2},
94
+    { "MMX",            ff_fdct_mmx,           NO_PERM,   AV_CPU_FLAG_MMX     },
95
+    { "MMX2",           ff_fdct_mmx2,          NO_PERM,   AV_CPU_FLAG_MMX2    },
96
+    { "SSE2",           ff_fdct_sse2,          NO_PERM,   AV_CPU_FLAG_SSE2    },
102 97
 #endif
103 98
 
104
-#if CONFIG_GPL
105
-  {"LIBMPEG2-MMX",    1, ff_mmx_idct,        ff_ref_idct, MMX_PERM, AV_CPU_FLAG_MMX},
106
-  {"LIBMPEG2-MMX2",   1, ff_mmxext_idct,     ff_ref_idct, MMX_PERM, AV_CPU_FLAG_MMX2},
99
+#if HAVE_ALTIVEC
100
+    { "altivecfdct",    fdct_altivec,          NO_PERM,   AV_CPU_FLAG_ALTIVEC },
107 101
 #endif
108
-  {"SIMPLE-MMX",      1, ff_simple_idct_mmx, ff_ref_idct, MMX_SIMPLE_PERM, AV_CPU_FLAG_MMX},
109
-  {"XVID-MMX",        1, ff_idct_xvid_mmx,   ff_ref_idct, NO_PERM, AV_CPU_FLAG_MMX},
110
-  {"XVID-MMX2",       1, ff_idct_xvid_mmx2,  ff_ref_idct, NO_PERM, AV_CPU_FLAG_MMX2},
111
-  {"XVID-SSE2",       1, ff_idct_xvid_sse2,  ff_ref_idct, SSE2_PERM, AV_CPU_FLAG_SSE2},
102
+
103
+#if ARCH_BFIN
104
+    { "BFINfdct",       ff_bfin_fdct,          NO_PERM  },
112 105
 #endif
113 106
 
114
-#if HAVE_ALTIVEC
115
-  {"altivecfdct",     0, fdct_altivec,       ff_ref_fdct, NO_PERM, AV_CPU_FLAG_ALTIVEC},
107
+    { 0 }
108
+};
109
+
110
+static const struct algo idct_tab[] = {
111
+    { "FAANI",          ff_faanidct,           NO_PERM  },
112
+    { "REF-DBL",        ff_ref_idct,           NO_PERM  },
113
+    { "INT",            j_rev_dct,             MMX_PERM },
114
+    { "SIMPLE-C",       ff_simple_idct,        NO_PERM  },
115
+
116
+#if HAVE_MMX
117
+#if CONFIG_GPL
118
+    { "LIBMPEG2-MMX",   ff_mmx_idct,           MMX_PERM,  AV_CPU_FLAG_MMX,  1 },
119
+    { "LIBMPEG2-MMX2",  ff_mmxext_idct,        MMX_PERM,  AV_CPU_FLAG_MMX2, 1 },
120
+#endif
121
+    { "SIMPLE-MMX",     ff_simple_idct_mmx,  MMX_SIMPLE_PERM, AV_CPU_FLAG_MMX },
122
+    { "XVID-MMX",       ff_idct_xvid_mmx,      NO_PERM,   AV_CPU_FLAG_MMX,  1 },
123
+    { "XVID-MMX2",      ff_idct_xvid_mmx2,     NO_PERM,   AV_CPU_FLAG_MMX2, 1 },
124
+    { "XVID-SSE2",      ff_idct_xvid_sse2,     SSE2_PERM, AV_CPU_FLAG_SSE2, 1 },
116 125
 #endif
117 126
 
118 127
 #if ARCH_BFIN
119
-  {"BFINfdct",        0, ff_bfin_fdct,       ff_ref_fdct, NO_PERM},
120
-  {"BFINidct",        1, ff_bfin_idct,       ff_ref_idct, NO_PERM},
128
+    { "BFINidct",       ff_bfin_idct,          NO_PERM  },
121 129
 #endif
122 130
 
123 131
 #if ARCH_ARM
124
-  {"SIMPLE-ARM",      1, ff_simple_idct_arm, ff_ref_idct, NO_PERM },
125
-  {"INT-ARM",         1, ff_j_rev_dct_arm,   ff_ref_idct, MMX_PERM },
132
+    { "SIMPLE-ARM",     ff_simple_idct_arm,    NO_PERM  },
133
+    { "INT-ARM",        ff_j_rev_dct_arm,      MMX_PERM },
134
+#endif
126 135
 #if HAVE_ARMV5TE
127
-  {"SIMPLE-ARMV5TE",  1, ff_simple_idct_armv5te, ff_ref_idct, NO_PERM },
136
+    { "SIMPLE-ARMV5TE", ff_simple_idct_armv5te,NO_PERM  },
128 137
 #endif
129 138
 #if HAVE_ARMV6
130
-  {"SIMPLE-ARMV6",    1, ff_simple_idct_armv6, ff_ref_idct, MMX_PERM },
139
+    { "SIMPLE-ARMV6",   ff_simple_idct_armv6,  MMX_PERM },
131 140
 #endif
132 141
 #if HAVE_NEON
133
-  {"SIMPLE-NEON",     1, ff_simple_idct_neon, ff_ref_idct, PARTTRANS_PERM },
142
+    { "SIMPLE-NEON",    ff_simple_idct_neon,   PARTTRANS_PERM },
134 143
 #endif
135
-#endif /* ARCH_ARM */
136 144
 
137 145
 #if ARCH_ALPHA
138
-  {"SIMPLE-ALPHA",    1, ff_simple_idct_axp,  ff_ref_idct, NO_PERM },
146
+    { "SIMPLE-ALPHA",   ff_simple_idct_axp,    NO_PERM },
139 147
 #endif
140 148
 
141
-  { 0 }
149
+    { 0 }
142 150
 };
143 151
 
144 152
 #define AANSCALE_BITS 12
... ...
@@ -148,7 +156,7 @@ uint8_t cropTbl[256 + 2 * MAX_NEG_CROP];
148 148
 static int64_t gettime(void)
149 149
 {
150 150
     struct timeval tv;
151
-    gettimeofday(&tv,NULL);
151
+    gettimeofday(&tv, NULL);
152 152
     return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec;
153 153
 }
154 154
 
... ...
@@ -157,18 +165,18 @@ static int64_t gettime(void)
157 157
 
158 158
 static short idct_mmx_perm[64];
159 159
 
160
-static short idct_simple_mmx_perm[64]={
161
-        0x00, 0x08, 0x04, 0x09, 0x01, 0x0C, 0x05, 0x0D,
162
-        0x10, 0x18, 0x14, 0x19, 0x11, 0x1C, 0x15, 0x1D,
163
-        0x20, 0x28, 0x24, 0x29, 0x21, 0x2C, 0x25, 0x2D,
164
-        0x12, 0x1A, 0x16, 0x1B, 0x13, 0x1E, 0x17, 0x1F,
165
-        0x02, 0x0A, 0x06, 0x0B, 0x03, 0x0E, 0x07, 0x0F,
166
-        0x30, 0x38, 0x34, 0x39, 0x31, 0x3C, 0x35, 0x3D,
167
-        0x22, 0x2A, 0x26, 0x2B, 0x23, 0x2E, 0x27, 0x2F,
168
-        0x32, 0x3A, 0x36, 0x3B, 0x33, 0x3E, 0x37, 0x3F,
160
+static short idct_simple_mmx_perm[64] = {
161
+    0x00, 0x08, 0x04, 0x09, 0x01, 0x0C, 0x05, 0x0D,
162
+    0x10, 0x18, 0x14, 0x19, 0x11, 0x1C, 0x15, 0x1D,
163
+    0x20, 0x28, 0x24, 0x29, 0x21, 0x2C, 0x25, 0x2D,
164
+    0x12, 0x1A, 0x16, 0x1B, 0x13, 0x1E, 0x17, 0x1F,
165
+    0x02, 0x0A, 0x06, 0x0B, 0x03, 0x0E, 0x07, 0x0F,
166
+    0x30, 0x38, 0x34, 0x39, 0x31, 0x3C, 0x35, 0x3D,
167
+    0x22, 0x2A, 0x26, 0x2B, 0x23, 0x2E, 0x27, 0x2F,
168
+    0x32, 0x3A, 0x36, 0x3B, 0x33, 0x3E, 0x37, 0x3F,
169 169
 };
170 170
 
171
-static const uint8_t idct_sse2_row_perm[8] = {0, 4, 1, 5, 2, 6, 3, 7};
171
+static const uint8_t idct_sse2_row_perm[8] = { 0, 4, 1, 5, 2, 6, 3, 7 };
172 172
 
173 173
 static void idct_mmx_init(void)
174 174
 {
... ...
@@ -177,13 +185,12 @@ static void idct_mmx_init(void)
177 177
     /* the mmx/mmxext idct uses a reordered input, so we patch scan tables */
178 178
     for (i = 0; i < 64; i++) {
179 179
         idct_mmx_perm[i] = (i & 0x38) | ((i & 6) >> 1) | ((i & 1) << 2);
180
-//        idct_simple_mmx_perm[i] = simple_block_permute_op(i);
181 180
     }
182 181
 }
183 182
 
184 183
 DECLARE_ALIGNED(16, static DCTELEM, block)[64];
185
-DECLARE_ALIGNED(8, static DCTELEM, block1)[64];
186
-DECLARE_ALIGNED(8, static DCTELEM, block_org)[64];
184
+DECLARE_ALIGNED(8,  static DCTELEM, block1)[64];
185
+DECLARE_ALIGNED(8,  static DCTELEM, block_org)[64];
187 186
 
188 187
 static inline void mmx_emms(void)
189 188
 {
... ...
@@ -193,188 +200,177 @@ static inline void mmx_emms(void)
193 193
 #endif
194 194
 }
195 195
 
196
-static void dct_error(const char *name, int is_idct,
197
-               void (*fdct_func)(DCTELEM *block),
198
-               void (*fdct_ref)(DCTELEM *block), int form, int test, const int bits)
196
+
197
+static int dct_error(const struct algo *dct, int test, int is_idct, int speed, const int bits)
199 198
 {
199
+    void (*ref)(DCTELEM *block) = is_idct ? ff_ref_idct : ff_ref_fdct;
200 200
     int it, i, scale;
201 201
     int err_inf, v;
202
-    int64_t err2, ti, ti1, it1;
203
-    int64_t sysErr[64], sysErrMax=0;
204
-    int maxout=0;
205
-    int blockSumErrMax=0, blockSumErr;
202
+    int64_t err2, ti, ti1, it1, err_sum = 0;
203
+    int64_t sysErr[64], sysErrMax = 0;
204
+    int maxout = 0;
205
+    int blockSumErrMax = 0, blockSumErr;
206 206
     AVLFG prng;
207 207
     const int vals=1<<bits;
208
+    double omse, ome;
209
+    int spec_err;
208 210
 
209 211
     av_lfg_init(&prng, 1);
210 212
 
211 213
     err_inf = 0;
212 214
     err2 = 0;
213
-    for(i=0; i<64; i++) sysErr[i]=0;
214
-    for(it=0;it<NB_ITS;it++) {
215
-        for(i=0;i<64;i++)
215
+    for (i = 0; i < 64; i++)
216
+        sysErr[i] = 0;
217
+    for (it = 0; it < NB_ITS; it++) {
218
+        for (i = 0; i < 64; i++)
216 219
             block1[i] = 0;
217
-        switch(test){
220
+        switch (test) {
218 221
         case 0:
219
-            for(i=0;i<64;i++)
222
+            for (i = 0; i < 64; i++)
220 223
                 block1[i] = (av_lfg_get(&prng) % (2*vals)) -vals;
221
-            if (is_idct){
224
+            if (is_idct) {
222 225
                 ff_ref_fdct(block1);
223
-
224
-                for(i=0;i<64;i++)
225
-                    block1[i]>>=3;
226
+                for (i = 0; i < 64; i++)
227
+                    block1[i] >>= 3;
226 228
             }
227
-        break;
228
-        case 1:{
229
-            int num = av_lfg_get(&prng) % 10 + 1;
230
-            for(i=0;i<num;i++)
231
-                block1[av_lfg_get(&prng) % 64] = av_lfg_get(&prng) % (2*vals) -vals;
232
-        }break;
229
+            break;
230
+        case 1: {
231
+                int num = av_lfg_get(&prng) % 10 + 1;
232
+                for (i = 0; i < num; i++)
233
+                    block1[av_lfg_get(&prng) % 64] = av_lfg_get(&prng) % (2*vals) -vals;
234
+            }
235
+            break;
233 236
         case 2:
234 237
             block1[0] = av_lfg_get(&prng) % (16*vals) - (8*vals);
235
-            block1[63]= (block1[0]&1)^1;
236
-        break;
238
+            block1[63] = (block1[0] & 1) ^ 1;
239
+            break;
237 240
         }
238 241
 
239
-#if 0 // simulate mismatch control
240
-{ int sum=0;
241
-        for(i=0;i<64;i++)
242
-           sum+=block1[i];
243
-
244
-        if((sum&1)==0) block1[63]^=1;
245
-}
246
-#endif
242
+        for (i = 0; i < 64; i++)
243
+            block_org[i] = block1[i];
247 244
 
248
-        for(i=0; i<64; i++)
249
-            block_org[i]= block1[i];
250
-
251
-        if (form == MMX_PERM) {
252
-            for(i=0;i<64;i++)
245
+        if (dct->format == MMX_PERM) {
246
+            for (i = 0; i < 64; i++)
253 247
                 block[idct_mmx_perm[i]] = block1[i];
254
-            } else if (form == MMX_SIMPLE_PERM) {
255
-            for(i=0;i<64;i++)
248
+        } else if (dct->format == MMX_SIMPLE_PERM) {
249
+            for (i = 0; i < 64; i++)
256 250
                 block[idct_simple_mmx_perm[i]] = block1[i];
257
-
258
-        } else if (form == SSE2_PERM) {
259
-            for(i=0; i<64; i++)
260
-                block[(i&0x38) | idct_sse2_row_perm[i&7]] = block1[i];
261
-        } else if (form == PARTTRANS_PERM) {
262
-            for(i=0; i<64; i++)
263
-                block[(i&0x24) | ((i&3)<<3) | ((i>>3)&3)] = block1[i];
251
+        } else if (dct->format == SSE2_PERM) {
252
+            for (i = 0; i < 64; i++)
253
+                block[(i & 0x38) | idct_sse2_row_perm[i & 7]] = block1[i];
254
+        } else if (dct->format == PARTTRANS_PERM) {
255
+            for (i = 0; i < 64; i++)
256
+                block[(i & 0x24) | ((i & 3) << 3) | ((i >> 3) & 3)] = block1[i];
264 257
         } else {
265
-            for(i=0; i<64; i++)
266
-                block[i]= block1[i];
258
+            for (i = 0; i < 64; i++)
259
+                block[i] = block1[i];
267 260
         }
268
-#if 0 // simulate mismatch control for tested IDCT but not the ref
269
-{ int sum=0;
270
-        for(i=0;i<64;i++)
271
-           sum+=block[i];
272
-
273
-        if((sum&1)==0) block[63]^=1;
274
-}
275
-#endif
276 261
 
277
-        fdct_func(block);
262
+        dct->func(block);
278 263
         mmx_emms();
279 264
 
280
-        if (form == SCALE_PERM) {
281
-            for(i=0; i<64; i++) {
282
-                scale = 8*(1 << (AANSCALE_BITS + 11)) / ff_aanscales[i];
283
-                block[i] = (block[i] * scale /*+ (1<<(AANSCALE_BITS-1))*/) >> AANSCALE_BITS;
265
+        if (dct->format == SCALE_PERM) {
266
+            for (i = 0; i < 64; i++) {
267
+                scale = 8 * (1 << (AANSCALE_BITS + 11)) / ff_aanscales[i];
268
+                block[i] = (block[i] * scale) >> AANSCALE_BITS;
284 269
             }
285 270
         }
286 271
 
287
-        fdct_ref(block1);
272
+        ref(block1);
288 273
 
289
-        blockSumErr=0;
290
-        for(i=0;i<64;i++) {
291
-            v = abs(block[i] - block1[i]);
274
+        blockSumErr = 0;
275
+        for (i = 0; i < 64; i++) {
276
+            int err = block[i] - block1[i];
277
+            err_sum += err;
278
+            v = abs(err);
292 279
             if (v > err_inf)
293 280
                 err_inf = v;
294 281
             err2 += v * v;
295 282
             sysErr[i] += block[i] - block1[i];
296 283
             blockSumErr += v;
297
-            if( abs(block[i])>maxout) maxout=abs(block[i]);
284
+            if (abs(block[i]) > maxout)
285
+                maxout = abs(block[i]);
298 286
         }
299
-        if(blockSumErrMax < blockSumErr) blockSumErrMax= blockSumErr;
300
-#if 0 // print different matrix pairs
301
-        if(blockSumErr){
302
-            printf("\n");
303
-            for(i=0; i<64; i++){
304
-                if((i&7)==0) printf("\n");
305
-                printf("%4d ", block_org[i]);
306
-            }
307
-            for(i=0; i<64; i++){
308
-                if((i&7)==0) printf("\n");
309
-                printf("%4d ", block[i] - block1[i]);
310
-            }
311
-        }
312
-#endif
287
+        if (blockSumErrMax < blockSumErr)
288
+            blockSumErrMax = blockSumErr;
313 289
     }
314
-    for(i=0; i<64; i++) sysErrMax= FFMAX(sysErrMax, FFABS(sysErr[i]));
290
+    for (i = 0; i < 64; i++)
291
+        sysErrMax = FFMAX(sysErrMax, FFABS(sysErr[i]));
315 292
 
316
-    for(i=0; i<64; i++){
317
-        if(i%8==0) printf("\n");
318
-        printf("%7d ", (int)sysErr[i]);
293
+    for (i = 0; i < 64; i++) {
294
+        if (i % 8 == 0)
295
+            printf("\n");
296
+        printf("%7d ", (int) sysErr[i]);
319 297
     }
320 298
     printf("\n");
321 299
 
322
-    printf("%s %s: err_inf=%d err2=%0.8f syserr=%0.8f maxout=%d blockSumErr=%d\n",
323
-           is_idct ? "IDCT" : "DCT",
324
-           name, err_inf, (double)err2 / NB_ITS / 64.0, (double)sysErrMax / NB_ITS, maxout, blockSumErrMax);
300
+    omse = (double) err2 / NB_ITS / 64;
301
+    ome  = (double) err_sum / NB_ITS / 64;
302
+
303
+    spec_err = is_idct && (err_inf > 1 || omse > 0.02 || fabs(ome) > 0.0015);
304
+
305
+    printf("%s %s: ppe=%d omse=%0.8f ome=%0.8f syserr=%0.8f maxout=%d blockSumErr=%d\n",
306
+           is_idct ? "IDCT" : "DCT", dct->name, err_inf,
307
+           omse, ome, (double) sysErrMax / NB_ITS,
308
+           maxout, blockSumErrMax);
309
+
310
+    if (spec_err && !dct->nonspec)
311
+        return 1;
312
+
313
+    if (!speed)
314
+        return 0;
325 315
 
326 316
     /* speed test */
327
-    for(i=0;i<64;i++)
317
+    for (i = 0; i < 64; i++)
328 318
         block1[i] = 0;
329
-    switch(test){
319
+
320
+    switch (test) {
330 321
     case 0:
331
-        for(i=0;i<64;i++)
322
+        for (i = 0; i < 64; i++)
332 323
             block1[i] = av_lfg_get(&prng) % (2*vals) -vals;
333
-        if (is_idct){
324
+        if (is_idct) {
334 325
             ff_ref_fdct(block1);
335
-
336
-            for(i=0;i<64;i++)
337
-                block1[i]>>=3;
326
+            for (i = 0; i < 64; i++)
327
+                block1[i] >>= 3;
338 328
         }
339
-    break;
340
-    case 1:{
329
+        break;
330
+    case 1:
341 331
     case 2:
342 332
         block1[0] = av_lfg_get(&prng) % (2*vals) -vals;
343 333
         block1[1] = av_lfg_get(&prng) % (2*vals) -vals;
344 334
         block1[2] = av_lfg_get(&prng) % (2*vals) -vals;
345 335
         block1[3] = av_lfg_get(&prng) % (2*vals) -vals;
346
-    }break;
336
+        break;
347 337
     }
348 338
 
349
-    if (form == MMX_PERM) {
350
-        for(i=0;i<64;i++)
339
+    if (dct->format == MMX_PERM) {
340
+        for (i = 0; i < 64; i++)
351 341
             block[idct_mmx_perm[i]] = block1[i];
352
-    } else if(form == MMX_SIMPLE_PERM) {
353
-        for(i=0;i<64;i++)
342
+    } else if (dct->format == MMX_SIMPLE_PERM) {
343
+        for (i = 0; i < 64; i++)
354 344
             block[idct_simple_mmx_perm[i]] = block1[i];
355 345
     } else {
356
-        for(i=0; i<64; i++)
357
-            block[i]= block1[i];
346
+        for (i = 0; i < 64; i++)
347
+            block[i] = block1[i];
358 348
     }
359 349
 
360 350
     ti = gettime();
361 351
     it1 = 0;
362 352
     do {
363
-        for(it=0;it<NB_ITS_SPEED;it++) {
364
-            for(i=0; i<64; i++)
365
-                block[i]= block1[i];
366
-//            memcpy(block, block1, sizeof(DCTELEM) * 64);
367
-// do not memcpy especially not fastmemcpy because it does movntq !!!
368
-            fdct_func(block);
353
+        for (it = 0; it < NB_ITS_SPEED; it++) {
354
+            for (i = 0; i < 64; i++)
355
+                block[i] = block1[i];
356
+            dct->func(block);
369 357
         }
370 358
         it1 += NB_ITS_SPEED;
371 359
         ti1 = gettime() - ti;
372 360
     } while (ti1 < 1000000);
373 361
     mmx_emms();
374 362
 
375
-    printf("%s %s: %0.1f kdct/s\n",
376
-           is_idct ? "IDCT" : "DCT",
377
-           name, (double)it1 * 1000.0 / (double)ti1);
363
+    printf("%s %s: %0.1f kdct/s\n", is_idct ? "IDCT" : "DCT", dct->name,
364
+           (double) it1 * 1000.0 / (double) ti1);
365
+
366
+    return 0;
378 367
 }
379 368
 
380 369
 DECLARE_ALIGNED(8, static uint8_t, img_dest)[64];
... ...
@@ -392,19 +388,19 @@ static void idct248_ref(uint8_t *dest, int linesize, int16_t *block)
392 392
     if (!init) {
393 393
         init = 1;
394 394
 
395
-        for(i=0;i<8;i++) {
395
+        for (i = 0; i < 8; i++) {
396 396
             sum = 0;
397
-            for(j=0;j<8;j++) {
398
-                s = (i==0) ? sqrt(1.0/8.0) : sqrt(1.0/4.0);
397
+            for (j = 0; j < 8; j++) {
398
+                s = (i == 0) ? sqrt(1.0 / 8.0) : sqrt(1.0 / 4.0);
399 399
                 c8[i][j] = s * cos(M_PI * i * (j + 0.5) / 8.0);
400 400
                 sum += c8[i][j] * c8[i][j];
401 401
             }
402 402
         }
403 403
 
404
-        for(i=0;i<4;i++) {
404
+        for (i = 0; i < 4; i++) {
405 405
             sum = 0;
406
-            for(j=0;j<4;j++) {
407
-                s = (i==0) ? sqrt(1.0/4.0) : sqrt(1.0/2.0);
406
+            for (j = 0; j < 4; j++) {
407
+                s = (i == 0) ? sqrt(1.0 / 4.0) : sqrt(1.0 / 2.0);
408 408
                 c4[i][j] = s * cos(M_PI * i * (j + 0.5) / 4.0);
409 409
                 sum += c4[i][j] * c4[i][j];
410 410
             }
... ...
@@ -413,58 +409,59 @@ static void idct248_ref(uint8_t *dest, int linesize, int16_t *block)
413 413
 
414 414
     /* butterfly */
415 415
     s = 0.5 * sqrt(2.0);
416
-    for(i=0;i<4;i++) {
417
-        for(j=0;j<8;j++) {
418
-            block1[8*(2*i)+j] = (block[8*(2*i)+j] + block[8*(2*i+1)+j]) * s;
419
-            block1[8*(2*i+1)+j] = (block[8*(2*i)+j] - block[8*(2*i+1)+j]) * s;
416
+    for (i = 0; i < 4; i++) {
417
+        for (j = 0; j < 8; j++) {
418
+            block1[8 * (2 * i) + j] =
419
+                (block[8 * (2 * i) + j] + block[8 * (2 * i + 1) + j]) * s;
420
+            block1[8 * (2 * i + 1) + j] =
421
+                (block[8 * (2 * i) + j] - block[8 * (2 * i + 1) + j]) * s;
420 422
         }
421 423
     }
422 424
 
423 425
     /* idct8 on lines */
424
-    for(i=0;i<8;i++) {
425
-        for(j=0;j<8;j++) {
426
+    for (i = 0; i < 8; i++) {
427
+        for (j = 0; j < 8; j++) {
426 428
             sum = 0;
427
-            for(k=0;k<8;k++)
428
-                sum += c8[k][j] * block1[8*i+k];
429
-            block2[8*i+j] = sum;
429
+            for (k = 0; k < 8; k++)
430
+                sum += c8[k][j] * block1[8 * i + k];
431
+            block2[8 * i + j] = sum;
430 432
         }
431 433
     }
432 434
 
433 435
     /* idct4 */
434
-    for(i=0;i<8;i++) {
435
-        for(j=0;j<4;j++) {
436
+    for (i = 0; i < 8; i++) {
437
+        for (j = 0; j < 4; j++) {
436 438
             /* top */
437 439
             sum = 0;
438
-            for(k=0;k<4;k++)
439
-                sum += c4[k][j] * block2[8*(2*k)+i];
440
-            block3[8*(2*j)+i] = sum;
440
+            for (k = 0; k < 4; k++)
441
+                sum += c4[k][j] * block2[8 * (2 * k) + i];
442
+            block3[8 * (2 * j) + i] = sum;
441 443
 
442 444
             /* bottom */
443 445
             sum = 0;
444
-            for(k=0;k<4;k++)
445
-                sum += c4[k][j] * block2[8*(2*k+1)+i];
446
-            block3[8*(2*j+1)+i] = sum;
446
+            for (k = 0; k < 4; k++)
447
+                sum += c4[k][j] * block2[8 * (2 * k + 1) + i];
448
+            block3[8 * (2 * j + 1) + i] = sum;
447 449
         }
448 450
     }
449 451
 
450 452
     /* clamp and store the result */
451
-    for(i=0;i<8;i++) {
452
-        for(j=0;j<8;j++) {
453
-            v = block3[8*i+j];
454
-            if (v < 0)
455
-                v = 0;
456
-            else if (v > 255)
457
-                v = 255;
458
-            dest[i * linesize + j] = (int)rint(v);
453
+    for (i = 0; i < 8; i++) {
454
+        for (j = 0; j < 8; j++) {
455
+            v = block3[8 * i + j];
456
+            if      (v < 0)   v = 0;
457
+            else if (v > 255) v = 255;
458
+            dest[i * linesize + j] = (int) rint(v);
459 459
         }
460 460
     }
461 461
 }
462 462
 
463 463
 static void idct248_error(const char *name,
464
-                    void (*idct248_put)(uint8_t *dest, int line_size, int16_t *block))
464
+                          void (*idct248_put)(uint8_t *dest, int line_size,
465
+                                              int16_t *block),
466
+                          int speed)
465 467
 {
466 468
     int it, i, it1, ti, ti1, err_max, v;
467
-
468 469
     AVLFG prng;
469 470
 
470 471
     av_lfg_init(&prng, 1);
... ...
@@ -472,23 +469,22 @@ static void idct248_error(const char *name,
472 472
     /* just one test to see if code is correct (precision is less
473 473
        important here) */
474 474
     err_max = 0;
475
-    for(it=0;it<NB_ITS;it++) {
476
-
475
+    for (it = 0; it < NB_ITS; it++) {
477 476
         /* XXX: use forward transform to generate values */
478
-        for(i=0;i<64;i++)
477
+        for (i = 0; i < 64; i++)
479 478
             block1[i] = av_lfg_get(&prng) % 256 - 128;
480 479
         block1[0] += 1024;
481 480
 
482
-        for(i=0; i<64; i++)
483
-            block[i]= block1[i];
481
+        for (i = 0; i < 64; i++)
482
+            block[i] = block1[i];
484 483
         idct248_ref(img_dest1, 8, block);
485 484
 
486
-        for(i=0; i<64; i++)
487
-            block[i]= block1[i];
485
+        for (i = 0; i < 64; i++)
486
+            block[i] = block1[i];
488 487
         idct248_put(img_dest, 8, block);
489 488
 
490
-        for(i=0;i<64;i++) {
491
-            v = abs((int)img_dest[i] - (int)img_dest1[i]);
489
+        for (i = 0; i < 64; i++) {
490
+            v = abs((int) img_dest[i] - (int) img_dest1[i]);
492 491
             if (v == 255)
493 492
                 printf("%d %d\n", img_dest[i], img_dest1[i]);
494 493
             if (v > err_max)
... ...
@@ -514,18 +510,17 @@ static void idct248_error(const char *name,
514 514
         }
515 515
 #endif
516 516
     }
517
-    printf("%s %s: err_inf=%d\n",
518
-           1 ? "IDCT248" : "DCT248",
519
-           name, err_max);
517
+    printf("%s %s: err_inf=%d\n", 1 ? "IDCT248" : "DCT248", name, err_max);
518
+
519
+    if (!speed)
520
+        return;
520 521
 
521 522
     ti = gettime();
522 523
     it1 = 0;
523 524
     do {
524
-        for(it=0;it<NB_ITS_SPEED;it++) {
525
-            for(i=0; i<64; i++)
526
-                block[i]= block1[i];
527
-//            memcpy(block, block1, sizeof(DCTELEM) * 64);
528
-// do not memcpy especially not fastmemcpy because it does movntq !!!
525
+        for (it = 0; it < NB_ITS_SPEED; it++) {
526
+            for (i = 0; i < 64; i++)
527
+                block[i] = block1[i];
529 528
             idct248_put(img_dest, 8, block);
530 529
         }
531 530
         it1 += NB_ITS_SPEED;
... ...
@@ -533,9 +528,8 @@ static void idct248_error(const char *name,
533 533
     } while (ti1 < 1000000);
534 534
     mmx_emms();
535 535
 
536
-    printf("%s %s: %0.1f kdct/s\n",
537
-           1 ? "IDCT248" : "DCT248",
538
-           name, (double)it1 * 1000.0 / (double)ti1);
536
+    printf("%s %s: %0.1f kdct/s\n", 1 ? "IDCT248" : "DCT248", name,
537
+           (double) it1 * 1000.0 / (double) ti1);
539 538
 }
540 539
 
541 540
 static void help(void)
... ...
@@ -545,56 +539,67 @@ static void help(void)
545 545
            "            1 -> test with random sparse matrixes\n"
546 546
            "            2 -> do 3. test from mpeg4 std\n"
547 547
            "-i          test IDCT implementations\n"
548
-           "-4          test IDCT248 implementations\n");
548
+           "-4          test IDCT248 implementations\n"
549
+           "-t          speed test\n");
549 550
 }
550 551
 
551 552
 int main(int argc, char **argv)
552 553
 {
553 554
     int test_idct = 0, test_248_dct = 0;
554
-    int c,i;
555
-    int test=1;
555
+    int c, i;
556
+    int test = 1;
557
+    int speed = 0;
558
+    int err = 0;
556 559
     int bits=8;
560
+
557 561
     cpu_flags = av_get_cpu_flags();
558 562
 
559 563
     ff_ref_dct_init();
560 564
     idct_mmx_init();
561 565
 
562
-    for(i=0;i<256;i++) cropTbl[i + MAX_NEG_CROP] = i;
563
-    for(i=0;i<MAX_NEG_CROP;i++) {
566
+    for (i = 0; i < 256; i++)
567
+        cropTbl[i + MAX_NEG_CROP] = i;
568
+    for (i = 0; i < MAX_NEG_CROP; i++) {
564 569
         cropTbl[i] = 0;
565 570
         cropTbl[i + MAX_NEG_CROP + 256] = 255;
566 571
     }
567 572
 
568
-    for(;;) {
569
-        c = getopt(argc, argv, "ih4");
573
+    for (;;) {
574
+        c = getopt(argc, argv, "ih4t");
570 575
         if (c == -1)
571 576
             break;
572
-        switch(c) {
577
+        switch (c) {
573 578
         case 'i':
574 579
             test_idct = 1;
575 580
             break;
576 581
         case '4':
577 582
             test_248_dct = 1;
578 583
             break;
579
-        default :
584
+        case 't':
585
+            speed = 1;
586
+            break;
587
+        default:
580 588
         case 'h':
581 589
             help();
582 590
             return 0;
583 591
         }
584 592
     }
585 593
 
586
-    if(optind <argc) test= atoi(argv[optind]);
594
+    if (optind < argc)
595
+        test = atoi(argv[optind]);
587 596
     if(optind+1 < argc) bits= atoi(argv[optind+1]);
588 597
 
589 598
     printf("ffmpeg DCT/IDCT test\n");
590 599
 
591 600
     if (test_248_dct) {
592
-        idct248_error("SIMPLE-C", ff_simple_idct248_put);
601
+        idct248_error("SIMPLE-C", ff_simple_idct248_put, speed);
593 602
     } else {
594
-      for (i=0;algos[i].name;i++)
595
-        if (algos[i].is_idct == test_idct && !(~cpu_flags & algos[i].mm_support)) {
596
-          dct_error (algos[i].name, algos[i].is_idct, algos[i].func, algos[i].ref, algos[i].format, test, bits);
597
-        }
603
+        const struct algo *algos = test_idct ? idct_tab : fdct_tab;
604
+        for (i = 0; algos[i].name; i++)
605
+            if (!(~cpu_flags & algos[i].mm_support)) {
606
+                err |= dct_error(&algos[i], test, test_idct, speed, bits);
607
+            }
598 608
     }
599
-    return 0;
609
+
610
+    return err;
600 611
 }
... ...
@@ -237,6 +237,7 @@ void FUNCC(ff_h264_idct_add8)(uint8_t **dest, const int *block_offset, DCTELEM *
237 237
 }
238 238
 /**
239 239
  * IDCT transforms the 16 dc values and dequantizes them.
240
+ * @param qmul quantization parameter
240 241
  */
241 242
 void FUNCC(ff_h264_luma_dc_dequant_idct)(DCTELEM *p_output, DCTELEM *p_input, int qmul){
242 243
 #define stride 16
... ...
@@ -1,3 +1,21 @@
1
+/*
2
+ * This file is part of Libav.
3
+ *
4
+ * Libav is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * Libav is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public
15
+ * License along with Libav; if not, write to the Free Software
16
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
1 19
 #include "dsputil.h"
2 20
 
3 21
 #ifndef BIT_DEPTH
... ...
@@ -311,6 +311,9 @@ av_cold void ff_iir_filter_free_coeffs(struct FFIIRFilterCoeffs *coeffs)
311 311
 }
312 312
 
313 313
 #ifdef TEST
314
+#undef printf
315
+#include <stdio.h>
316
+
314 317
 #define FILT_ORDER 4
315 318
 #define SIZE 1024
316 319
 int main(void)
... ...
@@ -320,7 +323,6 @@ int main(void)
320 320
     float cutoff_coeff = 0.4;
321 321
     int16_t x[SIZE], y[SIZE];
322 322
     int i;
323
-    FILE* fd;
324 323
 
325 324
     fcoeffs = ff_iir_filter_init_coeffs(NULL, FF_FILTER_TYPE_BUTTERWORTH,
326 325
                                         FF_FILTER_MODE_LOWPASS, FILT_ORDER,
... ...
@@ -333,13 +335,8 @@ int main(void)
333 333
 
334 334
     ff_iir_filter(fcoeffs, fstate, SIZE, x, 1, y, 1);
335 335
 
336
-    fd = fopen("in.bin", "w");
337
-    fwrite(x, sizeof(x[0]), SIZE, fd);
338
-    fclose(fd);
339
-
340
-    fd = fopen("out.bin", "w");
341
-    fwrite(y, sizeof(y[0]), SIZE, fd);
342
-    fclose(fd);
336
+    for (i = 0; i < SIZE; i++)
337
+        printf("%6d %6d\n", x[i], y[i]);
343 338
 
344 339
     ff_iir_filter_free_coeffs(fcoeffs);
345 340
     ff_iir_filter_free_state(fstate);
... ...
@@ -30,6 +30,7 @@
30 30
 #include "avcodec.h"
31 31
 #include "bytestream.h"
32 32
 #include "vorbis.h"
33
+#include "libavutil/mathematics.h"
33 34
 
34 35
 #undef NDEBUG
35 36
 #include <assert.h>
... ...
@@ -31,6 +31,7 @@
31 31
 #include "avcodec.h"
32 32
 #include "libavutil/base64.h"
33 33
 #include "libavutil/opt.h"
34
+#include "libavutil/mathematics.h"
34 35
 
35 36
 /**
36 37
  * Portion of struct vpx_codec_cx_pkt from vpx_encoder.h.
... ...
@@ -30,6 +30,7 @@
30 30
 #include "avcodec.h"
31 31
 #include "libavutil/cpu.h"
32 32
 #include "libavutil/intreadwrite.h"
33
+#include "libavutil/mathematics.h"
33 34
 #include "libxvid_internal.h"
34 35
 #if !HAVE_MKSTEMP
35 36
 #include <fcntl.h>
... ...
@@ -285,9 +285,10 @@ int ff_alloc_picture(MpegEncContext *s, Picture *pic, int shared){
285 285
         }
286 286
 
287 287
         FF_ALLOCZ_OR_GOTO(s->avctx, pic->mbskip_table , mb_array_size * sizeof(uint8_t)+2, fail) //the +2 is for the slice end check
288
-        FF_ALLOCZ_OR_GOTO(s->avctx, pic->qscale_table , mb_array_size * sizeof(uint8_t)  , fail)
288
+        FF_ALLOCZ_OR_GOTO(s->avctx, pic->qscale_table_base , (big_mb_num + s->mb_stride) * sizeof(uint8_t)  , fail)
289 289
         FF_ALLOCZ_OR_GOTO(s->avctx, pic->mb_type_base , (big_mb_num + s->mb_stride) * sizeof(uint32_t), fail)
290 290
         pic->mb_type= pic->mb_type_base + 2*s->mb_stride+1;
291
+        pic->qscale_table = pic->qscale_table_base + 2*s->mb_stride + 1;
291 292
         if(s->out_format == FMT_H264){
292 293
             for(i=0; i<2; i++){
293 294
                 FF_ALLOCZ_OR_GOTO(s->avctx, pic->motion_val_base[i], 2 * (b4_array_size+4)  * sizeof(int16_t), fail)
... ...
@@ -339,7 +340,7 @@ static void free_picture(MpegEncContext *s, Picture *pic){
339 339
     av_freep(&pic->mc_mb_var);
340 340
     av_freep(&pic->mb_mean);
341 341
     av_freep(&pic->mbskip_table);
342
-    av_freep(&pic->qscale_table);
342
+    av_freep(&pic->qscale_table_base);
343 343
     av_freep(&pic->mb_type_base);
344 344
     av_freep(&pic->dct_coeff);
345 345
     av_freep(&pic->pan_scan);
... ...
@@ -88,6 +88,7 @@ typedef struct Picture{
88 88
      * halfpel luma planes.
89 89
      */
90 90
     uint8_t *interpolated[3];
91
+    int8_t *qscale_table_base;
91 92
     int16_t (*motion_val_base[2])[2];
92 93
     uint32_t *mb_type_base;
93 94
 #define MB_TYPE_INTRA MB_TYPE_INTRA4x4 //default mb_type if there is just one type
... ...
@@ -1,3 +1,21 @@
1
+/*
2
+ * This file is part of Libav.
3
+ *
4
+ * Libav is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * Libav is distributed in the hope that it will be useful,
10
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
+ * Lesser General Public License for more details.
13
+ *
14
+ * You should have received a copy of the GNU Lesser General Public
15
+ * License along with Libav; if not, write to the Free Software
16
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+ */
18
+
1 19
 /**
2 20
  * @file
3 21
  * This header is provided for compatibility only and will be removed
... ...
@@ -424,17 +424,6 @@ static inline RV34VLC* choose_vlc_set(int quant, int mod, int type)
424 424
 }
425 425
 
426 426
 /**
427
- * Decode quantizer difference and return modified quantizer.
428
- */
429
-static inline int rv34_decode_dquant(GetBitContext *gb, int quant)
430
-{
431
-    if(get_bits1(gb))
432
-        return rv34_dquant_tab[get_bits1(gb)][quant];
433
-    else
434
-        return get_bits(gb, 5);
435
-}
436
-
437
-/**
438 427
  * Decode macroblock header and return CBP in case of success, -1 otherwise.
439 428
  */
440 429
 static int rv34_decode_mb_header(RV34DecContext *r, int8_t *intra_types)
... ...
@@ -1255,15 +1244,6 @@ static int check_slice_end(RV34DecContext *r, MpegEncContext *s)
1255 1255
     return 0;
1256 1256
 }
1257 1257
 
1258
-static inline int slice_compare(SliceInfo *si1, SliceInfo *si2)
1259
-{
1260
-    return si1->type   != si2->type  ||
1261
-           si1->start  >= si2->start ||
1262
-           si1->width  != si2->width ||
1263
-           si1->height != si2->height||
1264
-           si1->pts    != si2->pts;
1265
-}
1266
-
1267 1258
 static int rv34_decode_slice(RV34DecContext *r, int end, const uint8_t* buf, int buf_size)
1268 1259
 {
1269 1260
     MpegEncContext *s = &r->s;
... ...
@@ -45,7 +45,6 @@
45 45
 #define MB_INTRA_VLC_BITS 9
46 46
 #define DC_VLC_BITS 9
47 47
 #define AC_VLC_BITS 9
48
-static const uint16_t table_mb_intra[64][2];
49 48
 
50 49
 
51 50
 static const uint16_t vlc_offs[] = {
... ...
@@ -641,8 +641,6 @@ void decode_mb_mode(VP8Context *s, VP8Macroblock *mb, int mb_x, int mb_y, uint8_
641 641
  * @param block destination for block coefficients
642 642
  * @param probs probabilities to use when reading trees from the bitstream
643 643
  * @param i initial coeff index, 0 unless a separate DC block is coded
644
- * @param zero_nhood the initial prediction context for number of surrounding
645
- *                   all-zero blocks (only left/top, so 0-2)
646 644
  * @param qmul array holding the dc/ac dequant factor at position 0/1
647 645
  * @return 0 if no coeffs were decoded
648 646
  *         otherwise, the index of the last coeff decoded plus one
... ...
@@ -701,6 +699,17 @@ skip_eob:
701 701
 }
702 702
 #endif
703 703
 
704
+/**
705
+ * @param c arithmetic bitstream reader context
706
+ * @param block destination for block coefficients
707
+ * @param probs probabilities to use when reading trees from the bitstream
708
+ * @param i initial coeff index, 0 unless a separate DC block is coded
709
+ * @param zero_nhood the initial prediction context for number of surrounding
710
+ *                   all-zero blocks (only left/top, so 0-2)
711
+ * @param qmul array holding the dc/ac dequant factor at position 0/1
712
+ * @return 0 if no coeffs were decoded
713
+ *         otherwise, the index of the last coeff decoded plus one
714
+ */
704 715
 static av_always_inline
705 716
 int decode_block_coeffs(VP56RangeCoder *c, DCTELEM block[16],
706 717
                         uint8_t probs[16][3][NUM_DCT_TOKENS-1],
... ...
@@ -1034,10 +1043,9 @@ static const uint8_t subpel_idx[3][8] = {
1034 1034
 };
1035 1035
 
1036 1036
 /**
1037
- * Generic MC function.
1037
+ * luma MC function
1038 1038
  *
1039 1039
  * @param s VP8 decoding context
1040
- * @param luma 1 for luma (Y) planes, 0 for chroma (Cb/Cr) planes
1041 1040
  * @param dst target buffer for block data at block position
1042 1041
  * @param ref reference picture buffer at origin (0, 0)
1043 1042
  * @param mv motion vector (relative to block position) to get pixel data from
... ...
@@ -1083,6 +1091,23 @@ void vp8_mc_luma(VP8Context *s, uint8_t *dst, AVFrame *ref, const VP56mv *mv,
1083 1083
     }
1084 1084
 }
1085 1085
 
1086
+/**
1087
+ * chroma MC function
1088
+ *
1089
+ * @param s VP8 decoding context
1090
+ * @param dst1 target buffer for block data at block position (U plane)
1091
+ * @param dst2 target buffer for block data at block position (V plane)
1092
+ * @param ref reference picture buffer at origin (0, 0)
1093
+ * @param mv motion vector (relative to block position) to get pixel data from
1094
+ * @param x_off horizontal position of block from origin (0, 0)
1095
+ * @param y_off vertical position of block from origin (0, 0)
1096
+ * @param block_w width of block (16, 8 or 4)
1097
+ * @param block_h height of block (always same as block_w)
1098
+ * @param width width of src/dst plane data
1099
+ * @param height height of src/dst plane data
1100
+ * @param linesize size of a single line of plane data, including padding
1101
+ * @param mc_func motion compensation function pointers (bilinear or sixtap MC)
1102
+ */
1086 1103
 static av_always_inline
1087 1104
 void vp8_mc_chroma(VP8Context *s, uint8_t *dst1, uint8_t *dst2, AVFrame *ref,
1088 1105
                    const VP56mv *mv, int x_off, int y_off,
... ...
@@ -2563,8 +2563,8 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx)
2563 2563
             SET_QPEL_FUNCS(avg_h264_qpel, 1, 8, mmx2, );
2564 2564
             SET_QPEL_FUNCS(avg_h264_qpel, 2, 4, mmx2, );
2565 2565
             }
2566
-#if HAVE_YASM
2567 2566
             else if (bit_depth == 10) {
2567
+#if HAVE_YASM
2568 2568
 #if !ARCH_X86_64
2569 2569
                 SET_QPEL_FUNCS(avg_h264_qpel, 0, 16, 10_mmxext, ff_);
2570 2570
                 SET_QPEL_FUNCS(put_h264_qpel, 0, 16, 10_mmxext, ff_);
... ...
@@ -2573,8 +2573,8 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx)
2573 2573
 #endif
2574 2574
                 SET_QPEL_FUNCS(put_h264_qpel, 2, 4,  10_mmxext, ff_);
2575 2575
                 SET_QPEL_FUNCS(avg_h264_qpel, 2, 4,  10_mmxext, ff_);
2576
-            }
2577 2576
 #endif
2577
+            }
2578 2578
 
2579 2579
             SET_QPEL_FUNCS(put_2tap_qpel, 0, 16, mmx2, );
2580 2580
             SET_QPEL_FUNCS(put_2tap_qpel, 1, 8, mmx2, );
... ...
@@ -1294,6 +1294,6 @@ QPEL16_OP(mc31, MMX)\
1294 1294
 QPEL16_OP(mc32, MMX)\
1295 1295
 QPEL16_OP(mc33, MMX)
1296 1296
 
1297
-#if HAVE_YASM && ARCH_X86_32 // ARCH_X86_64 implies sse2+
1297
+#if ARCH_X86_32 && HAVE_YASM // ARCH_X86_64 implies sse2+
1298 1298
 QPEL16(mmxext)
1299 1299
 #endif
... ...
@@ -1,19 +1,21 @@
1 1
 /*
2
+ * Copyright (C) 2009 Loren Merritt <lorenm@u.washignton.edu>
3
+ *
2 4
  * This file is part of FFmpeg.
3 5
  *
4
- * FFmpeg is free software; you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License as published by
6
- * the Free Software Foundation; either version 2 of the License, or
7
- * (at your option) any later version.
6
+ * FFmpeg is free software; you can redistribute it and/or
7
+ * modify it under the terms of the GNU Lesser General Public
8
+ * License as published by the Free Software Foundation; either
9
+ * version 2.1 of the License, or (at your option) any later version.
8 10
  *
9 11
  * FFmpeg is distributed in the hope that it will be useful,
10 12
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
- * GNU General Public License for more details.
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
+ * Lesser General Public License for more details.
13 15
  *
14
- * You should have received a copy of the GNU General Public License along
15
- * with FFmpeg; if not, write to the Free Software Foundation, Inc.,
16
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
+ * You should have received a copy of the GNU Lesser General Public
17
+ * License along with FFmpeg; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 19
  */
18 20
 
19 21
 #include "libavutil/cpu.h"
... ...
@@ -1549,7 +1549,7 @@ static uint32_t ff_framenum_to_12m_time_code(unsigned frame, int drop, int fps)
1549 1549
            ((((frame / (fps * 60)) % 60) / 10)   << 12) | // tens  of minutes
1550 1550
            ((((frame / (fps * 60)) % 60) % 10)   <<  8) | // units of minutes
1551 1551
            (0                                    <<  7) | // b1
1552
-           (0                                    <<  6) | // b2 (NSC), field phase (PAL)
1552
+           (0                                    <<  6) | // b2 (NTSC), field phase (PAL)
1553 1553
            ((((frame / (fps * 3600) % 24)) / 10) <<  4) | // tens  of hours
1554 1554
            (  (frame / (fps * 3600) % 24)) % 10;          // units of hours
1555 1555
 }
... ...
@@ -201,7 +201,7 @@ static int ogg_read_page(AVFormatContext *s, int *str)
201 201
     uint8_t sync[4];
202 202
     int sp = 0;
203 203
 
204
-    ret = avio_read (bc, sync, 4);
204
+    ret = avio_read(bc, sync, 4);
205 205
     if (ret < 4)
206 206
         return ret < 0 ? ret : AVERROR_EOF;
207 207
 
... ...
@@ -259,7 +259,7 @@ static int ogg_read_page(AVFormatContext *s, int *str)
259 259
     if(os->psize > 0)
260 260
         ogg_new_buf(ogg, idx);
261 261
 
262
-    ret = avio_read (bc, os->segments, nsegs);
262
+    ret = avio_read(bc, os->segments, nsegs);
263 263
     if (ret < nsegs)
264 264
         return ret < 0 ? ret : AVERROR_EOF;
265 265
 
... ...
@@ -292,7 +292,7 @@ static int ogg_read_page(AVFormatContext *s, int *str)
292 292
         os->buf = nb;
293 293
     }
294 294
 
295
-    ret = avio_read (bc, os->buf + os->bufpos, size);
295
+    ret = avio_read(bc, os->buf + os->bufpos, size);
296 296
     if (ret < size)
297 297
         return ret < 0 ? ret : AVERROR_EOF;
298 298
 
... ...
@@ -321,7 +321,7 @@ static int ogg_packet(AVFormatContext *s, int *str, int *dstart, int *dsize,
321 321
         idx = ogg->curidx;
322 322
 
323 323
         while (idx < 0){
324
-            ret = ogg_read_page (s, &idx);
324
+            ret = ogg_read_page(s, &idx);
325 325
             if (ret < 0)
326 326
                 return ret;
327 327
         }
... ...
@@ -437,7 +437,7 @@ static int ogg_get_headers(AVFormatContext *s)
437 437
     int ret;
438 438
 
439 439
     do{
440
-        ret = ogg_packet (s, NULL, NULL, NULL, NULL);
440
+        ret = ogg_packet(s, NULL, NULL, NULL, NULL);
441 441
         if (ret < 0)
442 442
             return ret;
443 443
     }while (!ogg->headers);
... ...
@@ -501,10 +501,9 @@ static int ogg_read_header(AVFormatContext *s, AVFormatParameters *ap)
501 501
     int ret, i;
502 502
     ogg->curidx = -1;
503 503
     //linear headers seek from start
504
-    ret = ogg_get_headers (s);
505
-    if (ret < 0){
504
+    ret = ogg_get_headers(s);
505
+    if (ret < 0)
506 506
         return ret;
507
-    }
508 507
 
509 508
     for (i = 0; i < ogg->nstreams; i++)
510 509
         if (ogg->streams[i].header < 0)
... ...
@@ -558,7 +557,7 @@ static int ogg_read_packet(AVFormatContext *s, AVPacket *pkt)
558 558
     //Get an ogg packet
559 559
 retry:
560 560
     do{
561
-        ret = ogg_packet (s, &idx, &pstart, &psize, &fpos);
561
+        ret = ogg_packet(s, &idx, &pstart, &psize, &fpos);
562 562
         if (ret < 0)
563 563
             return ret;
564 564
     }while (idx < 0 || !s->streams[idx]);
... ...
@@ -574,7 +573,7 @@ retry:
574 574
     os->keyframe_seek = 0;
575 575
 
576 576
     //Alloc a pkt
577
-    ret = av_new_packet (pkt, psize);
577
+    ret = av_new_packet(pkt, psize);
578 578
     if (ret < 0)
579 579
         return ret;
580 580
     pkt->stream_index = idx;
... ...
@@ -22,6 +22,7 @@
22 22
 
23 23
 #include "common.h"
24 24
 #include "aes.h"
25
+#include "intreadwrite.h"
25 26
 
26 27
 typedef union {
27 28
     uint64_t u64[2];
... ...
@@ -67,6 +68,20 @@ static inline void addkey(av_aes_block *dst, const av_aes_block *src,
67 67
     dst->u64[1] = src->u64[1] ^ round_key->u64[1];
68 68
 }
69 69
 
70
+static inline void addkey_s(av_aes_block *dst, const uint8_t *src,
71
+                            const av_aes_block *round_key)
72
+{
73
+    dst->u64[0] = AV_RN64(src)     ^ round_key->u64[0];
74
+    dst->u64[1] = AV_RN64(src + 8) ^ round_key->u64[1];
75
+}
76
+
77
+static inline void addkey_d(uint8_t *dst, const av_aes_block *src,
78
+                            const av_aes_block *round_key)
79
+{
80
+    AV_WN64(dst,     src->u64[0] ^ round_key->u64[0]);
81
+    AV_WN64(dst + 8, src->u64[1] ^ round_key->u64[1]);
82
+}
83
+
70 84
 static void subshift(av_aes_block s0[2], int s, const uint8_t *box)
71 85
 {
72 86
     av_aes_block *s1 = (av_aes_block *) (s0[0].u8 - s);
... ...
@@ -119,32 +134,28 @@ static inline void crypt(AVAES *a, int s, const uint8_t *sbox,
119 119
     subshift(&a->state[0], s, sbox);
120 120
 }
121 121
 
122
-void av_aes_crypt(AVAES *a, uint8_t *dst_, const uint8_t *src_,
123
-                  int count, uint8_t *iv_, int decrypt)
122
+void av_aes_crypt(AVAES *a, uint8_t *dst, const uint8_t *src,
123
+                  int count, uint8_t *iv, int decrypt)
124 124
 {
125
-    av_aes_block       *dst = (av_aes_block *) dst_;
126
-    const av_aes_block *src = (const av_aes_block *) src_;
127
-    av_aes_block        *iv = (av_aes_block *) iv_;
128
-
129 125
     while (count--) {
130
-        addkey(&a->state[1], src, &a->round_key[a->rounds]);
126
+        addkey_s(&a->state[1], src, &a->round_key[a->rounds]);
131 127
         if (decrypt) {
132 128
             crypt(a, 0, inv_sbox, dec_multbl);
133 129
             if (iv) {
134
-                addkey(&a->state[0], &a->state[0], iv);
135
-                *iv = *src;
130
+                addkey_s(&a->state[0], iv, &a->state[0]);
131
+                memcpy(iv, src, 16);
136 132
             }
137
-            addkey(dst, &a->state[0], &a->round_key[0]);
133
+            addkey_d(dst, &a->state[0], &a->round_key[0]);
138 134
         } else {
139 135
             if (iv)
140
-                addkey(&a->state[1], &a->state[1], iv);
136
+                addkey_s(&a->state[1], iv, &a->state[1]);
141 137
             crypt(a, 2, sbox, enc_multbl);
142
-            addkey(dst, &a->state[0], &a->round_key[0]);
138
+            addkey_d(dst, &a->state[0], &a->round_key[0]);
143 139
             if (iv)
144
-                *iv = *dst;
140
+                memcpy(iv, dst, 16);
145 141
         }
146
-        src++;
147
-        dst++;
142
+        src += 16;
143
+        dst += 16;
148 144
     }
149 145
 }
150 146
 
... ...
@@ -299,10 +299,10 @@ int av_des_init(AVDES *d, const uint8_t *key, int key_bits, int decrypt) {
299 299
 }
300 300
 
301 301
 void av_des_crypt(AVDES *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt) {
302
-    uint64_t iv_val = iv ? av_be2ne64(*(uint64_t *)iv) : 0;
302
+    uint64_t iv_val = iv ? AV_RB64(iv) : 0;
303 303
     while (count-- > 0) {
304 304
         uint64_t dst_val;
305
-        uint64_t src_val = src ? av_be2ne64(*(const uint64_t *)src) : 0;
305
+        uint64_t src_val = src ? AV_RB64(src) : 0;
306 306
         if (decrypt) {
307 307
             uint64_t tmp = src_val;
308 308
             if (d->triple_des) {
... ...
@@ -319,12 +319,12 @@ void av_des_crypt(AVDES *d, uint8_t *dst, const uint8_t *src, int count, uint8_t
319 319
             }
320 320
             iv_val = iv ? dst_val : 0;
321 321
         }
322
-        *(uint64_t *)dst = av_be2ne64(dst_val);
322
+        AV_WB64(dst, dst_val);
323 323
         src += 8;
324 324
         dst += 8;
325 325
     }
326 326
     if (iv)
327
-        *(uint64_t *)iv = av_be2ne64(iv_val);
327
+        AV_WB64(iv, iv_val);
328 328
 }
329 329
 
330 330
 #ifdef TEST
... ...
@@ -472,7 +472,7 @@ int av_expr_parse(AVExpr **expr, const char *s,
472 472
                   const char * const *func2_names, double (* const *funcs2)(void *, double, double),
473 473
                   int log_offset, void *log_ctx)
474 474
 {
475
-    Parser p;
475
+    Parser p = { 0 };
476 476
     AVExpr *e = NULL;
477 477
     char *w = av_malloc(strlen(s) + 1);
478 478
     char *wp = w;
... ...
@@ -517,7 +517,7 @@ end:
517 517
 
518 518
 double av_expr_eval(AVExpr *e, const double *const_values, void *opaque)
519 519
 {
520
-    Parser p;
520
+    Parser p = { 0 };
521 521
 
522 522
     p.const_values = const_values;
523 523
     p.opaque     = opaque;
... ...
@@ -576,6 +576,8 @@ void av_free_expr(AVExpr *e)
576 576
 
577 577
 #ifdef TEST
578 578
 #undef printf
579
+#include <string.h>
580
+
579 581
 static double const_values[] = {
580 582
     M_PI,
581 583
     M_E,
... ...
@@ -588,7 +590,7 @@ static const char *const_names[] = {
588 588
     0
589 589
 };
590 590
 
591
-int main(void)
591
+int main(int argc, char **argv)
592 592
 {
593 593
     int i;
594 594
     double d;
... ...
@@ -669,13 +671,16 @@ int main(void)
669 669
                            NULL, NULL, NULL, NULL, NULL, 0, NULL);
670 670
     printf("%f == 0.931322575\n", d);
671 671
 
672
-    for (i=0; i<1050; i++) {
673
-        START_TIMER
672
+    if (argc > 1 && !strcmp(argv[1], "-t")) {
673
+        for (i = 0; i < 1050; i++) {
674
+            START_TIMER;
674 675
             av_expr_parse_and_eval(&d, "1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)",
675 676
                                    const_names, const_values,
676 677
                                    NULL, NULL, NULL, NULL, NULL, 0, NULL);
677
-        STOP_TIMER("av_expr_parse_and_eval")
678
+            STOP_TIMER("av_expr_parse_and_eval");
679
+        }
678 680
     }
681
+
679 682
     return 0;
680 683
 }
681 684
 #endif
... ...
@@ -42,7 +42,7 @@ const int av_sha_size = sizeof(AVSHA);
42 42
 #define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
43 43
 
44 44
 /* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */
45
-#define blk0(i) (block[i] = av_be2ne32(((const uint32_t*)buffer)[i]))
45
+#define blk0(i) (block[i] = AV_RB32(buffer + 4 * (i)))
46 46
 #define blk(i)  (block[i] = rol(block[i-3] ^ block[i-8] ^ block[i-14] ^ block[i-16], 1))
47 47
 
48 48
 #define R0(v,w,x,y,z,i) z += ((w&(x^y))^y)     + blk0(i) + 0x5A827999 + rol(v, 5); w = rol(w, 30);
... ...
@@ -67,7 +67,7 @@ static void sha1_transform(uint32_t state[5], const uint8_t buffer[64])
67 67
     for (i = 0; i < 80; i++) {
68 68
         int t;
69 69
         if (i < 16)
70
-            t = av_be2ne32(((uint32_t*)buffer)[i]);
70
+            t = AV_RB32(buffer + 4 * i);
71 71
         else
72 72
             t = rol(block[i-3] ^ block[i-8] ^ block[i-14] ^ block[i-16], 1);
73 73
         block[i] = t;
... ...
@@ -80,17 +80,6 @@ untested special converters
80 80
 #define RV ( (int)(0.500*224/255*(1<<RGB2YUV_SHIFT)+0.5))
81 81
 #define RU (-(int)(0.169*224/255*(1<<RGB2YUV_SHIFT)+0.5))
82 82
 
83
-static const double rgb2yuv_table[8][9]={
84
-    {0.7152, 0.0722, 0.2126, -0.386, 0.5, -0.115, -0.454, -0.046, 0.5}, //ITU709
85
-    {0.7152, 0.0722, 0.2126, -0.386, 0.5, -0.115, -0.454, -0.046, 0.5}, //ITU709
86
-    {0.587 , 0.114 , 0.299 , -0.331, 0.5, -0.169, -0.419, -0.081, 0.5}, //DEFAULT / ITU601 / ITU624 / SMPTE 170M
87
-    {0.587 , 0.114 , 0.299 , -0.331, 0.5, -0.169, -0.419, -0.081, 0.5}, //DEFAULT / ITU601 / ITU624 / SMPTE 170M
88
-    {0.59  , 0.11  , 0.30  , -0.331, 0.5, -0.169, -0.421, -0.079, 0.5}, //FCC
89
-    {0.587 , 0.114 , 0.299 , -0.331, 0.5, -0.169, -0.419, -0.081, 0.5}, //DEFAULT / ITU601 / ITU624 / SMPTE 170M
90
-    {0.587 , 0.114 , 0.299 , -0.331, 0.5, -0.169, -0.419, -0.081, 0.5}, //DEFAULT / ITU601 / ITU624 / SMPTE 170M
91
-    {0.701 , 0.087 , 0.212 , -0.384, 0.5, -0.116, -0.445, -0.055, 0.5}, //SMPTE 240M
92
-};
93
-
94 83
 /*
95 84
 NOTES
96 85
 Special versions: fast Y 1:1 scaling (no interpolation in y direction)
... ...
@@ -41,6 +41,7 @@ include $(SRC_PATH)/tests/fate/aac.mak
41 41
 include $(SRC_PATH)/tests/fate/als.mak
42 42
 include $(SRC_PATH)/tests/fate/amrnb.mak
43 43
 include $(SRC_PATH)/tests/fate/amrwb.mak
44
+include $(SRC_PATH)/tests/fate/dct.mak
44 45
 include $(SRC_PATH)/tests/fate/fft.mak
45 46
 include $(SRC_PATH)/tests/fate/h264.mak
46 47
 include $(SRC_PATH)/tests/fate/libavutil.mak
... ...
@@ -123,6 +123,7 @@ if test -e "$ref"; then
123 123
         diff)   diff -u -w "$ref" "$outfile"            >$cmpfile ;;
124 124
         oneoff) oneoff     "$ref" "$outfile" "$fuzz"    >$cmpfile ;;
125 125
         stddev) stddev     "$ref" "$outfile" "$fuzz"    >$cmpfile ;;
126
+        null)   cat               "$outfile"            >$cmpfile ;;
126 127
     esac
127 128
     cmperr=$?
128 129
     test $err = 0 && err=$cmperr
129 130
new file mode 100644
... ...
@@ -0,0 +1,5 @@
0
+FATE_TESTS += fate-idct8x8
1
+fate-idct8x8: libavcodec/dct-test$(EXESUF)
2
+fate-idct8x8: CMD = run libavcodec/dct-test -i
3
+fate-idct8x8: REF = /dev/null
4
+fate-idct8x8: CMP = null
... ...
@@ -1,28 +1,36 @@
1
-FATE_FFT = fate-fft   fate-ifft   \
2
-           fate-mdct  fate-imdct  \
3
-           fate-rdft  fate-irdft  \
4
-           fate-dct1d fate-idct1d
5
-
6
-fate-fft:    CMD = run libavcodec/fft-test
7
-fate-ifft:   CMD = run libavcodec/fft-test -i
8
-fate-mdct:   CMD = run libavcodec/fft-test -m
9
-fate-imdct:  CMD = run libavcodec/fft-test -m -i
10
-fate-rdft:   CMD = run libavcodec/fft-test -r
11
-fate-irdft:  CMD = run libavcodec/fft-test -r -i
12
-fate-dct1d:  CMD = run libavcodec/fft-test -d
13
-fate-idct1d: CMD = run libavcodec/fft-test -d -i
1
+define DEF_FFT
2
+FATE_FFT += fate-fft-$(1)   fate-ifft-$(1)   \
3
+            fate-mdct-$(1)  fate-imdct-$(1)  \
4
+            fate-rdft-$(1)  fate-irdft-$(1)  \
5
+            fate-dct1d-$(1) fate-idct1d-$(1)
6
+
7
+fate-fft-$(N):    CMD = run libavcodec/fft-test -n$(1)
8
+fate-ifft-$(N):   CMD = run libavcodec/fft-test -n$(1) -i
9
+fate-mdct-$(N):   CMD = run libavcodec/fft-test -n$(1) -m
10
+fate-imdct-$(N):  CMD = run libavcodec/fft-test -n$(1) -m -i
11
+fate-rdft-$(N):   CMD = run libavcodec/fft-test -n$(1) -r
12
+fate-irdft-$(N):  CMD = run libavcodec/fft-test -n$(1) -r -i
13
+fate-dct1d-$(N):  CMD = run libavcodec/fft-test -n$(1) -d
14
+fate-idct1d-$(N): CMD = run libavcodec/fft-test -n$(1) -d -i
15
+endef
16
+
17
+$(foreach N, 4 5 6 7 8 9 10 11 12, $(eval $(call DEF_FFT,$(N))))
14 18
 
15 19
 fate-fft-test: $(FATE_FFT)
16 20
 $(FATE_FFT): libavcodec/fft-test$(EXESUF)
17 21
 $(FATE_FFT): REF = /dev/null
18 22
 
19
-FATE_FFT_FIXED = fate-fft-fixed  fate-ifft-fixed  \
20
-                 fate-mdct-fixed fate-imdct-fixed
23
+define DEF_FFT_FIXED
24
+FATE_FFT_FIXED += fate-fft-fixed-$(1)   fate-ifft-fixed-$(1)  \
25
+                  fate-mdct-fixed-$(1) fate-imdct-fixed-$(1)
26
+
27
+fate-fft-fixed-$(1):   CMD = run libavcodec/fft-fixed-test -n$(1)
28
+fate-ifft-fixed-$(1):  CMD = run libavcodec/fft-fixed-test -n$(1) -i
29
+fate-mdct-fixed-$(1):  CMD = run libavcodec/fft-fixed-test -n$(1) -m
30
+fate-imdct-fixed-$(1): CMD = run libavcodec/fft-fixed-test -n$(1) -m -i
31
+endef
21 32
 
22
-fate-fft-fixed:   CMD = run libavcodec/fft-fixed-test
23
-fate-ifft-fixed:  CMD = run libavcodec/fft-fixed-test -i
24
-fate-mdct-fixed:  CMD = run libavcodec/fft-fixed-test -m
25
-fate-imdct-fixed: CMD = run libavcodec/fft-fixed-test -m -i
33
+$(foreach N, 4 5 6 7 8 9 10 11 12, $(eval $(call DEF_FFT_FIXED,$(N))))
26 34
 
27 35
 fate-fft-fixed-test: $(FATE_FFT_FIXED)
28 36
 $(FATE_FFT_FIXED): libavcodec/fft-fixed-test$(EXESUF)
... ...
@@ -21,6 +21,10 @@ fate-des: libavutil/des-test$(EXESUF)
21 21
 fate-des: CMD = run libavutil/des-test
22 22
 fate-des: REF = /dev/null
23 23
 
24
+FATE_TESTS += fate-eval
25
+fate-eval: libavutil/eval-test$(EXESUF)
26
+fate-eval: CMD = run libavutil/eval-test
27
+
24 28
 FATE_TESTS += fate-md5
25 29
 fate-md5: libavutil/md5-test$(EXESUF)
26 30
 fate-md5: CMD = run libavutil/md5-test
... ...
@@ -218,3 +218,7 @@ fate-musepack7: CMD = pcm -i $(SAMPLES)/musepack/inside-mp7.mpc
218 218
 fate-musepack7: CMP = oneoff
219 219
 fate-musepack7: REF = $(SAMPLES)/musepack/inside-mp7.pcm
220 220
 fate-musepack7: FUZZ = 1
221
+
222
+FATE_TESTS += fate-iirfilter
223
+fate-iirfilter: libavcodec/iirfilter-test$(EXESUF)
224
+fate-iirfilter: CMD = run libavcodec/iirfilter-test
221 225
new file mode 100644
... ...
@@ -0,0 +1,161 @@
0
+Evaluating ''
1
+'' -> nan
2
+
3
+Evaluating '1;2'
4
+'1;2' -> 2.000000
5
+
6
+Evaluating '-20'
7
+'-20' -> -20.000000
8
+
9
+Evaluating '-PI'
10
+'-PI' -> -3.141593
11
+
12
+Evaluating '+PI'
13
+'+PI' -> 3.141593
14
+
15
+Evaluating '1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)'
16
+'1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)' -> 12.700000
17
+
18
+Evaluating '80G/80Gi1k'
19
+'80G/80Gi1k' -> nan
20
+
21
+Evaluating '1Gi'
22
+'1Gi' -> 1073741824.000000
23
+
24
+Evaluating '1gi'
25
+'1gi' -> nan
26
+
27
+Evaluating '1GiFoo'
28
+'1GiFoo' -> nan
29
+
30
+Evaluating '1k+1k'
31
+'1k+1k' -> 2000.000000
32
+
33
+Evaluating '1Gi*3foo'
34
+'1Gi*3foo' -> nan
35
+
36
+Evaluating 'foo'
37
+'foo' -> nan
38
+
39
+Evaluating 'foo('
40
+'foo(' -> nan
41
+
42
+Evaluating 'foo()'
43
+'foo()' -> nan
44
+
45
+Evaluating 'foo)'
46
+'foo)' -> nan
47
+
48
+Evaluating 'sin'
49
+'sin' -> nan
50
+
51
+Evaluating 'sin('
52
+'sin(' -> nan
53
+
54
+Evaluating 'sin()'
55
+'sin()' -> nan
56
+
57
+Evaluating 'sin)'
58
+'sin)' -> nan
59
+
60
+Evaluating 'sin 10'
61
+'sin 10' -> nan
62
+
63
+Evaluating 'sin(1,2,3)'
64
+'sin(1,2,3)' -> nan
65
+
66
+Evaluating 'sin(1 )'
67
+'sin(1 )' -> 0.841471
68
+
69
+Evaluating '1'
70
+'1' -> 1.000000
71
+
72
+Evaluating '1foo'
73
+'1foo' -> nan
74
+
75
+Evaluating 'bar + PI + E + 100f*2 + foo'
76
+'bar + PI + E + 100f*2 + foo' -> nan
77
+
78
+Evaluating '13k + 12f - foo(1, 2)'
79
+'13k + 12f - foo(1, 2)' -> nan
80
+
81
+Evaluating '1gi'
82
+'1gi' -> nan
83
+
84
+Evaluating '1Gi'
85
+'1Gi' -> 1073741824.000000
86
+
87
+Evaluating 'st(0, 123)'
88
+'st(0, 123)' -> 123.000000
89
+
90
+Evaluating 'st(1, 123); ld(1)'
91
+'st(1, 123); ld(1)' -> 123.000000
92
+
93
+Evaluating 'st(0, 1); while(lte(ld(0), 100), st(1, ld(1)+ld(0));st(0, ld(0)+1)); ld(1)'
94
+'st(0, 1); while(lte(ld(0), 100), st(1, ld(1)+ld(0));st(0, ld(0)+1)); ld(1)' -> 4950.000000
95
+
96
+Evaluating 'st(1, 1); st(2, 2); st(0, 1); while(lte(ld(0),10), st(3, ld(1)+ld(2)); st(1, ld(2)); st(2, ld(3)); st(0, ld(0)+1)); ld(3)'
97
+'st(1, 1); st(2, 2); st(0, 1); while(lte(ld(0),10), st(3, ld(1)+ld(2)); st(1, ld(2)); st(2, ld(3)); st(0, ld(0)+1)); ld(3)' -> 144.000000
98
+
99
+Evaluating 'while(0, 10)'
100
+'while(0, 10)' -> nan
101
+
102
+Evaluating 'st(0, 1); while(lte(ld(0),100), st(1, ld(1)+ld(0)); st(0, ld(0)+1))'
103
+'st(0, 1); while(lte(ld(0),100), st(1, ld(1)+ld(0)); st(0, ld(0)+1))' -> 100.000000
104
+
105
+Evaluating 'isnan(1)'
106
+'isnan(1)' -> 0.000000
107
+
108
+Evaluating 'isnan(NAN)'
109
+'isnan(NAN)' -> 1.000000
110
+
111
+Evaluating 'floor(NAN)'
112
+'floor(NAN)' -> nan
113
+
114
+Evaluating 'floor(123.123)'
115
+'floor(123.123)' -> 123.000000
116
+
117
+Evaluating 'floor(-123.123)'
118
+'floor(-123.123)' -> -124.000000
119
+
120
+Evaluating 'trunc(123.123)'
121
+'trunc(123.123)' -> 123.000000
122
+
123
+Evaluating 'trunc(-123.123)'
124
+'trunc(-123.123)' -> -123.000000
125
+
126
+Evaluating 'ceil(123.123)'
127
+'ceil(123.123)' -> 124.000000
128
+
129
+Evaluating 'ceil(-123.123)'
130
+'ceil(-123.123)' -> -123.000000
131
+
132
+Evaluating 'sqrt(1764)'
133
+'sqrt(1764)' -> 42.000000
134
+
135
+Evaluating 'sqrt(-1)'
136
+'sqrt(-1)' -> -nan
137
+
138
+Evaluating 'not(1)'
139
+'not(1)' -> 0.000000
140
+
141
+Evaluating 'not(NAN)'
142
+'not(NAN)' -> 0.000000
143
+
144
+Evaluating 'not(0)'
145
+'not(0)' -> 1.000000
146
+
147
+Evaluating 'pow(0,1.23)'
148
+'pow(0,1.23)' -> 0.000000
149
+
150
+Evaluating 'pow(PI,1.23)'
151
+'pow(PI,1.23)' -> 4.087844
152
+
153
+Evaluating 'PI^1.23'
154
+'PI^1.23' -> 4.087844
155
+
156
+Evaluating 'pow(-1,1.23)'
157
+'pow(-1,1.23)' -> -nan
158
+
159
+12.700000 == 12.7
160
+0.931323 == 0.931322575
0 161
new file mode 100644
... ...
@@ -0,0 +1,1024 @@
0
+     0      0
1
+    38      2
2
+   151     15
3
+   339     65
4
+   603    182
5
+   942    381
6
+  1356    664
7
+  1845   1021
8
+  2409   1450
9
+  3046   1953
10
+  3755   2530
11
+  4535   3182
12
+  5384   3907
13
+  6300   4700
14
+  7278   5563
15
+  8315   6491
16
+  9405   7481
17
+ 10541   8529
18
+ 11717   9629
19
+ 12924  10773
20
+ 14151  11956
21
+ 15385  13167
22
+ 16615  14396
23
+ 17825  15630
24
+ 18997  16857
25
+ 20114  18060
26
+ 21156  19222
27
+ 22102  20325
28
+ 22929  21349
29
+ 23613  22273
30
+ 24132  23073
31
+ 24461  23726
32
+ 24575  24208
33
+ 24453  24495
34
+ 24073  24564
35
+ 23416  24392
36
+ 22467  23959
37
+ 21213  23245
38
+ 19649  22236
39
+ 17773  20922
40
+ 15590  19296
41
+ 13116  17360
42
+ 10371  15119
43
+  7386  12591
44
+  4201   9797
45
+   867   6771
46
+ -2559   3554
47
+ -6008    199
48
+ -9405  -3235
49
+-12667  -6678
50
+-15707 -10053
51
+-18435 -13277
52
+-20762 -16261
53
+-22602 -18916
54
+-23875 -21153
55
+-24511 -22887
56
+-24457 -24040
57
+-23675 -24546
58
+-22151 -24352
59
+-19895 -23428
60
+-16946 -21762
61
+-13370 -19370
62
+ -9265 -16296
63
+ -4757 -12613
64
+     0  -8423
65
+  4831  -3858
66
+  9544    923
67
+ 13934   5743
68
+ 17799  10406
69
+ 20942  14708
70
+ 23189  18447
71
+ 24395  21430
72
+ 24457  23488
73
+ 23323  24483
74
+ 21001  24321
75
+ 17563  22963
76
+ 13148  20426
77
+  7959  16795
78
+  2259  12223
79
+ -3643   6922
80
+ -9405   1166
81
+-14670  -4731
82
+-19092 -10421
83
+-22359 -15550
84
+-24213 -19777
85
+-24481 -22797
86
+-23087 -24368
87
+-20071 -24334
88
+-15590 -22639
89
+ -9924 -19343
90
+ -3457 -14629
91
+  3345  -8793
92
+  9959  -2236
93
+ 15851   4563
94
+ 20517  11078
95
+ 23528  16779
96
+ 24575  21171
97
+ 23506  23846
98
+ 20349  24522
99
+ 15327  23076
100
+  8845  19572
101
+  1469  14264
102
+ -6117   7589
103
+-13180    135
104
+-18997  -7403
105
+-22942 -14289
106
+-24553 -19814
107
+-23592 -23377
108
+-20092 -24551
109
+-14366 -23145
110
+ -6989 -19239
111
+  1244 -13192
112
+  9405  -5620
113
+ 16532   2656
114
+ 21744  10697
115
+ 24357  17548
116
+ 23978  22356
117
+ 20579  24483
118
+ 14518  23593
119
+  6518  19723
120
+ -2409  13293
121
+-11083   5078
122
+-18310  -3876
123
+-23048 -12378
124
+-24568 -19252
125
+-22573 -23500
126
+-17270 -24458
127
+ -9370 -21908
128
+     0 -16140
129
+  9439  -7935
130
+ 17484   1526
131
+ 22832  10824
132
+ 24568  18508
133
+ 22327  23330
134
+ 16392  24452
135
+  7673  21608
136
+ -2409  15181
137
+-12146   6168
138
+-19828  -3955
139
+-24050 -13466
140
+-23978 -20689
141
+-19535 -24292
142
+-11451 -23552
143
+ -1168 -18512
144
+  9405 -10015
145
+ 18234    416
146
+ 23560  10836
147
+ 24257  19234
148
+ 20092  23929
149
+ 11817  23916
150
+  1055  19105
151
+ -9993  10379
152
+-18997   -540
153
+-23986 -11413
154
+-23802 -19939
155
+-18385 -24246
156
+ -8845 -23318
157
+  2746 -17260
158
+ 13778  -7325
159
+ 21691   4319
160
+ 24575  15045
161
+ 21656  22357
162
+ 13528  24482
163
+  2071  20823
164
+ -9959  12152
165
+-19581    484
166
+-24331 -11367
167
+-22915 -20460
168
+-15590 -24459
169
+ -4164 -22257
170
+  8421 -14315
171
+ 18828  -2603
172
+ 24213   9857
173
+ 23022  19756
174
+ 15474  24383
175
+  3569  22388
176
+ -9405  14211
177
+-19761   2031
178
+-24471 -10785
179
+-22069 -20591
180
+-13148 -24512
181
+  -264 -21311
182
+ 12763 -11818
183
+ 21968   1241
184
+ 24457  13990
185
+ 19351  22545
186
+  8137  24211
187
+ -5715  18362
188
+-17799   6720
189
+-24167  -7108
190
+-22646 -18722
191
+-13622 -24326
192
+     0 -21995
193
+ 13685 -12382
194
+ 22762   1409
195
+ 24035  14788
196
+ 16946  23188
197
+  3867  23644
198
+-10643  15884
199
+-21401   2514
200
+-24457 -11806
201
+-18584 -21960
202
+ -5825 -24220
203
+  9160 -17649
204
+ 20762  -4546
205
+ 24527  10303
206
+ 18901  21343
207
+  5935  24337
208
+ -9405  18028
209
+-21098   4727
210
+-24442 -10470
211
+-17979 -21608
212
+ -4201 -24206
213
+ 11351 -17110
214
+ 22280  -3064
215
+ 23970  12287
216
+ 15590  22636
217
+   565  23615
218
+-14760  14693
219
+-23773   -479
220
+-22467 -15504
221
+-11284 -23907
222
+  4942 -21954
223
+ 19021 -10373
224
+ 24575   5837
225
+ 18973  19502
226
+  4646  24445
227
+-11883  18316
228
+-22929   3786
229
+-23226 -12541
230
+-12505 -23090
231
+  4239 -22841
232
+ 18997 -11784
233
+ 24567   4932
234
+ 18107  19331
235
+  2671  24403
236
+-14151  17558
237
+-23919   2036
238
+-21602 -14549
239
+ -8244 -23897
240
+  9405 -21206
241
+ 22232  -7710
242
+ 23473   9785
243
+ 12342  22272
244
+ -5384  23186
245
+-20286  11920
246
+-24287  -5693
247
+-15090 -20319
248
+  2409 -24060
249
+ 18633 -14771
250
+ 24538   2613
251
+ 16698  18608
252
+  -603  24329
253
+-17616  16471
254
+-24575   -682
255
+-17351 -17495
256
+     0 -24355
257
+ 17404 -17211
258
+ 24575    -65
259
+ 17136  17163
260
+  -603  24334
261
+-18031  17094
262
+-24538   -374
263
+-16023 -17660
264
+  2409 -24287
265
+ 19397 -16108
266
+ 24287   1992
267
+ 13872  18902
268
+ -5384  24066
269
+-21251  14131
270
+-23473  -4761
271
+-10473 -20664
272
+  9405 -23351
273
+ 23151 -10967
274
+ 21602   8573
275
+  5642  22543
276
+-14151  21682
277
+-24430   6431
278
+-18107 -13147
279
+   641 -23920
280
+ 18997 -18514
281
+ 24207   -475
282
+ 12505  17922
283
+ -8030  23970
284
+-22929  13357
285
+-21511  -6625
286
+ -4646 -21972
287
+ 15619 -21758
288
+ 24575  -6009
289
+ 15561  14083
290
+ -4942  24019
291
+-21831  16485
292
+-22467  -3138
293
+ -6227 -20474
294
+ 14760 -22641
295
+ 24569  -7904
296
+ 15590  12791
297
+ -5421  23839
298
+-22280  16760
299
+-21797  -3160
300
+ -4201 -20666
301
+ 16754 -22169
302
+ 24442  -6381
303
+ 12602  14430
304
+ -9405  23865
305
+-23848  14348
306
+-18901  -6644
307
+  1545 -22308
308
+ 20762 -19937
309
+ 22804  -1339
310
+  5825  18365
311
+-16080  22954
312
+-24457   8529
313
+-12080 -13009
314
+ 10643 -23650
315
+ 24269 -14353
316
+ 16946   7119
317
+ -5127  22521
318
+-22762  18602
319
+-20413  -1370
320
+     0 -20152
321
+ 20454 -21342
322
+ 22646  -3797
323
+  4461  17096
324
+-17799  22804
325
+-23902   8148
326
+ -8137 -13817
327
+ 15149 -23296
328
+ 24457 -11618
329
+ 11016  10660
330
+-12763  23135
331
+-24574  14243
332
+-13148  -7861
333
+ 10813 -22608
334
+ 24471 -16124
335
+ 14609   5565
336
+ -9405  21949
337
+-24315  17379
338
+-15474  -3849
339
+  8598 -21336
340
+ 24213 -18120
341
+ 15793   2745
342
+ -8421  20885
343
+-24220  18429
344
+-15590  -2263
345
+  8880 -20663
346
+ 24331 -18359
347
+ 14851   2398
348
+ -9959  20685
349
+-24488  17917
350
+-13528  -3137
351
+ 11618 -20918
352
+ 24575 -17075
353
+ 11551   4460
354
+-13778  21286
355
+-24421  15770
356
+ -8845  -6328
357
+ 16307 -21661
358
+ 23802 -13916
359
+  5348   8671
360
+-18997  21868
361
+-22452  11421
362
+ -1055 -11371
363
+ 21548 -21685
364
+ 20092  -8212
365
+ -3941  14242
366
+-23560  20853
367
+-16476   4267
368
+  9405 -17009
369
+ 24547 -19106
370
+ 11451    343
371
+-14911  19309
372
+-23978  16208
373
+ -5053  -5409
374
+ 19828 -20699
375
+ 21364 -12016
376
+ -2409  10553
377
+-23347  20700
378
+-16392   6559
379
+ 10268 -15211
380
+ 24568 -18879
381
+  9090   -118
382
+-17484  18664
383
+-22690  14969
384
+     0  -6714
385
+ 22719 -20134
386
+ 17270  -9014
387
+ -9717  13022
388
+-24568  18943
389
+ -8527   1506
390
+ 18310 -17662
391
+ 21934 -14749
392
+ -2409   6538
393
+-23695  19463
394
+-14518   7789
395
+ 13433 -13633
396
+ 23978 -17566
397
+  3270    935
398
+-21744  18075
399
+-18184  11812
400
+  9405  -9654
401
+ 24544 -18394
402
+  6989  -3082
403
+-19939  16117
404
+-20092  13945
405
+  6881  -6613
406
+ 24553 -18196
407
+  8809  -5437
408
+-18997  14458
409
+-20742  14731
410
+  6117  -4859
411
+ 24531 -17657
412
+  8845  -6307
413
+-19210  13526
414
+-20349  14588
415
+  7170  -4444
416
+ 24575 -17109
417
+  7098  -5874
418
+-20517  13412
419
+-18780  13691
420
+  9959  -5272
421
+ 24347 -16558
422
+  3457  -4241
423
+-22482  13949
424
+-15590  11979
425
+ 14181  -7142
426
+ 23087 -15723
427
+ -2146  -1459
428
+-24213  14726
429
+-10200   9228
430
+ 19092  -9692
431
+ 19717 -14108
432
+ -9405   2343
433
+-24304  15085
434
+ -2259   5221
435
+ 23251 -12286
436
+ 13148 -11127
437
+-17190   6746
438
+-21001  14161
439
+  7745      2
440
+ 24457 -13938
441
+  2971  -6372
442
+-23189  10842
443
+-12860  11094
444
+ 17799  -5795
445
+ 20243 -13421
446
+ -9544    -30
447
+-24096  13184
448
+     0   5498
449
+ 24110 -10713
450
+  9265  -9718
451
+-20620   6673
452
+-16946  12155
453
+ 14427  -1883
454
+ 22151 -12653
455
+ -6591  -2861
456
+-24457  11378
457
+ -1770   6908
458
+ 23875  -8726
459
+  9648  -9817
460
+-20762   5209
461
+-16251  11385
462
+ 15707  -1358
463
+ 21059 -11610
464
+ -9405  -2353
465
+-23830  10656
466
+  2559   5560
467
+ 24560  -8789
468
+  4201  -8028
469
+-23439   6314
470
+-10371   9643
471
+ 20783  -3542
472
+ 15590 -10404
473
+-16973    742
474
+-19649  10386
475
+ 12407   1870
476
+ 22467  -9720
477
+ -7458  -4144
478
+-24073   8562
479
+  2446   5991
480
+ 24575  -7072
481
+  2371  -7375
482
+-24132   5398
483
+ -6808   8306
484
+ 22929  -3667
485
+ 10745  -8824
486
+-21156   1980
487
+-14120   8987
488
+ 18997   -408
489
+ 16918  -8863
490
+-16615  -1001
491
+-19163   8521
492
+ 14151   2220
493
+ 20902  -8027
494
+-11717  -3241
495
+-22200   7441
496
+  9405   4071
497
+ 23126  -6811
498
+ -7278  -4722
499
+-23754   6177
500
+  5384   5213
501
+ 24153  -5571
502
+ -3755  -5566
503
+-24386   5013
504
+  2409   5801
505
+ 24506  -4521
506
+ -1356  -5939
507
+-24557   4104
508
+   603   5999
509
+ 24573  -3765
510
+  -151  -5994
511
+-24575   3508
512
+     0   5937
513
+ 24575  -3331
514
+  -151  -5835
515
+-24573   3232
516
+   603   5694
517
+ 24557  -3205
518
+ -1356  -5517
519
+-24506   3244
520
+  2409   5303
521
+ 24386  -3343
522
+ -3755  -5049
523
+-24153   3494
524
+  5384   4752
525
+ 23754  -3685
526
+ -7278  -4407
527
+-23126   3906
528
+  9405   4007
529
+ 22200  -4143
530
+-11717  -3547
531
+-20902   4380
532
+ 14151   3025
533
+ 19163  -4598
534
+-16615  -2434
535
+-16918   4778
536
+ 18997   1780
537
+ 14120  -4898
538
+-21156  -1066
539
+-10745   4934
540
+ 22929    304
541
+  6808  -4862
542
+-24132    489
543
+ -2371   4664
544
+ 24575  -1288
545
+ -2446  -4320
546
+-24073   2060
547
+  7458   3820
548
+ 22467  -2767
549
+-12407  -3162
550
+-19649   3365
551
+ 16973   2357
552
+ 15590  -3808
553
+-20783  -1429
554
+-10371   4050
555
+ 23439    419
556
+  4201  -4055
557
+-24560    616
558
+  2559   3795
559
+ 23830  -1607
560
+ -9405  -3266
561
+-21059   2473
562
+ 15707   2486
563
+ 16251  -3130
564
+-20762  -1499
565
+ -9648   3505
566
+ 23875    386
567
+  1770  -3539
568
+-24457    754
569
+  6591   3205
570
+ 22151  -1798
571
+-14427  -2518
572
+-16946   2618
573
+ 20620   1540
574
+  9265  -3101
575
+-24110   -381
576
+     0   3162
577
+ 24096   -809
578
+ -9544  -2775
579
+-20243   1859
580
+ 17799   1978
581
+ 12860  -2598
582
+-23189   -879
583
+ -2971   2893
584
+ 24457   -344
585
+ -7745  -2674
586
+-21001   1478
587
+ 17190   1966
588
+ 13148  -2304
589
+-23251   -890
590
+ -2259   2647
591
+ 24304   -341
592
+ -9405  -2421
593
+-19717   1467
594
+ 19092   1662
595
+ 10200  -2229
596
+-24213   -535
597
+  2146   2434
598
+ 23087   -692
599
+-14181  -2022
600
+-15590   1706
601
+ 22482   1090
602
+  3457  -2230
603
+-24347    115
604
+  9959   2111
605
+ 18780  -1251
606
+-20517  -1374
607
+ -7098   1975
608
+ 24575    238
609
+ -7170  -2057
610
+-20349    938
611
+ 19210   1464
612
+  8845  -1763
613
+-24531   -392
614
+  6117   1949
615
+ 20742   -783
616
+-18997  -1425
617
+ -8809   1630
618
+ 24553    385
619
+ -6881  -1825
620
+-20092    770
621
+ 19939   1291
622
+  6989  -1572
623
+-24544   -244
624
+  9405   1688
625
+ 18184   -869
626
+-21744  -1069
627
+ -3270   1559
628
+ 23978     -7
629
+-13433  -1511
630
+-14518   1041
631
+ 23695    753
632
+ -2409  -1536
633
+-21934    344
634
+ 18310   1251
635
+  8527  -1225
636
+-24568   -337
637
+  9717   1436
638
+ 17270   -719
639
+-22719   -869
640
+     0   1342
641
+ 22690   -157
642
+-17484  -1188
643
+ -9090   1051
644
+ 24568    353
645
+-10268  -1293
646
+-16392    658
647
+ 23347    745
648
+ -2409  -1224
649
+-21364    244
650
+ 19828    996
651
+  5053  -1036
652
+-23978   -132
653
+ 14911   1114
654
+ 11451   -783
655
+-24547   -437
656
+  9405   1124
657
+ 16476   -513
658
+-23560   -661
659
+  3941   1058
660
+ 20092   -257
661
+-21548   -807
662
+ -1055    945
663
+ 22452    -37
664
+-18997   -887
665
+ -5348    815
666
+ 23802    142
667
+-16307   -917
668
+ -8845    682
669
+ 24421    276
670
+-13778   -913
671
+-11551    563
672
+ 24575    371
673
+-11618   -888
674
+-13528    463
675
+ 24488    431
676
+ -9959   -854
677
+-14851    386
678
+ 24331    462
679
+ -8880   -815
680
+-15590    333
681
+ 24220    471
682
+ -8421   -779
683
+-15793    302
684
+ 24213    460
685
+ -8598   -746
686
+-15474    292
687
+ 24315    433
688
+ -9405   -717
689
+-14609    300
690
+ 24471    391
691
+-10813   -689
692
+-13148    324
693
+ 24574    336
694
+-12763   -660
695
+-11016    359
696
+ 24457    267
697
+-15149   -627
698
+ -8137    400
699
+ 23902    184
700
+-17799   -584
701
+ -4461    444
702
+ 22646     90
703
+-20454   -527
704
+     0    483
705
+ 20413    -15
706
+-22762   -452
707
+  5127    511
708
+ 16946   -124
709
+-24269   -357
710
+ 10643    517
711
+ 12080   -232
712
+-24457   -241
713
+ 16080    495
714
+  5825   -328
715
+-22804   -107
716
+ 20762    440
717
+ -1545   -400
718
+-18901     35
719
+ 23848    347
720
+ -9405   -437
721
+-12602    173
722
+ 24442    220
723
+-16754   -426
724
+ -4201    290
725
+ 21797     69
726
+-22280   -362
727
+  5421    366
728
+ 15590    -89
729
+-24569   -247
730
+ 14760    384
731
+  6227   -228
732
+-22467    -95
733
+ 21831    335
734
+ -4942   -321
735
+-15561     71
736
+ 24575    222
737
+-15619   -344
738
+ -4646    214
739
+ 21511     65
740
+-22929   -288
741
+  8030    300
742
+ 12505   -102
743
+-24207   -162
744
+ 18997    304
745
+  -641   -232
746
+-18107      4
747
+ 24430    218
748
+-14151   -286
749
+ -5642    160
750
+ 21602     68
751
+-23151   -244
752
+  9405    253
753
+ 10473    -97
754
+-23473   -115
755
+ 21251    247
756
+ -5384   -216
757
+-13872     49
758
+ 24287    142
759
+-19397   -238
760
+  2409    183
761
+ 16023    -17
762
+-24538   -153
763
+ 18031    224
764
+  -603   -158
765
+-17136      0
766
+ 24575    153
767
+-17404   -209
768
+     0    142
769
+ 17351      6
770
+-24575   -144
771
+ 17616    196
772
+  -603   -133
773
+-16698     -1
774
+ 24538    131
775
+-18633   -182
776
+  2409    132
777
+ 15090    -11
778
+-24287   -111
779
+ 20286    169
780
+ -5384   -134
781
+-12342     30
782
+ 23473     86
783
+-22232   -152
784
+  9405    138
785
+  8244    -53
786
+-21602    -56
787
+ 23919    132
788
+-14151   -138
789
+ -2671     76
790
+ 18107     21
791
+-24567   -104
792
+ 18997    134
793
+ -4239    -98
794
+-12505     16
795
+ 23226     69
796
+-22929   -119
797
+ 11883    111
798
+  4646    -53
799
+-18973    -28
800
+ 24575     92
801
+-19021   -113
802
+  4942     82
803
+ 11284    -16
804
+-22467    -54
805
+ 23773     97
806
+-14760    -97
807
+  -565     56
808
+ 15590      8
809
+-23970    -65
810
+ 22280     93
811
+-11351    -82
812
+ -4201     37
813
+ 17979     21
814
+-24442    -67
815
+ 21098     85
816
+ -9405    -69
817
+ -5935     26
818
+ 18901     24
819
+-24527    -64
820
+ 20762     77
821
+ -9160    -61
822
+ -5825     23
823
+ 18584     21
824
+-24457    -56
825
+ 21401     69
826
+-10643    -57
827
+ -3867     25
828
+ 16946     15
829
+-24035    -47
830
+ 22762     62
831
+-13685    -55
832
+     0     29
833
+ 13622      4
834
+-22646    -35
835
+ 24167     53
836
+-17799    -52
837
+  5715     36
838
+  8137     -8
839
+-19351    -21
840
+ 24457     41
841
+-21968    -49
842
+ 12763     41
843
+   264    -21
844
+-13148     -4
845
+ 22069     27
846
+-24471    -40
847
+ 19761     42
848
+ -9405    -31
849
+ -3569     12
850
+ 15474      9
851
+-23022    -27
852
+ 24213     36
853
+-18828    -35
854
+  8421     25
855
+  4164     -9
856
+-15590     -9
857
+ 22915     23
858
+-24331    -31
859
+ 19581     31
860
+ -9959    -23
861
+ -2071     10
862
+ 13528      5
863
+-21656    -18
864
+ 24575     26
865
+-21691    -27
866
+ 13778     22
867
+ -2746    -12
868
+ -8845      0
869
+ 18385     11
870
+-23802    -20
871
+ 23986     23
872
+-18997    -22
873
+  9993     15
874
+  1055     -7
875
+-11817     -3
876
+ 20092     11
877
+-24257    -17
878
+ 23560     19
879
+-18234    -17
880
+  9405     12
881
+  1168     -5
882
+-11451     -3
883
+ 19535     10
884
+-23978    -14
885
+ 24050     16
886
+-19828    -14
887
+ 12146     11
888
+ -2409     -5
889
+ -7673      0
890
+ 16392      6
891
+-22327    -10
892
+ 24568     12
893
+-22832    -12
894
+ 17484     11
895
+ -9439     -7
896
+     0      3
897
+  9370      2
898
+-17270     -5
899
+ 22573      8
900
+-24568     -9
901
+ 23048     10
902
+-18310     -8
903
+ 11083      5
904
+ -2409     -3
905
+ -6518     -1
906
+ 14518      3
907
+-20579     -5
908
+ 23978      7
909
+-24357     -7
910
+ 21744      7
911
+-16532     -6
912
+  9405      3
913
+ -1244     -1
914
+ -6989     -1
915
+ 14366      3
916
+-20092     -4
917
+ 23592      5
918
+-24553     -5
919
+ 22942      5
920
+-18997     -4
921
+ 13180      3
922
+ -6117     -2
923
+ -1469      1
924
+  8845      2
925
+-15327     -2
926
+ 20349      3
927
+-23506     -4
928
+ 24575      3
929
+-23528     -4
930
+ 20517      3
931
+-15851     -2
932
+  9959      1
933
+ -3345      0
934
+ -3457      0
935
+  9924      1
936
+-15590     -2
937
+ 20071      2
938
+-23087     -2
939
+ 24481      3
940
+-24213     -2
941
+ 22359      2
942
+-19092     -1
943
+ 14670      1
944
+ -9405      0
945
+  3643      0
946
+  2259      0
947
+ -7959     -1
948
+ 13148      1
949
+-17563     -1
950
+ 21001      1
951
+-23323     -1
952
+ 24457      1
953
+-24395     -1
954
+ 23189      1
955
+-20942     -1
956
+ 17799      1
957
+-13934      0
958
+  9544      0
959
+ -4831      0
960
+     0      0
961
+  4757      1
962
+ -9265      0
963
+ 13370      0
964
+-16946     -1
965
+ 19895      0
966
+-22151     -1
967
+ 23675      0
968
+-24457     -1
969
+ 24511      0
970
+-23875      0
971
+ 22602      0
972
+-20762      0
973
+ 18435      0
974
+-15707      0
975
+ 12667      0
976
+ -9405      0
977
+  6008      0
978
+ -2559      0
979
+  -867      0
980
+  4201      0
981
+ -7386      0
982
+ 10371      0
983
+-13116      0
984
+ 15590      0
985
+-17773      0
986
+ 19649      0
987
+-21213      0
988
+ 22467      0
989
+-23416      0
990
+ 24073      0
991
+-24453      0
992
+ 24575      0
993
+-24461      0
994
+ 24132      0
995
+-23613      0
996
+ 22929      0
997
+-22102      0
998
+ 21156      0
999
+-20114      0
1000
+ 18997      0
1001
+-17825      0
1002
+ 16615      0
1003
+-15385      0
1004
+ 14151      0
1005
+-12924      0
1006
+ 11717      0
1007
+-10541      0
1008
+  9405      0
1009
+ -8315      0
1010
+  7278      0
1011
+ -6300      0
1012
+  5384      0
1013
+ -4535      0
1014
+  3755      0
1015
+ -3046      0
1016
+  2409      0
1017
+ -1845      0
1018
+  1356      0
1019
+  -942      0
1020
+   603      0
1021
+  -339      0
1022
+   151      0
1023
+   -38      0