annotate dct-test.c @ 4714:fc70a43a4f01 libavcodec

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