comparison libswscale/cs_test.c @ 22964:5922ce1dfefc

Replace huge switch statement by a lookup table. Add newline to final report.
author ivo
date Thu, 12 Apr 2007 19:25:36 +0000
parents 9ade9f0ebfc0
children c6be5039a7ca
comparison
equal deleted inserted replaced
22963:84add524a0f4 22964:5922ce1dfefc
29 29
30 #define SIZE 1000 30 #define SIZE 1000
31 #define srcByte 0x55 31 #define srcByte 0x55
32 #define dstByte 0xBB 32 #define dstByte 0xBB
33 33
34 #define FUNC(s,d,n) {s,d,#n,n}
34 35
35 static int cpu_caps; 36 static int cpu_caps;
36 37
37 static char *args_parse(int argc, char *argv[]) 38 static char *args_parse(int argc, char *argv[])
38 { 39 {
68 av_log(NULL, AV_LOG_INFO, "memory corruption test ...\n"); 69 av_log(NULL, AV_LOG_INFO, "memory corruption test ...\n");
69 args_parse(argc, argv); 70 args_parse(argc, argv);
70 av_log(NULL, AV_LOG_INFO, "CPU capabilities forced to %x\n", cpu_caps); 71 av_log(NULL, AV_LOG_INFO, "CPU capabilities forced to %x\n", cpu_caps);
71 sws_rgb2rgb_init(cpu_caps); 72 sws_rgb2rgb_init(cpu_caps);
72 73
73 for(funcNum=0; funcNum<100; funcNum++){ 74 for(funcNum=0; ; funcNum++){
75 struct func_info_s {
76 int src_bpp;
77 int dst_bpp;
78 char *name;
79 void (*func)(const uint8_t *src, uint8_t *dst, long src_size);
80 } func_info[] = {
81 FUNC(2, 2, rgb15to16),
82 FUNC(2, 3, rgb15to24),
83 FUNC(2, 4, rgb15to32),
84 FUNC(2, 3, rgb16to24),
85 FUNC(2, 4, rgb16to32),
86 FUNC(3, 2, rgb24to15),
87 FUNC(3, 2, rgb24to16),
88 FUNC(3, 4, rgb24to32),
89 FUNC(4, 2, rgb32to15),
90 FUNC(4, 2, rgb32to16),
91 FUNC(4, 3, rgb32to24),
92 FUNC(2, 2, rgb16to15),
93 FUNC(2, 2, rgb15tobgr15),
94 FUNC(2, 2, rgb15tobgr16),
95 FUNC(2, 3, rgb15tobgr24),
96 FUNC(2, 4, rgb15tobgr32),
97 FUNC(2, 2, rgb16tobgr15),
98 FUNC(2, 2, rgb16tobgr16),
99 FUNC(2, 3, rgb16tobgr24),
100 FUNC(2, 4, rgb16tobgr32),
101 FUNC(3, 2, rgb24tobgr15),
102 FUNC(3, 2, rgb24tobgr16),
103 FUNC(3, 3, rgb24tobgr24),
104 FUNC(3, 4, rgb24tobgr32),
105 FUNC(4, 2, rgb32tobgr15),
106 FUNC(4, 2, rgb32tobgr16),
107 FUNC(4, 3, rgb32tobgr24),
108 FUNC(4, 4, rgb32tobgr32),
109 FUNC(0, 0, NULL)
110 };
74 int width; 111 int width;
75 int failed=0; 112 int failed=0;
76 int srcBpp=0; 113 int srcBpp=0;
77 int dstBpp=0; 114 int dstBpp=0;
115
116 if (!func_info[funcNum].func) break;
78 117
79 av_log(NULL, AV_LOG_INFO,"."); 118 av_log(NULL, AV_LOG_INFO,".");
80 memset(srcBuffer, srcByte, SIZE); 119 memset(srcBuffer, srcByte, SIZE);
81 120
82 for(width=32; width<64; width++){ 121 for(width=32; width<64; width++){
90 uint8_t *dst= dstBuffer+dstOffset; 129 uint8_t *dst= dstBuffer+dstOffset;
91 char *name=NULL; 130 char *name=NULL;
92 131
93 if(failed) break; //don't fill the screen with shit ... 132 if(failed) break; //don't fill the screen with shit ...
94 133
95 switch(funcNum){ 134 srcBpp = func_info[funcNum].src_bpp;
96 case 0: 135 dstBpp = func_info[funcNum].dst_bpp;
97 srcBpp=2; 136 name = func_info[funcNum].name;
98 dstBpp=2;
99 name="rgb15to16";
100 rgb15to16(src, dst, width*srcBpp);
101 break;
102 case 1:
103 srcBpp=2;
104 dstBpp=3;
105 name="rgb15to24";
106 rgb15to24(src, dst, width*srcBpp);
107 break;
108 case 2:
109 srcBpp=2;
110 dstBpp=4;
111 name="rgb15to32";
112 rgb15to32(src, dst, width*srcBpp);
113 break;
114 case 3:
115 srcBpp=2;
116 dstBpp=3;
117 name="rgb16to24";
118 rgb16to24(src, dst, width*srcBpp);
119 break;
120 case 4:
121 srcBpp=2;
122 dstBpp=4;
123 name="rgb16to32";
124 rgb16to32(src, dst, width*srcBpp);
125 break;
126 case 5:
127 srcBpp=3;
128 dstBpp=2;
129 name="rgb24to15";
130 rgb24to15(src, dst, width*srcBpp);
131 break;
132 case 6:
133 srcBpp=3;
134 dstBpp=2;
135 name="rgb24to16";
136 rgb24to16(src, dst, width*srcBpp);
137 break;
138 case 7:
139 srcBpp=3;
140 dstBpp=4;
141 name="rgb24to32";
142 rgb24to32(src, dst, width*srcBpp);
143 break;
144 case 8:
145 srcBpp=4;
146 dstBpp=2;
147 name="rgb32to15";
148 //((*s++) << TGA_SHIFT32) | TGA_ALPHA32;
149 rgb32to15(src, dst, width*srcBpp);
150 break;
151 case 9:
152 srcBpp=4;
153 dstBpp=2;
154 name="rgb32to16";
155 rgb32to16(src, dst, width*srcBpp);
156 break;
157 case 10:
158 srcBpp=4;
159 dstBpp=3;
160 name="rgb32to24";
161 rgb32to24(src, dst, width*srcBpp);
162 break;
163 case 11:
164 srcBpp=2;
165 dstBpp=2;
166 name="rgb16to15";
167 rgb16to15(src, dst, width*srcBpp);
168 break;
169
170 case 14:
171 srcBpp=2;
172 dstBpp=2;
173 name="rgb15tobgr15";
174 rgb15tobgr15(src, dst, width*srcBpp);
175 break;
176 case 15:
177 srcBpp=2;
178 dstBpp=2;
179 name="rgb15tobgr16";
180 rgb15tobgr16(src, dst, width*srcBpp);
181 break;
182 case 16:
183 srcBpp=2;
184 dstBpp=3;
185 name="rgb15tobgr24";
186 rgb15tobgr24(src, dst, width*srcBpp);
187 break;
188 case 17:
189 srcBpp=2;
190 dstBpp=4;
191 name="rgb15tobgr32";
192 rgb15tobgr32(src, dst, width*srcBpp);
193 break;
194 case 18:
195 srcBpp=2;
196 dstBpp=2;
197 name="rgb16tobgr15";
198 rgb16tobgr15(src, dst, width*srcBpp);
199 break;
200 case 19:
201 srcBpp=2;
202 dstBpp=2;
203 name="rgb16tobgr16";
204 rgb16tobgr16(src, dst, width*srcBpp);
205 break;
206 case 20:
207 srcBpp=2;
208 dstBpp=3;
209 name="rgb16tobgr24";
210 rgb16tobgr24(src, dst, width*srcBpp);
211 break;
212 case 21:
213 srcBpp=2;
214 dstBpp=4;
215 name="rgb16tobgr32";
216 rgb16tobgr32(src, dst, width*srcBpp);
217 break;
218 case 22:
219 srcBpp=3;
220 dstBpp=2;
221 name="rgb24tobgr15";
222 rgb24tobgr15(src, dst, width*srcBpp);
223 break;
224 case 23:
225 srcBpp=3;
226 dstBpp=2;
227 name="rgb24tobgr16";
228 rgb24tobgr16(src, dst, width*srcBpp);
229 break;
230 case 24:
231 srcBpp=3;
232 dstBpp=3;
233 name="rgb24tobgr24";
234 rgb24tobgr24(src, dst, width*srcBpp);
235 break;
236 case 25:
237 srcBpp=3;
238 dstBpp=4;
239 name="rgb24tobgr32";
240 rgb24tobgr32(src, dst, width*srcBpp);
241 break;
242 case 26:
243 srcBpp=4;
244 dstBpp=2;
245 name="rgb32tobgr15";
246 rgb32tobgr15(src, dst, width*srcBpp);
247 break;
248 case 27:
249 srcBpp=4;
250 dstBpp=2;
251 name="rgb32tobgr16";
252 rgb32tobgr16(src, dst, width*srcBpp);
253 break;
254 case 28:
255 srcBpp=4;
256 dstBpp=3;
257 name="rgb32tobgr24";
258 rgb32tobgr24(src, dst, width*srcBpp);
259 break;
260 case 29:
261 srcBpp=4;
262 dstBpp=4;
263 name="rgb32tobgr32";
264 rgb32tobgr32(src, dst, width*srcBpp);
265 break;
266 137
267 } 138 func_info[funcNum].func(src, dst, width*srcBpp);
139
268 if(!srcBpp) break; 140 if(!srcBpp) break;
269 141
270 for(i=0; i<SIZE; i++){ 142 for(i=0; i<SIZE; i++){
271 if(srcBuffer[i]!=srcByte){ 143 if(srcBuffer[i]!=srcByte){
272 av_log(NULL, AV_LOG_INFO, "src damaged at %d w:%d src:%d dst:%d %s\n", 144 av_log(NULL, AV_LOG_INFO, "src damaged at %d w:%d src:%d dst:%d %s\n",
296 } 168 }
297 if(failed) failedNum++; 169 if(failed) failedNum++;
298 else if(srcBpp) passedNum++; 170 else if(srcBpp) passedNum++;
299 } 171 }
300 172
301 av_log(NULL, AV_LOG_INFO, "%d converters passed, %d converters randomly overwrote memory\n", passedNum, failedNum); 173 av_log(NULL, AV_LOG_INFO, "\n%d converters passed, %d converters randomly overwrote memory\n", passedNum, failedNum);
302 return failedNum; 174 return failedNum;
303 } 175 }