Mercurial > libavcodec.hg
comparison dct-test.c @ 2979:bfabfdf9ce55 libavcodec
COSMETICS: tabs --> spaces, some prettyprinting
author | diego |
---|---|
date | Thu, 22 Dec 2005 01:10:11 +0000 |
parents | ef2149182f1c |
children | e0927bc44a10 |
comparison
equal
deleted
inserted
replaced
2978:403183bbb505 | 2979:bfabfdf9ce55 |
---|---|
63 #define NB_ITS_SPEED 50000 | 63 #define NB_ITS_SPEED 50000 |
64 | 64 |
65 static short idct_mmx_perm[64]; | 65 static short idct_mmx_perm[64]; |
66 | 66 |
67 static short idct_simple_mmx_perm[64]={ | 67 static short idct_simple_mmx_perm[64]={ |
68 0x00, 0x08, 0x04, 0x09, 0x01, 0x0C, 0x05, 0x0D, | 68 0x00, 0x08, 0x04, 0x09, 0x01, 0x0C, 0x05, 0x0D, |
69 0x10, 0x18, 0x14, 0x19, 0x11, 0x1C, 0x15, 0x1D, | 69 0x10, 0x18, 0x14, 0x19, 0x11, 0x1C, 0x15, 0x1D, |
70 0x20, 0x28, 0x24, 0x29, 0x21, 0x2C, 0x25, 0x2D, | 70 0x20, 0x28, 0x24, 0x29, 0x21, 0x2C, 0x25, 0x2D, |
71 0x12, 0x1A, 0x16, 0x1B, 0x13, 0x1E, 0x17, 0x1F, | 71 0x12, 0x1A, 0x16, 0x1B, 0x13, 0x1E, 0x17, 0x1F, |
72 0x02, 0x0A, 0x06, 0x0B, 0x03, 0x0E, 0x07, 0x0F, | 72 0x02, 0x0A, 0x06, 0x0B, 0x03, 0x0E, 0x07, 0x0F, |
73 0x30, 0x38, 0x34, 0x39, 0x31, 0x3C, 0x35, 0x3D, | 73 0x30, 0x38, 0x34, 0x39, 0x31, 0x3C, 0x35, 0x3D, |
74 0x22, 0x2A, 0x26, 0x2B, 0x23, 0x2E, 0x27, 0x2F, | 74 0x22, 0x2A, 0x26, 0x2B, 0x23, 0x2E, 0x27, 0x2F, |
75 0x32, 0x3A, 0x36, 0x3B, 0x33, 0x3E, 0x37, 0x3F, | 75 0x32, 0x3A, 0x36, 0x3B, 0x33, 0x3E, 0x37, 0x3F, |
76 }; | 76 }; |
77 | 77 |
78 void idct_mmx_init(void) | 78 void idct_mmx_init(void) |
79 { | 79 { |
80 int i; | 80 int i; |
81 | 81 |
82 /* the mmx/mmxext idct uses a reordered input, so we patch scan tables */ | 82 /* the mmx/mmxext idct uses a reordered input, so we patch scan tables */ |
83 for (i = 0; i < 64; i++) { | 83 for (i = 0; i < 64; i++) { |
84 idct_mmx_perm[i] = (i & 0x38) | ((i & 6) >> 1) | ((i & 1) << 2); | 84 idct_mmx_perm[i] = (i & 0x38) | ((i & 6) >> 1) | ((i & 1) << 2); |
85 // idct_simple_mmx_perm[i] = simple_block_permute_op(i); | 85 // idct_simple_mmx_perm[i] = simple_block_permute_op(i); |
86 } | 86 } |
87 } | 87 } |
88 | 88 |
89 static DCTELEM block[64] __attribute__ ((aligned (8))); | 89 static DCTELEM block[64] __attribute__ ((aligned (8))); |
90 static DCTELEM block1[64] __attribute__ ((aligned (8))); | 90 static DCTELEM block1[64] __attribute__ ((aligned (8))); |
149 block[idct_mmx_perm[i]] = block1[i]; | 149 block[idct_mmx_perm[i]] = block1[i]; |
150 } else if(fdct_func == ff_simple_idct_mmx ) { | 150 } else if(fdct_func == ff_simple_idct_mmx ) { |
151 for(i=0;i<64;i++) | 151 for(i=0;i<64;i++) |
152 block[idct_simple_mmx_perm[i]] = block1[i]; | 152 block[idct_simple_mmx_perm[i]] = block1[i]; |
153 | 153 |
154 } else { | 154 } else { |
155 for(i=0; i<64; i++) | 155 for(i=0; i<64; i++) |
156 block[i]= block1[i]; | 156 block[i]= block1[i]; |
157 } | 157 } |
158 #if 0 // simulate mismatch control for tested IDCT but not the ref | 158 #if 0 // simulate mismatch control for tested IDCT but not the ref |
159 { int sum=0; | 159 { int sum=0; |
184 for(i=0;i<64;i++) { | 184 for(i=0;i<64;i++) { |
185 v = abs(block[i] - block1[i]); | 185 v = abs(block[i] - block1[i]); |
186 if (v > err_inf) | 186 if (v > err_inf) |
187 err_inf = v; | 187 err_inf = v; |
188 err2 += v * v; | 188 err2 += v * v; |
189 sysErr[i] += block[i] - block1[i]; | 189 sysErr[i] += block[i] - block1[i]; |
190 blockSumErr += v; | 190 blockSumErr += v; |
191 if( abs(block[i])>maxout) maxout=abs(block[i]); | 191 if( abs(block[i])>maxout) maxout=abs(block[i]); |
192 } | 192 } |
193 if(blockSumErrMax < blockSumErr) blockSumErrMax= blockSumErr; | 193 if(blockSumErrMax < blockSumErr) blockSumErrMax= blockSumErr; |
194 #if 0 // print different matrix pairs | 194 #if 0 // print different matrix pairs |
195 if(blockSumErr){ | 195 if(blockSumErr){ |
196 printf("\n"); | 196 printf("\n"); |
207 } | 207 } |
208 for(i=0; i<64; i++) sysErrMax= MAX(sysErrMax, ABS(sysErr[i])); | 208 for(i=0; i<64; i++) sysErrMax= MAX(sysErrMax, ABS(sysErr[i])); |
209 | 209 |
210 #if 1 // dump systematic errors | 210 #if 1 // dump systematic errors |
211 for(i=0; i<64; i++){ | 211 for(i=0; i<64; i++){ |
212 if(i%8==0) printf("\n"); | 212 if(i%8==0) printf("\n"); |
213 printf("%5d ", (int)sysErr[i]); | 213 printf("%5d ", (int)sysErr[i]); |
214 } | 214 } |
215 printf("\n"); | 215 printf("\n"); |
216 #endif | 216 #endif |
217 | 217 |
501 dct_error("SIMPLE-MMX", 1, ff_simple_idct_mmx, idct, test); | 501 dct_error("SIMPLE-MMX", 1, ff_simple_idct_mmx, idct, test); |
502 dct_error("XVID-MMX", 1, ff_idct_xvid_mmx, idct, test); | 502 dct_error("XVID-MMX", 1, ff_idct_xvid_mmx, idct, test); |
503 dct_error("XVID-MMX2", 1, ff_idct_xvid_mmx2, idct, test); | 503 dct_error("XVID-MMX2", 1, ff_idct_xvid_mmx2, idct, test); |
504 // dct_error("ODIVX-C", 1, odivx_idct_c, idct); | 504 // dct_error("ODIVX-C", 1, odivx_idct_c, idct); |
505 //printf(" test against odivx idct\n"); | 505 //printf(" test against odivx idct\n"); |
506 // dct_error("REF", 1, idct, odivx_idct_c); | 506 // dct_error("REF", 1, idct, odivx_idct_c); |
507 // dct_error("INT", 1, j_rev_dct, odivx_idct_c); | 507 // dct_error("INT", 1, j_rev_dct, odivx_idct_c); |
508 // dct_error("MMX", 1, ff_mmx_idct, odivx_idct_c); | 508 // dct_error("MMX", 1, ff_mmx_idct, odivx_idct_c); |
509 // dct_error("MMXEXT", 1, ff_mmxext_idct, odivx_idct_c); | 509 // dct_error("MMXEXT", 1, ff_mmxext_idct, odivx_idct_c); |
510 // dct_error("SIMPLE-C", 1, simple_idct, odivx_idct_c); | 510 // dct_error("SIMPLE-C", 1, simple_idct, odivx_idct_c); |
511 // dct_error("SIMPLE-MMX", 1, ff_simple_idct_mmx, odivx_idct_c); | 511 // dct_error("SIMPLE-MMX", 1, ff_simple_idct_mmx, odivx_idct_c); |