annotate dct-test.c @ 2956:5f51b1e0bed6 libavcodec

Cook compatibe decoder, patch by Benjamin Larsson Add cook demucing, change rm demuxer so that it reorders audio packets before sending them to the decoder, and send minimum decodeable sized packets; pass only real codec extradata fo the decoder Fix 28_8 decoder for the new demuxer strategy
author rtognimp
date Fri, 09 Dec 2005 16:08:18 +0000
parents 062b2d5d1eba
children ef2149182f1c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
1 /**
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
2 * @file dct-test.c
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
3 * DCT test. (c) 2001 Fabrice Bellard.
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
4 * Started from sample code by Juan J. Sierralta P.
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
5 */
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
6
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
7 #include <stdlib.h>
986e461dc072 Initial revision
glantau
parents:
diff changeset
8 #include <stdio.h>
986e461dc072 Initial revision
glantau
parents:
diff changeset
9 #include <string.h>
986e461dc072 Initial revision
glantau
parents:
diff changeset
10 #include <sys/time.h>
986e461dc072 Initial revision
glantau
parents:
diff changeset
11 #include <unistd.h>
986e461dc072 Initial revision
glantau
parents:
diff changeset
12
986e461dc072 Initial revision
glantau
parents:
diff changeset
13 #include "dsputil.h"
986e461dc072 Initial revision
glantau
parents:
diff changeset
14
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
15 #include "i386/mmx.h"
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
16 #include "simple_idct.h"
1557
5d53c03186a1 floating point AAN DCT
michael
parents: 1106
diff changeset
17 #include "faandct.h"
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
18
980
0c32f81b42b2 suppressed getopt.h
bellard
parents: 722
diff changeset
19 #ifndef MAX
0c32f81b42b2 suppressed getopt.h
bellard
parents: 722
diff changeset
20 #define MAX(a, b) (((a) > (b)) ? (a) : (b))
0c32f81b42b2 suppressed getopt.h
bellard
parents: 722
diff changeset
21 #endif
0c32f81b42b2 suppressed getopt.h
bellard
parents: 722
diff changeset
22
2872
062b2d5d1eba add xvid idcts to dct-test
michael
parents: 1574
diff changeset
23 #undef printf
062b2d5d1eba add xvid idcts to dct-test
michael
parents: 1574
diff changeset
24
062b2d5d1eba add xvid idcts to dct-test
michael
parents: 1574
diff changeset
25 void *fast_memcpy(void *a, const void *b, size_t c){return memcpy(a,b,c);};
062b2d5d1eba add xvid idcts to dct-test
michael
parents: 1574
diff changeset
26
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
27 /* reference fdct/idct */
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
28 extern void fdct(DCTELEM *block);
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
29 extern void idct(DCTELEM *block);
2872
062b2d5d1eba add xvid idcts to dct-test
michael
parents: 1574
diff changeset
30 extern void ff_idct_xvid_mmx(DCTELEM *block);
062b2d5d1eba add xvid idcts to dct-test
michael
parents: 1574
diff changeset
31 extern void ff_idct_xvid_mmx2(DCTELEM *block);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
32 extern void init_fdct();
986e461dc072 Initial revision
glantau
parents:
diff changeset
33
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
34 extern void j_rev_dct(DCTELEM *data);
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
35 extern void ff_mmx_idct(DCTELEM *data);
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
36 extern void ff_mmxext_idct(DCTELEM *data);
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
37
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
38 extern void odivx_idct_c (short *block);
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
39
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
40 #define AANSCALE_BITS 12
986e461dc072 Initial revision
glantau
parents:
diff changeset
41 static const unsigned short aanscales[64] = {
986e461dc072 Initial revision
glantau
parents:
diff changeset
42 /* precomputed values scaled up by 14 bits */
986e461dc072 Initial revision
glantau
parents:
diff changeset
43 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520,
986e461dc072 Initial revision
glantau
parents:
diff changeset
44 22725, 31521, 29692, 26722, 22725, 17855, 12299, 6270,
986e461dc072 Initial revision
glantau
parents:
diff changeset
45 21407, 29692, 27969, 25172, 21407, 16819, 11585, 5906,
986e461dc072 Initial revision
glantau
parents:
diff changeset
46 19266, 26722, 25172, 22654, 19266, 15137, 10426, 5315,
986e461dc072 Initial revision
glantau
parents:
diff changeset
47 16384, 22725, 21407, 19266, 16384, 12873, 8867, 4520,
986e461dc072 Initial revision
glantau
parents:
diff changeset
48 12873, 17855, 16819, 15137, 12873, 10114, 6967, 3552,
986e461dc072 Initial revision
glantau
parents:
diff changeset
49 8867, 12299, 11585, 10426, 8867, 6967, 4799, 2446,
986e461dc072 Initial revision
glantau
parents:
diff changeset
50 4520, 6270, 5906, 5315, 4520, 3552, 2446, 1247
986e461dc072 Initial revision
glantau
parents:
diff changeset
51 };
986e461dc072 Initial revision
glantau
parents:
diff changeset
52
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
53 uint8_t cropTbl[256 + 2 * MAX_NEG_CROP];
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
54
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
55 int64_t gettime(void)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
56 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
57 struct timeval tv;
986e461dc072 Initial revision
glantau
parents:
diff changeset
58 gettimeofday(&tv,NULL);
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
59 return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
60 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
61
986e461dc072 Initial revision
glantau
parents:
diff changeset
62 #define NB_ITS 20000
986e461dc072 Initial revision
glantau
parents:
diff changeset
63 #define NB_ITS_SPEED 50000
986e461dc072 Initial revision
glantau
parents:
diff changeset
64
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
65 static short idct_mmx_perm[64];
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
66
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
67 static short idct_simple_mmx_perm[64]={
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
68 0x00, 0x08, 0x04, 0x09, 0x01, 0x0C, 0x05, 0x0D,
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
69 0x10, 0x18, 0x14, 0x19, 0x11, 0x1C, 0x15, 0x1D,
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
70 0x20, 0x28, 0x24, 0x29, 0x21, 0x2C, 0x25, 0x2D,
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
71 0x12, 0x1A, 0x16, 0x1B, 0x13, 0x1E, 0x17, 0x1F,
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
72 0x02, 0x0A, 0x06, 0x0B, 0x03, 0x0E, 0x07, 0x0F,
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
73 0x30, 0x38, 0x34, 0x39, 0x31, 0x3C, 0x35, 0x3D,
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
74 0x22, 0x2A, 0x26, 0x2B, 0x23, 0x2E, 0x27, 0x2F,
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
75 0x32, 0x3A, 0x36, 0x3B, 0x33, 0x3E, 0x37, 0x3F,
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
76 };
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
77
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
78 void idct_mmx_init(void)
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
79 {
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
80 int i;
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
81
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
82 /* the mmx/mmxext idct uses a reordered input, so we patch scan tables */
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
83 for (i = 0; i < 64; i++) {
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
84 idct_mmx_perm[i] = (i & 0x38) | ((i & 6) >> 1) | ((i & 1) << 2);
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
85 // idct_simple_mmx_perm[i] = simple_block_permute_op(i);
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
86 }
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
87 }
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
88
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
89 static DCTELEM block[64] __attribute__ ((aligned (8)));
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
90 static DCTELEM block1[64] __attribute__ ((aligned (8)));
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
91 static DCTELEM block_org[64] __attribute__ ((aligned (8)));
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
92
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
93 void dct_error(const char *name, int is_idct,
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
94 void (*fdct_func)(DCTELEM *block),
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
95 void (*fdct_ref)(DCTELEM *block), int test)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
96 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
97 int it, i, scale;
986e461dc072 Initial revision
glantau
parents:
diff changeset
98 int err_inf, v;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
99 int64_t err2, ti, ti1, it1;
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
100 int64_t sysErr[64], sysErrMax=0;
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
101 int maxout=0;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
102 int blockSumErrMax=0, blockSumErr;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
103
986e461dc072 Initial revision
glantau
parents:
diff changeset
104 srandom(0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
105
986e461dc072 Initial revision
glantau
parents:
diff changeset
106 err_inf = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
107 err2 = 0;
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
108 for(i=0; i<64; i++) sysErr[i]=0;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
109 for(it=0;it<NB_ITS;it++) {
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
110 for(i=0;i<64;i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
111 block1[i] = 0;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
112 switch(test){
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
113 case 0:
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
114 for(i=0;i<64;i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
115 block1[i] = (random() % 512) -256;
635
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
116 if (is_idct){
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
117 fdct(block1);
635
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
118
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
119 for(i=0;i<64;i++)
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
120 block1[i]>>=3;
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
121 }
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
122 break;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
123 case 1:{
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
124 int num= (random()%10)+1;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
125 for(i=0;i<num;i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
126 block1[random()%64] = (random() % 512) -256;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
127 }break;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
128 case 2:
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
129 block1[0]= (random()%4096)-2048;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
130 block1[63]= (block1[0]&1)^1;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
131 break;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
132 }
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
133
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
134 #if 0 // simulate mismatch control
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
135 { int sum=0;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
136 for(i=0;i<64;i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
137 sum+=block1[i];
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
138
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
139 if((sum&1)==0) block1[63]^=1;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
140 }
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
141 #endif
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
142
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
143 for(i=0; i<64; i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
144 block_org[i]= block1[i];
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
145
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
146 if (fdct_func == ff_mmx_idct ||
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
147 fdct_func == j_rev_dct || fdct_func == ff_mmxext_idct) {
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
148 for(i=0;i<64;i++)
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
149 block[idct_mmx_perm[i]] = block1[i];
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
150 } else if(fdct_func == ff_simple_idct_mmx ) {
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
151 for(i=0;i<64;i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
152 block[idct_simple_mmx_perm[i]] = block1[i];
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
153
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
154 } else {
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
155 for(i=0; i<64; i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
156 block[i]= block1[i];
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
157 }
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
158 #if 0 // simulate mismatch control for tested IDCT but not the ref
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
159 { int sum=0;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
160 for(i=0;i<64;i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
161 sum+=block[i];
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
162
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
163 if((sum&1)==0) block[63]^=1;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
164 }
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
165 #endif
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
166
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
167 fdct_func(block);
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
168 emms(); /* for ff_mmx_idct */
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
169
1562
bf452704100f optionally merge postscale into quantization table for the float aan dct
michael
parents: 1557
diff changeset
170 if (fdct_func == fdct_ifast
bf452704100f optionally merge postscale into quantization table for the float aan dct
michael
parents: 1557
diff changeset
171 #ifndef FAAN_POSTSCALE
bf452704100f optionally merge postscale into quantization table for the float aan dct
michael
parents: 1557
diff changeset
172 || fdct_func == ff_faandct
bf452704100f optionally merge postscale into quantization table for the float aan dct
michael
parents: 1557
diff changeset
173 #endif
bf452704100f optionally merge postscale into quantization table for the float aan dct
michael
parents: 1557
diff changeset
174 ) {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
175 for(i=0; i<64; i++) {
635
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
176 scale = 8*(1 << (AANSCALE_BITS + 11)) / aanscales[i];
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
177 block[i] = (block[i] * scale /*+ (1<<(AANSCALE_BITS-1))*/) >> AANSCALE_BITS;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
178 }
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
179 }
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
180
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
181 fdct_ref(block1);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
182
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
183 blockSumErr=0;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
184 for(i=0;i<64;i++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
185 v = abs(block[i] - block1[i]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
186 if (v > err_inf)
986e461dc072 Initial revision
glantau
parents:
diff changeset
187 err_inf = v;
986e461dc072 Initial revision
glantau
parents:
diff changeset
188 err2 += v * v;
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
189 sysErr[i] += block[i] - block1[i];
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
190 blockSumErr += v;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
191 if( abs(block[i])>maxout) maxout=abs(block[i]);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
192 }
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
193 if(blockSumErrMax < blockSumErr) blockSumErrMax= blockSumErr;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
194 #if 0 // print different matrix pairs
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
195 if(blockSumErr){
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
196 printf("\n");
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
197 for(i=0; i<64; i++){
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
198 if((i&7)==0) printf("\n");
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
199 printf("%4d ", block_org[i]);
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
200 }
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
201 for(i=0; i<64; i++){
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
202 if((i&7)==0) printf("\n");
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
203 printf("%4d ", block[i] - block1[i]);
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
204 }
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
205 }
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
206 #endif
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
207 }
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
208 for(i=0; i<64; i++) sysErrMax= MAX(sysErrMax, ABS(sysErr[i]));
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
209
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
210 #if 1 // dump systematic errors
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
211 for(i=0; i<64; i++){
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
212 if(i%8==0) printf("\n");
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
213 printf("%5d ", (int)sysErr[i]);
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
214 }
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
215 printf("\n");
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
216 #endif
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
217
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
218 printf("%s %s: err_inf=%d err2=%0.8f syserr=%0.8f maxout=%d blockSumErr=%d\n",
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
219 is_idct ? "IDCT" : "DCT",
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
220 name, err_inf, (double)err2 / NB_ITS / 64.0, (double)sysErrMax / NB_ITS, maxout, blockSumErrMax);
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
221 #if 1 //Speed test
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
222 /* speed test */
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
223 for(i=0;i<64;i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
224 block1[i] = 0;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
225 switch(test){
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
226 case 0:
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
227 for(i=0;i<64;i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
228 block1[i] = (random() % 512) -256;
635
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
229 if (is_idct){
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
230 fdct(block1);
635
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
231
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
232 for(i=0;i<64;i++)
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
233 block1[i]>>=3;
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
234 }
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
235 break;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
236 case 1:{
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
237 case 2:
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
238 block1[0] = (random() % 512) -256;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
239 block1[1] = (random() % 512) -256;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
240 block1[2] = (random() % 512) -256;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
241 block1[3] = (random() % 512) -256;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
242 }break;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
243 }
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
244
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
245 if (fdct_func == ff_mmx_idct ||
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
246 fdct_func == j_rev_dct || fdct_func == ff_mmxext_idct) {
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
247 for(i=0;i<64;i++)
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
248 block[idct_mmx_perm[i]] = block1[i];
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
249 } else if(fdct_func == ff_simple_idct_mmx ) {
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
250 for(i=0;i<64;i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
251 block[idct_simple_mmx_perm[i]] = block1[i];
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
252 } else {
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
253 for(i=0; i<64; i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
254 block[i]= block1[i];
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
255 }
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
256
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
257 ti = gettime();
986e461dc072 Initial revision
glantau
parents:
diff changeset
258 it1 = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
259 do {
986e461dc072 Initial revision
glantau
parents:
diff changeset
260 for(it=0;it<NB_ITS_SPEED;it++) {
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
261 for(i=0; i<64; i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
262 block[i]= block1[i];
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
263 // memcpy(block, block1, sizeof(DCTELEM) * 64);
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
264 // dont memcpy especially not fastmemcpy because it does movntq !!!
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
265 fdct_func(block);
986e461dc072 Initial revision
glantau
parents:
diff changeset
266 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
267 it1 += NB_ITS_SPEED;
986e461dc072 Initial revision
glantau
parents:
diff changeset
268 ti1 = gettime() - ti;
986e461dc072 Initial revision
glantau
parents:
diff changeset
269 } while (ti1 < 1000000);
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
270 emms();
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
271
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
272 printf("%s %s: %0.1f kdct/s\n",
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
273 is_idct ? "IDCT" : "DCT",
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
274 name, (double)it1 * 1000.0 / (double)ti1);
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
275 #endif
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
276 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
277
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
278 static uint8_t img_dest[64] __attribute__ ((aligned (8)));
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
279 static uint8_t img_dest1[64] __attribute__ ((aligned (8)));
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
280
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
281 void idct248_ref(uint8_t *dest, int linesize, int16_t *block)
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
282 {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
283 static int init;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
284 static double c8[8][8];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
285 static double c4[4][4];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
286 double block1[64], block2[64], block3[64];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
287 double s, sum, v;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
288 int i, j, k;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
289
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
290 if (!init) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
291 init = 1;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
292
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
293 for(i=0;i<8;i++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
294 sum = 0;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
295 for(j=0;j<8;j++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
296 s = (i==0) ? sqrt(1.0/8.0) : sqrt(1.0/4.0);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
297 c8[i][j] = s * cos(M_PI * i * (j + 0.5) / 8.0);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
298 sum += c8[i][j] * c8[i][j];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
299 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
300 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
301
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
302 for(i=0;i<4;i++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
303 sum = 0;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
304 for(j=0;j<4;j++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
305 s = (i==0) ? sqrt(1.0/4.0) : sqrt(1.0/2.0);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
306 c4[i][j] = s * cos(M_PI * i * (j + 0.5) / 4.0);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
307 sum += c4[i][j] * c4[i][j];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
308 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
309 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
310 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
311
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
312 /* butterfly */
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
313 s = 0.5 * sqrt(2.0);
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
314 for(i=0;i<4;i++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
315 for(j=0;j<8;j++) {
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
316 block1[8*(2*i)+j] = (block[8*(2*i)+j] + block[8*(2*i+1)+j]) * s;
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
317 block1[8*(2*i+1)+j] = (block[8*(2*i)+j] - block[8*(2*i+1)+j]) * s;
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
318 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
319 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
320
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
321 /* idct8 on lines */
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
322 for(i=0;i<8;i++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
323 for(j=0;j<8;j++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
324 sum = 0;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
325 for(k=0;k<8;k++)
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
326 sum += c8[k][j] * block1[8*i+k];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
327 block2[8*i+j] = sum;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
328 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
329 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
330
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
331 /* idct4 */
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
332 for(i=0;i<8;i++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
333 for(j=0;j<4;j++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
334 /* top */
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
335 sum = 0;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
336 for(k=0;k<4;k++)
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
337 sum += c4[k][j] * block2[8*(2*k)+i];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
338 block3[8*(2*j)+i] = sum;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
339
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
340 /* bottom */
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
341 sum = 0;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
342 for(k=0;k<4;k++)
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
343 sum += c4[k][j] * block2[8*(2*k+1)+i];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
344 block3[8*(2*j+1)+i] = sum;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
345 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
346 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
347
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
348 /* clamp and store the result */
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
349 for(i=0;i<8;i++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
350 for(j=0;j<8;j++) {
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
351 v = block3[8*i+j];
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
352 if (v < 0)
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
353 v = 0;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
354 else if (v > 255)
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
355 v = 255;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
356 dest[i * linesize + j] = (int)rint(v);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
357 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
358 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
359 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
360
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
361 void idct248_error(const char *name,
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
362 void (*idct248_put)(uint8_t *dest, int line_size, int16_t *block))
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
363 {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
364 int it, i, it1, ti, ti1, err_max, v;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
365
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
366 srandom(0);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
367
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
368 /* just one test to see if code is correct (precision is less
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
369 important here) */
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
370 err_max = 0;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
371 for(it=0;it<NB_ITS;it++) {
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
372
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
373 /* XXX: use forward transform to generate values */
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
374 for(i=0;i<64;i++)
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
375 block1[i] = (random() % 256) - 128;
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
376 block1[0] += 1024;
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
377
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
378 for(i=0; i<64; i++)
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
379 block[i]= block1[i];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
380 idct248_ref(img_dest1, 8, block);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
381
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
382 for(i=0; i<64; i++)
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
383 block[i]= block1[i];
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
384 idct248_put(img_dest, 8, block);
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
385
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
386 for(i=0;i<64;i++) {
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
387 v = abs((int)img_dest[i] - (int)img_dest1[i]);
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
388 if (v == 255)
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
389 printf("%d %d\n", img_dest[i], img_dest1[i]);
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
390 if (v > err_max)
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
391 err_max = v;
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
392 }
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
393 #if 0
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
394 printf("ref=\n");
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
395 for(i=0;i<8;i++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
396 int j;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
397 for(j=0;j<8;j++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
398 printf(" %3d", img_dest1[i*8+j]);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
399 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
400 printf("\n");
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
401 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
402
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
403 printf("out=\n");
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
404 for(i=0;i<8;i++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
405 int j;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
406 for(j=0;j<8;j++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
407 printf(" %3d", img_dest[i*8+j]);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
408 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
409 printf("\n");
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
410 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
411 #endif
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
412 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
413 printf("%s %s: err_inf=%d\n",
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
414 1 ? "IDCT248" : "DCT248",
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
415 name, err_max);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
416
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
417 ti = gettime();
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
418 it1 = 0;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
419 do {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
420 for(it=0;it<NB_ITS_SPEED;it++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
421 for(i=0; i<64; i++)
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
422 block[i]= block1[i];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
423 // memcpy(block, block1, sizeof(DCTELEM) * 64);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
424 // dont memcpy especially not fastmemcpy because it does movntq !!!
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
425 idct248_put(img_dest, 8, block);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
426 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
427 it1 += NB_ITS_SPEED;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
428 ti1 = gettime() - ti;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
429 } while (ti1 < 1000000);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
430 emms();
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
431
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
432 printf("%s %s: %0.1f kdct/s\n",
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
433 1 ? "IDCT248" : "DCT248",
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
434 name, (double)it1 * 1000.0 / (double)ti1);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
435 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
436
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
437 void help(void)
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
438 {
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
439 printf("dct-test [-i] [<test-number>]\n"
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
440 "test-number 0 -> test with random matrixes\n"
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
441 " 1 -> test with random sparse matrixes\n"
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
442 " 2 -> do 3. test from mpeg4 std\n"
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
443 "-i test IDCT implementations\n"
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
444 "-4 test IDCT248 implementations\n");
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
445 exit(1);
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
446 }
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
447
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
448 int main(int argc, char **argv)
986e461dc072 Initial revision
glantau
parents:
diff changeset
449 {
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
450 int test_idct = 0, test_248_dct = 0;
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
451 int c,i;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
452 int test=1;
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
453
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
454 init_fdct();
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
455 idct_mmx_init();
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
456
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
457 for(i=0;i<256;i++) cropTbl[i + MAX_NEG_CROP] = i;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
458 for(i=0;i<MAX_NEG_CROP;i++) {
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
459 cropTbl[i] = 0;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
460 cropTbl[i + MAX_NEG_CROP + 256] = 255;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
461 }
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
462
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
463 for(;;) {
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
464 c = getopt(argc, argv, "ih4");
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
465 if (c == -1)
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
466 break;
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
467 switch(c) {
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
468 case 'i':
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
469 test_idct = 1;
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
470 break;
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
471 case '4':
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
472 test_248_dct = 1;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
473 break;
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
474 default :
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
475 case 'h':
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
476 help();
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
477 break;
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
478 }
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
479 }
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
480
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
481 if(optind <argc) test= atoi(argv[optind]);
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
482
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
483 printf("ffmpeg DCT/IDCT test\n");
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
484
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
485 if (test_248_dct) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
486 idct248_error("SIMPLE-C", simple_idct248_put);
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
487 } else {
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
488 if (!test_idct) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
489 dct_error("REF-DBL", 0, fdct, fdct, test); /* only to verify code ! */
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
490 dct_error("IJG-AAN-INT", 0, fdct_ifast, fdct, test);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
491 dct_error("IJG-LLM-INT", 0, ff_jpeg_fdct_islow, fdct, test);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
492 dct_error("MMX", 0, ff_fdct_mmx, fdct, test);
1574
michael
parents: 1562
diff changeset
493 dct_error("MMX2", 0, ff_fdct_mmx2, fdct, test);
1557
5d53c03186a1 floating point AAN DCT
michael
parents: 1106
diff changeset
494 dct_error("FAAN", 0, ff_faandct, fdct, test);
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
495 } else {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
496 dct_error("REF-DBL", 1, idct, idct, test);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
497 dct_error("INT", 1, j_rev_dct, idct, test);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
498 dct_error("LIBMPEG2-MMX", 1, ff_mmx_idct, idct, test);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
499 dct_error("LIBMPEG2-MMXEXT", 1, ff_mmxext_idct, idct, test);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
500 dct_error("SIMPLE-C", 1, simple_idct, idct, test);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
501 dct_error("SIMPLE-MMX", 1, ff_simple_idct_mmx, idct, test);
2872
062b2d5d1eba add xvid idcts to dct-test
michael
parents: 1574
diff changeset
502 dct_error("XVID-MMX", 1, ff_idct_xvid_mmx, idct, test);
062b2d5d1eba add xvid idcts to dct-test
michael
parents: 1574
diff changeset
503 dct_error("XVID-MMX2", 1, ff_idct_xvid_mmx2, idct, test);
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
504 // dct_error("ODIVX-C", 1, odivx_idct_c, idct);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
505 //printf(" test against odivx idct\n");
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
506 // dct_error("REF", 1, idct, odivx_idct_c);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
507 // dct_error("INT", 1, j_rev_dct, odivx_idct_c);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
508 // dct_error("MMX", 1, ff_mmx_idct, odivx_idct_c);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
509 // dct_error("MMXEXT", 1, ff_mmxext_idct, odivx_idct_c);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
510 // dct_error("SIMPLE-C", 1, simple_idct, odivx_idct_c);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
511 // dct_error("SIMPLE-MMX", 1, ff_simple_idct_mmx, odivx_idct_c);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
512 // dct_error("ODIVX-C", 1, odivx_idct_c, odivx_idct_c);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
513 }
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
514 }
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
515 return 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
516 }