annotate dct-test.c @ 8400:4877d4c6d8ae libavcodec

Add automatic prefix handling to yasm functions. Does nothing now, but will be useful for porting x264 asm in the future.
author darkshikari
date Fri, 19 Dec 2008 03:01:08 +0000
parents 9281a8a9387a
children 7768bdfd4f7b
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
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
3 * 2007 Marc Hoffman <marc.hoffman@analog.com>
3699
c537a97eec66 Add official LGPL license headers to the files that were missing them.
diego
parents: 3398
diff changeset
4 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3699
diff changeset
5 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3699
diff changeset
6 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3699
diff changeset
7 * 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
8 * 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
9 * 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
10 * 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
11 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3699
diff changeset
12 * 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
13 * 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
14 * 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
15 * 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
16 *
c537a97eec66 Add official LGPL license headers to the files that were missing them.
diego
parents: 3398
diff changeset
17 * 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
18 * 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
19 * 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
20 */
c537a97eec66 Add official LGPL license headers to the files that were missing them.
diego
parents: 3398
diff changeset
21
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
22 /**
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
23 * @file dct-test.c
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2872
diff changeset
24 * DCT test. (c) 2001 Fabrice Bellard.
1106
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
25 * Started from sample code by Juan J. Sierralta P.
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
26 */
1e39f273ecd6 per file doxy
michaelni
parents: 1064
diff changeset
27
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
28 #include <stdlib.h>
986e461dc072 Initial revision
glantau
parents:
diff changeset
29 #include <stdio.h>
986e461dc072 Initial revision
glantau
parents:
diff changeset
30 #include <string.h>
986e461dc072 Initial revision
glantau
parents:
diff changeset
31 #include <sys/time.h>
986e461dc072 Initial revision
glantau
parents:
diff changeset
32 #include <unistd.h>
5118
3b190bc34546 Add some #includes to allow compilation without HAVE_AV_CONFIG_H.
diego
parents: 5110
diff changeset
33 #include <math.h>
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
34
7130
601509a430f7 Replace redundant MAX macro declaration by proper use of FFMAX.
diego
parents: 7125
diff changeset
35 #include "libavutil/common.h"
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
36
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
37 #include "simple_idct.h"
8223
d2a146706bc5 Do not duplicate AAN DCT tables in dct-test.c.
diego
parents: 8141
diff changeset
38 #include "aandcttab.h"
1557
5d53c03186a1 floating point AAN DCT
michael
parents: 1106
diff changeset
39 #include "faandct.h"
6407
7f9e2b5893fc floating point AAN IDCT
michael
parents: 6001
diff changeset
40 #include "faanidct.h"
6585
0ec61ed36c29 Add a header file to declare Xvid IDCT functions.
diego
parents: 6544
diff changeset
41 #include "i386/idct_xvid.h"
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
42
2872
062b2d5d1eba add xvid idcts to dct-test
michael
parents: 1574
diff changeset
43 #undef printf
5379
e9f8a337c5ce Fix the compilation of dct-test, fft-test and motion-test which are using
takis
parents: 5127
diff changeset
44 #undef random
2872
062b2d5d1eba add xvid idcts to dct-test
michael
parents: 1574
diff changeset
45
062b2d5d1eba add xvid idcts to dct-test
michael
parents: 1574
diff changeset
46 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
47
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
48 /* reference fdct/idct */
8250
cf4d575b1982 Delete unnecessary 'extern' keywords.
diego
parents: 8223
diff changeset
49 void fdct(DCTELEM *block);
cf4d575b1982 Delete unnecessary 'extern' keywords.
diego
parents: 8223
diff changeset
50 void idct(DCTELEM *block);
cf4d575b1982 Delete unnecessary 'extern' keywords.
diego
parents: 8223
diff changeset
51 void init_fdct();
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
52
8250
cf4d575b1982 Delete unnecessary 'extern' keywords.
diego
parents: 8223
diff changeset
53 void ff_mmx_idct(DCTELEM *data);
cf4d575b1982 Delete unnecessary 'extern' keywords.
diego
parents: 8223
diff changeset
54 void ff_mmxext_idct(DCTELEM *data);
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
55
8250
cf4d575b1982 Delete unnecessary 'extern' keywords.
diego
parents: 8223
diff changeset
56 void odivx_idct_c(short *block);
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
57
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
58 // BFIN
8250
cf4d575b1982 Delete unnecessary 'extern' keywords.
diego
parents: 8223
diff changeset
59 void ff_bfin_idct(DCTELEM *block);
cf4d575b1982 Delete unnecessary 'extern' keywords.
diego
parents: 8223
diff changeset
60 void ff_bfin_fdct(DCTELEM *block);
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
61
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
62 // ALTIVEC
8250
cf4d575b1982 Delete unnecessary 'extern' keywords.
diego
parents: 8223
diff changeset
63 void fdct_altivec(DCTELEM *block);
cf4d575b1982 Delete unnecessary 'extern' keywords.
diego
parents: 8223
diff changeset
64 //void idct_altivec(DCTELEM *block);?? no routine
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
65
8351
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
66 // ARM
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
67 void j_rev_dct_ARM(DCTELEM *data);
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
68 void simple_idct_ARM(DCTELEM *data);
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
69 void simple_idct_armv5te(DCTELEM *data);
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
70 void ff_simple_idct_armv6(DCTELEM *data);
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
71 void ff_simple_idct_neon(DCTELEM *data);
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
72
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
73 struct algo {
7125
65e7e714c770 Mark constant structure member as const to avoid some warnings.
diego
parents: 6602
diff changeset
74 const char *name;
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
75 enum { FDCT, IDCT } is_idct;
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
76 void (* func) (DCTELEM *block);
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
77 void (* ref) (DCTELEM *block);
8350
583f32e6f4b5 dct-test: add PARTTRANS permutation
mru
parents: 8250
diff changeset
78 enum formattag { NO_PERM,MMX_PERM, MMX_SIMPLE_PERM, SCALE_PERM, SSE2_PERM, PARTTRANS_PERM } format;
6543
948d9453432b check mm_flags for each DCT and skips the ones that can't be run
gpoirier
parents: 6542
diff changeset
79 int mm_support;
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
80 };
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
81
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
82 #ifndef FAAN_POSTSCALE
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
83 #define FAAN_SCALE SCALE_PERM
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
84 #else
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
85 #define FAAN_SCALE NO_PERM
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
86 #endif
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
87
7155
83e7ee1790a8 Make code independent/less dependent on dsputil.
michael
parents: 7148
diff changeset
88 static int cpu_flags;
83e7ee1790a8 Make code independent/less dependent on dsputil.
michael
parents: 7148
diff changeset
89
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
90 struct algo algos[] = {
6542
d90bb7b51588 get rid of the useless DCT_ERROR() macro
gpoirier
parents: 6533
diff changeset
91 {"REF-DBL", 0, fdct, fdct, NO_PERM},
d90bb7b51588 get rid of the useless DCT_ERROR() macro
gpoirier
parents: 6533
diff changeset
92 {"FAAN", 0, ff_faandct, fdct, FAAN_SCALE},
d90bb7b51588 get rid of the useless DCT_ERROR() macro
gpoirier
parents: 6533
diff changeset
93 {"FAANI", 1, ff_faanidct, idct, NO_PERM},
d90bb7b51588 get rid of the useless DCT_ERROR() macro
gpoirier
parents: 6533
diff changeset
94 {"IJG-AAN-INT", 0, fdct_ifast, fdct, SCALE_PERM},
d90bb7b51588 get rid of the useless DCT_ERROR() macro
gpoirier
parents: 6533
diff changeset
95 {"IJG-LLM-INT", 0, ff_jpeg_fdct_islow, fdct, NO_PERM},
d90bb7b51588 get rid of the useless DCT_ERROR() macro
gpoirier
parents: 6533
diff changeset
96 {"REF-DBL", 1, idct, idct, NO_PERM},
d90bb7b51588 get rid of the useless DCT_ERROR() macro
gpoirier
parents: 6533
diff changeset
97 {"INT", 1, j_rev_dct, idct, MMX_PERM},
d90bb7b51588 get rid of the useless DCT_ERROR() macro
gpoirier
parents: 6533
diff changeset
98 {"SIMPLE-C", 1, ff_simple_idct, idct, NO_PERM},
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
99
5108
6ea82ac05f60 Fix compilation when MMX is disabled.
diego
parents: 5107
diff changeset
100 #ifdef HAVE_MMX
8104
0d108ec85620 Remove duplicated MM_* macros for CPU capabilities from dsputil.h.
rathann
parents: 8031
diff changeset
101 {"MMX", 0, ff_fdct_mmx, fdct, NO_PERM, FF_MM_MMX},
5110
8fe26e4fd918 Only run MMX2 tests when MMX2 is available.
diego
parents: 5109
diff changeset
102 #ifdef HAVE_MMX2
8104
0d108ec85620 Remove duplicated MM_* macros for CPU capabilities from dsputil.h.
rathann
parents: 8031
diff changeset
103 {"MMX2", 0, ff_fdct_mmx2, fdct, NO_PERM, FF_MM_MMXEXT},
8141
b95fd961d507 add sse2 fdct
bcoudurier
parents: 8104
diff changeset
104 {"SSE2", 0, ff_fdct_sse2, fdct, NO_PERM, FF_MM_SSE2},
5110
8fe26e4fd918 Only run MMX2 tests when MMX2 is available.
diego
parents: 5109
diff changeset
105 #endif
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
106
5109
8d4f1823d98d Fix linking when GPL code has been disabled.
diego
parents: 5108
diff changeset
107 #ifdef CONFIG_GPL
8104
0d108ec85620 Remove duplicated MM_* macros for CPU capabilities from dsputil.h.
rathann
parents: 8031
diff changeset
108 {"LIBMPEG2-MMX", 1, ff_mmx_idct, idct, MMX_PERM, FF_MM_MMX},
0d108ec85620 Remove duplicated MM_* macros for CPU capabilities from dsputil.h.
rathann
parents: 8031
diff changeset
109 {"LIBMPEG2-MMXEXT", 1, ff_mmxext_idct, idct, MMX_PERM, FF_MM_MMXEXT},
5109
8d4f1823d98d Fix linking when GPL code has been disabled.
diego
parents: 5108
diff changeset
110 #endif
8104
0d108ec85620 Remove duplicated MM_* macros for CPU capabilities from dsputil.h.
rathann
parents: 8031
diff changeset
111 {"SIMPLE-MMX", 1, ff_simple_idct_mmx, idct, MMX_SIMPLE_PERM, FF_MM_MMX},
0d108ec85620 Remove duplicated MM_* macros for CPU capabilities from dsputil.h.
rathann
parents: 8031
diff changeset
112 {"XVID-MMX", 1, ff_idct_xvid_mmx, idct, NO_PERM, FF_MM_MMX},
0d108ec85620 Remove duplicated MM_* macros for CPU capabilities from dsputil.h.
rathann
parents: 8031
diff changeset
113 {"XVID-MMX2", 1, ff_idct_xvid_mmx2, idct, NO_PERM, FF_MM_MMXEXT},
0d108ec85620 Remove duplicated MM_* macros for CPU capabilities from dsputil.h.
rathann
parents: 8031
diff changeset
114 {"XVID-SSE2", 1, ff_idct_xvid_sse2, idct, SSE2_PERM, FF_MM_SSE2},
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
115 #endif
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
116
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
117 #ifdef HAVE_ALTIVEC
8104
0d108ec85620 Remove duplicated MM_* macros for CPU capabilities from dsputil.h.
rathann
parents: 8031
diff changeset
118 {"altivecfdct", 0, fdct_altivec, fdct, NO_PERM, FF_MM_ALTIVEC},
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
119 #endif
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
120
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
121 #ifdef ARCH_BFIN
6542
d90bb7b51588 get rid of the useless DCT_ERROR() macro
gpoirier
parents: 6533
diff changeset
122 {"BFINfdct", 0, ff_bfin_fdct, fdct, NO_PERM},
d90bb7b51588 get rid of the useless DCT_ERROR() macro
gpoirier
parents: 6533
diff changeset
123 {"BFINidct", 1, ff_bfin_idct, idct, NO_PERM},
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
124 #endif
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
125
8359
9281a8a9387a ARM: replace "armv4l" with "arm"
mru
parents: 8351
diff changeset
126 #ifdef ARCH_ARM
8351
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
127 {"SIMPLE-ARM", 1, simple_idct_ARM, idct, NO_PERM },
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
128 {"INT-ARM", 1, j_rev_dct_ARM, idct, MMX_PERM },
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
129 #ifdef HAVE_ARMV5TE
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
130 {"SIMPLE-ARMV5TE", 1, simple_idct_armv5te, idct, NO_PERM },
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
131 #endif
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
132 #ifdef HAVE_ARMV6
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
133 {"SIMPLE-ARMV6", 1, ff_simple_idct_armv6, idct, MMX_PERM },
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
134 #endif
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
135 #ifdef HAVE_NEON
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
136 {"SIMPLE-NEON", 1, ff_simple_idct_neon, idct, PARTTRANS_PERM },
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
137 #endif
8359
9281a8a9387a ARM: replace "armv4l" with "arm"
mru
parents: 8351
diff changeset
138 #endif /* ARCH_ARM */
8351
91b681b7b6be dct-test: add ARM IDCTs
mru
parents: 8350
diff changeset
139
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
140 { 0 }
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
141 };
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
142
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
143 #define AANSCALE_BITS 12
986e461dc072 Initial revision
glantau
parents:
diff changeset
144
4197
bbe0bc387a19 revert bad checkin
mru
parents: 4196
diff changeset
145 uint8_t cropTbl[256 + 2 * MAX_NEG_CROP];
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
146
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
147 int64_t gettime(void)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
148 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
149 struct timeval tv;
986e461dc072 Initial revision
glantau
parents:
diff changeset
150 gettimeofday(&tv,NULL);
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
151 return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
152 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
153
986e461dc072 Initial revision
glantau
parents:
diff changeset
154 #define NB_ITS 20000
986e461dc072 Initial revision
glantau
parents:
diff changeset
155 #define NB_ITS_SPEED 50000
986e461dc072 Initial revision
glantau
parents:
diff changeset
156
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
157 static short idct_mmx_perm[64];
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
158
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
159 static short idct_simple_mmx_perm[64]={
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
160 0x00, 0x08, 0x04, 0x09, 0x01, 0x0C, 0x05, 0x0D,
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
161 0x10, 0x18, 0x14, 0x19, 0x11, 0x1C, 0x15, 0x1D,
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
162 0x20, 0x28, 0x24, 0x29, 0x21, 0x2C, 0x25, 0x2D,
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
163 0x12, 0x1A, 0x16, 0x1B, 0x13, 0x1E, 0x17, 0x1F,
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
164 0x02, 0x0A, 0x06, 0x0B, 0x03, 0x0E, 0x07, 0x0F,
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
165 0x30, 0x38, 0x34, 0x39, 0x31, 0x3C, 0x35, 0x3D,
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
166 0x22, 0x2A, 0x26, 0x2B, 0x23, 0x2E, 0x27, 0x2F,
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
167 0x32, 0x3A, 0x36, 0x3B, 0x33, 0x3E, 0x37, 0x3F,
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
168 };
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
169
6602
e0a87be356e3 Test idct_xvid_sse2() in dct-test.
astrange
parents: 6585
diff changeset
170 static const uint8_t idct_sse2_row_perm[8] = {0, 4, 1, 5, 2, 6, 3, 7};
e0a87be356e3 Test idct_xvid_sse2() in dct-test.
astrange
parents: 6585
diff changeset
171
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
172 void idct_mmx_init(void)
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
173 {
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
174 int i;
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
175
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
176 /* 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
177 for (i = 0; i < 64; i++) {
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
178 idct_mmx_perm[i] = (i & 0x38) | ((i & 6) >> 1) | ((i & 1) << 2);
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
179 // idct_simple_mmx_perm[i] = simple_block_permute_op(i);
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
180 }
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
181 }
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
182
6544
8a059debc2ba Altivec and SSE2 require 16-byte alignment, so make sure they get it
gpoirier
parents: 6543
diff changeset
183 static DCTELEM block[64] __attribute__ ((aligned (16)));
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
184 static DCTELEM block1[64] __attribute__ ((aligned (8)));
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
185 static DCTELEM block_org[64] __attribute__ ((aligned (8)));
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
186
7155
83e7ee1790a8 Make code independent/less dependent on dsputil.
michael
parents: 7148
diff changeset
187 static inline void mmx_emms(void)
83e7ee1790a8 Make code independent/less dependent on dsputil.
michael
parents: 7148
diff changeset
188 {
83e7ee1790a8 Make code independent/less dependent on dsputil.
michael
parents: 7148
diff changeset
189 #ifdef HAVE_MMX
8104
0d108ec85620 Remove duplicated MM_* macros for CPU capabilities from dsputil.h.
rathann
parents: 8031
diff changeset
190 if (cpu_flags & FF_MM_MMX)
8031
eebc7209c47f Convert asm keyword into __asm__.
flameeyes
parents: 7155
diff changeset
191 __asm__ volatile ("emms\n\t");
7155
83e7ee1790a8 Make code independent/less dependent on dsputil.
michael
parents: 7148
diff changeset
192 #endif
83e7ee1790a8 Make code independent/less dependent on dsputil.
michael
parents: 7148
diff changeset
193 }
83e7ee1790a8 Make code independent/less dependent on dsputil.
michael
parents: 7148
diff changeset
194
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
195 void dct_error(const char *name, int is_idct,
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
196 void (*fdct_func)(DCTELEM *block),
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
197 void (*fdct_ref)(DCTELEM *block), int form, int test)
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
198 {
986e461dc072 Initial revision
glantau
parents:
diff changeset
199 int it, i, scale;
986e461dc072 Initial revision
glantau
parents:
diff changeset
200 int err_inf, v;
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
201 int64_t err2, ti, ti1, it1;
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
202 int64_t sysErr[64], sysErrMax=0;
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
203 int maxout=0;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
204 int blockSumErrMax=0, blockSumErr;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
205
986e461dc072 Initial revision
glantau
parents:
diff changeset
206 srandom(0);
986e461dc072 Initial revision
glantau
parents:
diff changeset
207
986e461dc072 Initial revision
glantau
parents:
diff changeset
208 err_inf = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
209 err2 = 0;
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
210 for(i=0; i<64; i++) sysErr[i]=0;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
211 for(it=0;it<NB_ITS;it++) {
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
212 for(i=0;i<64;i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
213 block1[i] = 0;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
214 switch(test){
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2872
diff changeset
215 case 0:
633
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 block1[i] = (random() % 512) -256;
635
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
218 if (is_idct){
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
219 fdct(block1);
635
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
220
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
221 for(i=0;i<64;i++)
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
222 block1[i]>>=3;
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
223 }
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
224 break;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
225 case 1:{
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
226 int num= (random()%10)+1;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
227 for(i=0;i<num;i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
228 block1[random()%64] = (random() % 512) -256;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
229 }break;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
230 case 2:
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
231 block1[0]= (random()%4096)-2048;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
232 block1[63]= (block1[0]&1)^1;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
233 break;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
234 }
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
235
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
236 #if 0 // simulate mismatch control
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
237 { int sum=0;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
238 for(i=0;i<64;i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
239 sum+=block1[i];
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
240
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2872
diff changeset
241 if((sum&1)==0) block1[63]^=1;
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
242 }
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
243 #endif
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
244
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
245 for(i=0; i<64; i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
246 block_org[i]= block1[i];
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
247
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
248 if (form == MMX_PERM) {
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
249 for(i=0;i<64;i++)
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
250 block[idct_mmx_perm[i]] = block1[i];
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
251 } else if (form == MMX_SIMPLE_PERM) {
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
252 for(i=0;i<64;i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
253 block[idct_simple_mmx_perm[i]] = block1[i];
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
254
6602
e0a87be356e3 Test idct_xvid_sse2() in dct-test.
astrange
parents: 6585
diff changeset
255 } else if (form == SSE2_PERM) {
e0a87be356e3 Test idct_xvid_sse2() in dct-test.
astrange
parents: 6585
diff changeset
256 for(i=0; i<64; i++)
e0a87be356e3 Test idct_xvid_sse2() in dct-test.
astrange
parents: 6585
diff changeset
257 block[(i&0x38) | idct_sse2_row_perm[i&7]] = block1[i];
8350
583f32e6f4b5 dct-test: add PARTTRANS permutation
mru
parents: 8250
diff changeset
258 } else if (form == PARTTRANS_PERM) {
583f32e6f4b5 dct-test: add PARTTRANS permutation
mru
parents: 8250
diff changeset
259 for(i=0; i<64; i++)
583f32e6f4b5 dct-test: add PARTTRANS permutation
mru
parents: 8250
diff changeset
260 block[(i&0x24) | ((i&3)<<3) | ((i>>3)&3)] = block1[i];
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
261 } else {
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
262 for(i=0; i<64; i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
263 block[i]= block1[i];
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
264 }
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
265 #if 0 // simulate mismatch control for tested IDCT but not the ref
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
266 { int sum=0;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
267 for(i=0;i<64;i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
268 sum+=block[i];
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
269
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2872
diff changeset
270 if((sum&1)==0) block[63]^=1;
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
271 }
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
272 #endif
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
273
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
274 fdct_func(block);
7155
83e7ee1790a8 Make code independent/less dependent on dsputil.
michael
parents: 7148
diff changeset
275 mmx_emms();
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
276
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
277 if (form == SCALE_PERM) {
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
278 for(i=0; i<64; i++) {
8223
d2a146706bc5 Do not duplicate AAN DCT tables in dct-test.c.
diego
parents: 8141
diff changeset
279 scale = 8*(1 << (AANSCALE_BITS + 11)) / ff_aanscales[i];
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
280 block[i] = (block[i] * scale /*+ (1<<(AANSCALE_BITS-1))*/) >> AANSCALE_BITS;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
281 }
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
282 }
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
283
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
284 fdct_ref(block1);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
285
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
286 blockSumErr=0;
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
287 for(i=0;i<64;i++) {
986e461dc072 Initial revision
glantau
parents:
diff changeset
288 v = abs(block[i] - block1[i]);
986e461dc072 Initial revision
glantau
parents:
diff changeset
289 if (v > err_inf)
986e461dc072 Initial revision
glantau
parents:
diff changeset
290 err_inf = v;
986e461dc072 Initial revision
glantau
parents:
diff changeset
291 err2 += v * v;
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
292 sysErr[i] += block[i] - block1[i];
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
293 blockSumErr += v;
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
294 if( abs(block[i])>maxout) maxout=abs(block[i]);
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
295 }
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
296 if(blockSumErrMax < blockSumErr) blockSumErrMax= blockSumErr;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
297 #if 0 // print different matrix pairs
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
298 if(blockSumErr){
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
299 printf("\n");
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
300 for(i=0; i<64; i++){
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
301 if((i&7)==0) printf("\n");
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
302 printf("%4d ", block_org[i]);
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
303 }
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
304 for(i=0; i<64; i++){
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
305 if((i&7)==0) printf("\n");
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
306 printf("%4d ", block[i] - block1[i]);
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
307 }
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
308 }
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
309 #endif
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
310 }
7130
601509a430f7 Replace redundant MAX macro declaration by proper use of FFMAX.
diego
parents: 7125
diff changeset
311 for(i=0; i<64; i++) sysErrMax= FFMAX(sysErrMax, FFABS(sysErr[i]));
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2872
diff changeset
312
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
313 #if 1 // dump systematic errors
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
314 for(i=0; i<64; i++){
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
315 if(i%8==0) printf("\n");
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
316 printf("%5d ", (int)sysErr[i]);
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
317 }
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
318 printf("\n");
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
319 #endif
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2872
diff changeset
320
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
321 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
322 is_idct ? "IDCT" : "DCT",
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
323 name, err_inf, (double)err2 / NB_ITS / 64.0, (double)sysErrMax / NB_ITS, maxout, blockSumErrMax);
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
324 #if 1 //Speed test
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
325 /* speed test */
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
326 for(i=0;i<64;i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
327 block1[i] = 0;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
328 switch(test){
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2872
diff changeset
329 case 0:
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
330 for(i=0;i<64;i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
331 block1[i] = (random() % 512) -256;
635
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
332 if (is_idct){
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
333 fdct(block1);
635
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
334
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
335 for(i=0;i<64;i++)
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
336 block1[i]>>=3;
3e0f62e5eed6 dct cleanup
michaelni
parents: 633
diff changeset
337 }
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
338 break;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
339 case 1:{
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
340 case 2:
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
341 block1[0] = (random() % 512) -256;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
342 block1[1] = (random() % 512) -256;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
343 block1[2] = (random() % 512) -256;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
344 block1[3] = (random() % 512) -256;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
345 }break;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
346 }
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
347
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
348 if (form == MMX_PERM) {
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
349 for(i=0;i<64;i++)
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
350 block[idct_mmx_perm[i]] = block1[i];
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
351 } else if(form == MMX_SIMPLE_PERM) {
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
352 for(i=0;i<64;i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
353 block[idct_simple_mmx_perm[i]] = block1[i];
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
354 } else {
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
355 for(i=0; i<64; i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
356 block[i]= block1[i];
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
357 }
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
358
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
359 ti = gettime();
986e461dc072 Initial revision
glantau
parents:
diff changeset
360 it1 = 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
361 do {
986e461dc072 Initial revision
glantau
parents:
diff changeset
362 for(it=0;it<NB_ITS_SPEED;it++) {
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
363 for(i=0; i<64; i++)
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
364 block[i]= block1[i];
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
365 // memcpy(block, block1, sizeof(DCTELEM) * 64);
5127
4dbe6578f811 misc spelling fixes
diego
parents: 5118
diff changeset
366 // do not memcpy especially not fastmemcpy because it does movntq !!!
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
367 fdct_func(block);
986e461dc072 Initial revision
glantau
parents:
diff changeset
368 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
369 it1 += NB_ITS_SPEED;
986e461dc072 Initial revision
glantau
parents:
diff changeset
370 ti1 = gettime() - ti;
986e461dc072 Initial revision
glantau
parents:
diff changeset
371 } while (ti1 < 1000000);
7155
83e7ee1790a8 Make code independent/less dependent on dsputil.
michael
parents: 7148
diff changeset
372 mmx_emms();
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
373
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
374 printf("%s %s: %0.1f kdct/s\n",
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
375 is_idct ? "IDCT" : "DCT",
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
376 name, (double)it1 * 1000.0 / (double)ti1);
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
377 #endif
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
378 }
986e461dc072 Initial revision
glantau
parents:
diff changeset
379
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
380 static uint8_t img_dest[64] __attribute__ ((aligned (8)));
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
381 static uint8_t img_dest1[64] __attribute__ ((aligned (8)));
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
382
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
383 void idct248_ref(uint8_t *dest, int linesize, int16_t *block)
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
384 {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
385 static int init;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
386 static double c8[8][8];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
387 static double c4[4][4];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
388 double block1[64], block2[64], block3[64];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
389 double s, sum, v;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
390 int i, j, k;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
391
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
392 if (!init) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
393 init = 1;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
394
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 sum = 0;
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 s = (i==0) ? sqrt(1.0/8.0) : sqrt(1.0/4.0);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
399 c8[i][j] = s * cos(M_PI * i * (j + 0.5) / 8.0);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
400 sum += c8[i][j] * c8[i][j];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
401 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
402 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2872
diff changeset
403
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
404 for(i=0;i<4;i++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
405 sum = 0;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
406 for(j=0;j<4;j++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
407 s = (i==0) ? sqrt(1.0/4.0) : sqrt(1.0/2.0);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
408 c4[i][j] = s * cos(M_PI * i * (j + 0.5) / 4.0);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
409 sum += c4[i][j] * c4[i][j];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
410 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
411 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
412 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
413
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
414 /* butterfly */
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
415 s = 0.5 * sqrt(2.0);
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
416 for(i=0;i<4;i++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
417 for(j=0;j<8;j++) {
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
418 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
419 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
420 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
421 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
422
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
423 /* idct8 on lines */
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
424 for(i=0;i<8;i++) {
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 sum = 0;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
427 for(k=0;k<8;k++)
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
428 sum += c8[k][j] * block1[8*i+k];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
429 block2[8*i+j] = sum;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
430 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
431 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
432
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
433 /* idct4 */
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
434 for(i=0;i<8;i++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
435 for(j=0;j<4;j++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
436 /* top */
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
437 sum = 0;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
438 for(k=0;k<4;k++)
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
439 sum += c4[k][j] * block2[8*(2*k)+i];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
440 block3[8*(2*j)+i] = sum;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
441
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
442 /* bottom */
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
443 sum = 0;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
444 for(k=0;k<4;k++)
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
445 sum += c4[k][j] * block2[8*(2*k+1)+i];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
446 block3[8*(2*j+1)+i] = sum;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
447 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
448 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
449
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
450 /* clamp and store the result */
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
451 for(i=0;i<8;i++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
452 for(j=0;j<8;j++) {
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
453 v = block3[8*i+j];
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
454 if (v < 0)
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
455 v = 0;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
456 else if (v > 255)
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
457 v = 255;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
458 dest[i * linesize + j] = (int)rint(v);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
459 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
460 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
461 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
462
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2872
diff changeset
463 void idct248_error(const char *name,
1064
b32afefe7d33 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 980
diff changeset
464 void (*idct248_put)(uint8_t *dest, int line_size, int16_t *block))
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
465 {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
466 int it, i, it1, ti, ti1, err_max, v;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
467
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
468 srandom(0);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2872
diff changeset
469
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
470 /* just one test to see if code is correct (precision is less
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
471 important here) */
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
472 err_max = 0;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
473 for(it=0;it<NB_ITS;it++) {
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2872
diff changeset
474
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
475 /* XXX: use forward transform to generate values */
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
476 for(i=0;i<64;i++)
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
477 block1[i] = (random() % 256) - 128;
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
478 block1[0] += 1024;
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
479
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
480 for(i=0; i<64; i++)
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
481 block[i]= block1[i];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
482 idct248_ref(img_dest1, 8, block);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2872
diff changeset
483
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
484 for(i=0; i<64; i++)
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
485 block[i]= block1[i];
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
486 idct248_put(img_dest, 8, block);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2872
diff changeset
487
722
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
488 for(i=0;i<64;i++) {
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
489 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
490 if (v == 255)
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
491 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
492 if (v > err_max)
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
493 err_max = v;
ff90043f4a2d in fact IDCT248 needs to be normalized as I suspected
bellard
parents: 720
diff changeset
494 }
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
495 #if 0
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
496 printf("ref=\n");
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
497 for(i=0;i<8;i++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
498 int j;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
499 for(j=0;j<8;j++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
500 printf(" %3d", img_dest1[i*8+j]);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
501 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
502 printf("\n");
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
503 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2872
diff changeset
504
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
505 printf("out=\n");
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
506 for(i=0;i<8;i++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
507 int j;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
508 for(j=0;j<8;j++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
509 printf(" %3d", img_dest[i*8+j]);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
510 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
511 printf("\n");
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
512 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
513 #endif
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
514 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
515 printf("%s %s: err_inf=%d\n",
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
516 1 ? "IDCT248" : "DCT248",
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
517 name, err_max);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
518
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
519 ti = gettime();
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
520 it1 = 0;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
521 do {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
522 for(it=0;it<NB_ITS_SPEED;it++) {
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
523 for(i=0; i<64; i++)
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
524 block[i]= block1[i];
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
525 // memcpy(block, block1, sizeof(DCTELEM) * 64);
5127
4dbe6578f811 misc spelling fixes
diego
parents: 5118
diff changeset
526 // do not memcpy especially not fastmemcpy because it does movntq !!!
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
527 idct248_put(img_dest, 8, block);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
528 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
529 it1 += NB_ITS_SPEED;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
530 ti1 = gettime() - ti;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
531 } while (ti1 < 1000000);
7155
83e7ee1790a8 Make code independent/less dependent on dsputil.
michael
parents: 7148
diff changeset
532 mmx_emms();
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
533
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
534 printf("%s %s: %0.1f kdct/s\n",
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
535 1 ? "IDCT248" : "DCT248",
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
536 name, (double)it1 * 1000.0 / (double)ti1);
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
537 }
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
538
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
539 void help(void)
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
540 {
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
541 printf("dct-test [-i] [<test-number>]\n"
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
542 "test-number 0 -> test with random matrixes\n"
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
543 " 1 -> test with random sparse matrixes\n"
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
544 " 2 -> do 3. test from mpeg4 std\n"
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
545 "-i test IDCT implementations\n"
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
546 "-4 test IDCT248 implementations\n");
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
547 }
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
548
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
549 int main(int argc, char **argv)
986e461dc072 Initial revision
glantau
parents:
diff changeset
550 {
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
551 int test_idct = 0, test_248_dct = 0;
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
552 int c,i;
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
553 int test=1;
7155
83e7ee1790a8 Make code independent/less dependent on dsputil.
michael
parents: 7148
diff changeset
554 cpu_flags = mm_support();
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
555
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
556 init_fdct();
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
557 idct_mmx_init();
7135
6bd6a2da306e Define mm_flags/support to be 0 on architectures where they don't exist.
astrange
parents: 7130
diff changeset
558
4197
bbe0bc387a19 revert bad checkin
mru
parents: 4196
diff changeset
559 for(i=0;i<256;i++) cropTbl[i + MAX_NEG_CROP] = i;
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
560 for(i=0;i<MAX_NEG_CROP;i++) {
4197
bbe0bc387a19 revert bad checkin
mru
parents: 4196
diff changeset
561 cropTbl[i] = 0;
bbe0bc387a19 revert bad checkin
mru
parents: 4196
diff changeset
562 cropTbl[i + MAX_NEG_CROP + 256] = 255;
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
563 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2872
diff changeset
564
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
565 for(;;) {
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
566 c = getopt(argc, argv, "ih4");
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
567 if (c == -1)
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
568 break;
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
569 switch(c) {
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
570 case 'i':
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
571 test_idct = 1;
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
572 break;
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
573 case '4':
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
574 test_248_dct = 1;
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
575 break;
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
576 default :
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
577 case 'h':
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
578 help();
4754
0c378ce84378 Remove illegal call to exit().
diego
parents: 4752
diff changeset
579 return 0;
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
580 }
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
581 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2872
diff changeset
582
633
e7b72c1dfa1b dct-test update
michaelni
parents: 474
diff changeset
583 if(optind <argc) test= atoi(argv[optind]);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2872
diff changeset
584
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
585 printf("ffmpeg DCT/IDCT test\n");
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
586
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
587 if (test_248_dct) {
6001
f4859c13426b add ff_ prefix to all simple_idct symbols
aurel
parents: 5379
diff changeset
588 idct248_error("SIMPLE-C", ff_simple_idct248_put);
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
589 } else {
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
590 for (i=0;algos[i].name;i++)
7140
654f063dc099 Use a local variable instead of mm_flags in dct-test.
astrange
parents: 7135
diff changeset
591 if (algos[i].is_idct == test_idct && !(~cpu_flags & algos[i].mm_support)) {
4755
b7c27288e509 platform-independent restructuring and code simplification
diego
parents: 4754
diff changeset
592 dct_error (algos[i].name, algos[i].is_idct, algos[i].func, algos[i].ref, algos[i].format, test);
720
409bdaa0b964 added IDCT248 testing
bellard
parents: 687
diff changeset
593 }
33
7cf705a32d1c updated dct-test to test IDCTs too
glantau
parents: 0
diff changeset
594 }
0
986e461dc072 Initial revision
glantau
parents:
diff changeset
595 return 0;
986e461dc072 Initial revision
glantau
parents:
diff changeset
596 }