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 }