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);