Mercurial > mplayer.hg
comparison postproc/cs_test.c @ 6603:6eab60ea6c11
colorspace converter tests (memory corruption tests at different width/src/dst)
quite impressive results only 1 of the 13 rgb->rgb converters fails for the c versions
... sadly only 1 of the mmx converters passes though :( ... i feared allready that last mplayerxp merge reversed the bugfixes :((((
author | michael |
---|---|
date | Sat, 29 Jun 2002 15:01:23 +0000 |
parents | |
children | e3a8a030c27a |
comparison
equal
deleted
inserted
replaced
6602:6f69e03c3fb7 | 6603:6eab60ea6c11 |
---|---|
1 /* | |
2 Copyright (C) 2002 Michael Niedermayer <michaelni@gmx.at> | |
3 | |
4 This program is free software; you can redistribute it and/or modify | |
5 it under the terms of the GNU General Public License as published by | |
6 the Free Software Foundation; either version 2 of the License, or | |
7 (at your option) any later version. | |
8 | |
9 This program is distributed in the hope that it will be useful, | |
10 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 GNU General Public License for more details. | |
13 | |
14 You should have received a copy of the GNU General Public License | |
15 along with this program; if not, write to the Free Software | |
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
17 */ | |
18 | |
19 #include <stdio.h> | |
20 #include <stdlib.h> | |
21 #include <inttypes.h> | |
22 | |
23 #include "rgb2rgb.h" | |
24 #include "../cpudetect.h" | |
25 | |
26 #define SIZE 1000 | |
27 #define srcByte 0x55 | |
28 #define dstByte 0xBB | |
29 | |
30 main(int argc, char **argv) | |
31 { | |
32 int i, funcNum; | |
33 uint8_t *srcBuffer= (uint8_t*)memalign(128, SIZE); | |
34 uint8_t *dstBuffer= (uint8_t*)memalign(128, SIZE); | |
35 int failedNum=0; | |
36 int passedNum=0; | |
37 | |
38 printf("memory corruption test ...\n"); | |
39 | |
40 if(argc==2){ | |
41 GetCpuCaps(&gCpuCaps); | |
42 printf("testing mmx\n"); | |
43 } | |
44 | |
45 for(funcNum=0; funcNum<100; funcNum++){ | |
46 int width; | |
47 int failed=0; | |
48 int srcBpp=0; | |
49 int dstBpp=0; | |
50 | |
51 printf("."); fflush(stdout); | |
52 memset(srcBuffer, srcByte, SIZE); | |
53 | |
54 for(width=32; width<64; width++){ | |
55 int dstOffset; | |
56 for(dstOffset=128; dstOffset<196; dstOffset++){ | |
57 int srcOffset; | |
58 memset(dstBuffer, dstByte, SIZE); | |
59 | |
60 for(srcOffset=128; srcOffset<196; srcOffset++){ | |
61 uint8_t *src= srcBuffer+srcOffset; | |
62 uint8_t *dst= dstBuffer+dstOffset; | |
63 char *name=NULL; | |
64 | |
65 if(failed) break; //dont fill the screen with shit ... | |
66 | |
67 switch(funcNum){ | |
68 case 0: | |
69 srcBpp=2; | |
70 dstBpp=2; | |
71 name="rgb15to16"; | |
72 rgb15to16(src, dst, width*srcBpp); | |
73 break; | |
74 case 1: | |
75 srcBpp=2; | |
76 dstBpp=3; | |
77 name="rgb15to24"; | |
78 rgb15to24(src, dst, width*srcBpp); | |
79 break; | |
80 case 2: | |
81 srcBpp=2; | |
82 dstBpp=4; | |
83 name="rgb15to32"; | |
84 rgb15to32(src, dst, width*srcBpp); | |
85 break; | |
86 case 3: | |
87 srcBpp=2; | |
88 dstBpp=3; | |
89 name="rgb16to24"; | |
90 rgb16to24(src, dst, width*srcBpp); | |
91 break; | |
92 case 4: | |
93 srcBpp=2; | |
94 dstBpp=4; | |
95 name="rgb16to32"; | |
96 rgb16to32(src, dst, width*srcBpp); | |
97 break; | |
98 case 5: | |
99 srcBpp=3; | |
100 dstBpp=2; | |
101 name="rgb24to15"; | |
102 rgb24to15(src, dst, width*srcBpp); | |
103 break; | |
104 case 6: | |
105 srcBpp=3; | |
106 dstBpp=2; | |
107 name="rgb24to16"; | |
108 rgb24to16(src, dst, width*srcBpp); | |
109 break; | |
110 case 7: | |
111 srcBpp=3; | |
112 dstBpp=4; | |
113 name="rgb24to32"; | |
114 rgb24to32(src, dst, width*srcBpp); | |
115 break; | |
116 case 8: | |
117 srcBpp=4; | |
118 dstBpp=2; | |
119 name="rgb32to15"; | |
120 rgb32to15(src, dst, width*srcBpp); | |
121 break; | |
122 case 9: | |
123 srcBpp=4; | |
124 dstBpp=2; | |
125 name="rgb32to16"; | |
126 rgb32to16(src, dst, width*srcBpp); | |
127 break; | |
128 case 10: | |
129 srcBpp=4; | |
130 dstBpp=3; | |
131 name="rgb32to24"; | |
132 rgb32to24(src, dst, width*srcBpp); | |
133 break; | |
134 case 11: | |
135 srcBpp=3; | |
136 dstBpp=3; | |
137 name="rgb24tobgr24"; | |
138 rgb24tobgr24(src, dst, width*srcBpp); | |
139 break; | |
140 case 12: | |
141 srcBpp=4; | |
142 dstBpp=4; | |
143 name="rgb32tobgr32"; | |
144 rgb32tobgr32(src, dst, width*srcBpp); | |
145 break; | |
146 } | |
147 if(!srcBpp) break; | |
148 | |
149 for(i=0; i<SIZE; i++){ | |
150 if(srcBuffer[i]!=srcByte){ | |
151 printf("src damaged at %d w:%d src:%d dst:%d %s\n", | |
152 i, width, srcOffset, dstOffset, name); | |
153 failed=1; | |
154 break; | |
155 } | |
156 } | |
157 for(i=0; i<dstOffset; i++){ | |
158 if(dstBuffer[i]!=dstByte){ | |
159 printf("dst damaged at %d w:%d src:%d dst:%d %s\n", | |
160 i, width, srcOffset, dstOffset, name); | |
161 failed=1; | |
162 break; | |
163 } | |
164 } | |
165 for(i=dstOffset + width*dstBpp; i<SIZE; i++){ | |
166 if(dstBuffer[i]!=dstByte){ | |
167 printf("dst damaged at %d w:%d src:%d dst:%d %s\n", | |
168 i, width, srcOffset, dstOffset, name); | |
169 failed=1; | |
170 break; | |
171 } | |
172 } | |
173 } | |
174 } | |
175 } | |
176 if(failed) failedNum++; | |
177 else if(srcBpp) passedNum++; | |
178 } | |
179 | |
180 printf("%d converters passed, %d converters randomly overwrote memory\n", passedNum, failedNum); | |
181 return failedNum; | |
182 } |