annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
1 /*
20094
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
2 * Copyright (C) 2002 Michael Niedermayer <michaelni@gmx.at>
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
3 *
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
4 * This file is part of FFmpeg.
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
5 *
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
6 * FFmpeg is free software; you can redistribute it and/or modify
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
7 * it under the terms of the GNU General Public License as published by
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
9 * (at your option) any later version.
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
10 *
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
11 * FFmpeg is distributed in the hope that it will be useful,
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
14 * GNU General Public License for more details.
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
15 *
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
16 * You should have received a copy of the GNU General Public License
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
17 * along with FFmpeg; if not, write to the Free Software
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
aca9e9783f67 Change license headers to say 'FFmpeg' instead of 'this program'.
diego
parents: 20030
diff changeset
19 */
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
20
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
21 #include <stdio.h>
19470
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
22 #include <string.h> /* for memset() */
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
23 #include <unistd.h>
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
24 #include <stdlib.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
25 #include <inttypes.h>
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
26
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
27 #include "swscale.h"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
28 #include "rgb2rgb.h"
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
29
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
30 #define SIZE 1000
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
31 #define srcByte 0x55
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
32 #define dstByte 0xBB
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
33
22964
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
34 #define FUNC(s,d,n) {s,d,#n,n}
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
35
19470
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
36 static int cpu_caps;
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
37
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
38 static char *args_parse(int argc, char *argv[])
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
39 {
19470
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
40 int o;
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
41
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
42 while ((o = getopt(argc, argv, "m23")) != -1) {
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
43 switch (o) {
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
44 case 'm':
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
45 cpu_caps |= SWS_CPU_CAPS_MMX;
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
46 break;
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
47 case '2':
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
48 cpu_caps |= SWS_CPU_CAPS_MMX2;
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
49 break;
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
50 case '3':
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
51 cpu_caps |= SWS_CPU_CAPS_3DNOW;
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
52 break;
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
53 default:
22029
2fbe2debf5e6 av_logify
lu_zero
parents: 20094
diff changeset
54 av_log(NULL, AV_LOG_ERROR, "Unknown option %c\n", o);
19470
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
55 }
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
56 }
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
57
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
58 return argv[optind];
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
59 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
60
20030
f837670d269c Fix warnings:
diego
parents: 19470
diff changeset
61 int main(int argc, char **argv)
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
62 {
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
63 int i, funcNum;
22829
9ade9f0ebfc0 Handle proper compilation on Mac OS X.
diego
parents: 22033
diff changeset
64 uint8_t *srcBuffer= (uint8_t*)av_malloc(SIZE);
9ade9f0ebfc0 Handle proper compilation on Mac OS X.
diego
parents: 22033
diff changeset
65 uint8_t *dstBuffer= (uint8_t*)av_malloc(SIZE);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
66 int failedNum=0;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
67 int passedNum=0;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
68
22029
2fbe2debf5e6 av_logify
lu_zero
parents: 20094
diff changeset
69 av_log(NULL, AV_LOG_INFO, "memory corruption test ...\n");
19470
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
70 args_parse(argc, argv);
22029
2fbe2debf5e6 av_logify
lu_zero
parents: 20094
diff changeset
71 av_log(NULL, AV_LOG_INFO, "CPU capabilities forced to %x\n", cpu_caps);
19470
b3939dba3c13 Allow to compile swscale tests
lucabe
parents: 18861
diff changeset
72 sws_rgb2rgb_init(cpu_caps);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
73
22964
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
74 for(funcNum=0; ; funcNum++){
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
75 struct func_info_s {
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
76 int src_bpp;
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
77 int dst_bpp;
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
78 char *name;
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
79 void (*func)(const uint8_t *src, uint8_t *dst, long src_size);
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
80 } func_info[] = {
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
81 FUNC(2, 2, rgb15to16),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
82 FUNC(2, 3, rgb15to24),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
83 FUNC(2, 4, rgb15to32),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
84 FUNC(2, 3, rgb16to24),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
85 FUNC(2, 4, rgb16to32),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
86 FUNC(3, 2, rgb24to15),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
87 FUNC(3, 2, rgb24to16),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
88 FUNC(3, 4, rgb24to32),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
89 FUNC(4, 2, rgb32to15),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
90 FUNC(4, 2, rgb32to16),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
91 FUNC(4, 3, rgb32to24),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
92 FUNC(2, 2, rgb16to15),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
93 FUNC(2, 2, rgb15tobgr15),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
94 FUNC(2, 2, rgb15tobgr16),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
95 FUNC(2, 3, rgb15tobgr24),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
96 FUNC(2, 4, rgb15tobgr32),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
97 FUNC(2, 2, rgb16tobgr15),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
98 FUNC(2, 2, rgb16tobgr16),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
99 FUNC(2, 3, rgb16tobgr24),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
100 FUNC(2, 4, rgb16tobgr32),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
101 FUNC(3, 2, rgb24tobgr15),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
102 FUNC(3, 2, rgb24tobgr16),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
103 FUNC(3, 3, rgb24tobgr24),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
104 FUNC(3, 4, rgb24tobgr32),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
105 FUNC(4, 2, rgb32tobgr15),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
106 FUNC(4, 2, rgb32tobgr16),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
107 FUNC(4, 3, rgb32tobgr24),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
108 FUNC(4, 4, rgb32tobgr32),
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
109 FUNC(0, 0, NULL)
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
110 };
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
111 int width;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
112 int failed=0;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
113 int srcBpp=0;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
114 int dstBpp=0;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
115
22964
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
116 if (!func_info[funcNum].func) break;
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
117
22033
a9b8e965de13 stray fflush spotted by Aurel
lu_zero
parents: 22029
diff changeset
118 av_log(NULL, AV_LOG_INFO,".");
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
119 memset(srcBuffer, srcByte, SIZE);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
120
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
121 for(width=32; width<64; width++){
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
122 int dstOffset;
22829
9ade9f0ebfc0 Handle proper compilation on Mac OS X.
diego
parents: 22033
diff changeset
123 for(dstOffset=128; dstOffset<196; dstOffset+=4){
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
124 int srcOffset;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
125 memset(dstBuffer, dstByte, SIZE);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
126
22829
9ade9f0ebfc0 Handle proper compilation on Mac OS X.
diego
parents: 22033
diff changeset
127 for(srcOffset=128; srcOffset<196; srcOffset+=4){
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
128 uint8_t *src= srcBuffer+srcOffset;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
129 uint8_t *dst= dstBuffer+dstOffset;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
130 char *name=NULL;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
131
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
132 if(failed) break; //don't fill the screen with shit ...
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
133
22964
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
134 srcBpp = func_info[funcNum].src_bpp;
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
135 dstBpp = func_info[funcNum].dst_bpp;
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
136 name = func_info[funcNum].name;
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
137
22964
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
138 func_info[funcNum].func(src, dst, width*srcBpp);
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
139
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
140 if(!srcBpp) break;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
141
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
142 for(i=0; i<SIZE; i++){
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
143 if(srcBuffer[i]!=srcByte){
22029
2fbe2debf5e6 av_logify
lu_zero
parents: 20094
diff changeset
144 av_log(NULL, AV_LOG_INFO, "src damaged at %d w:%d src:%d dst:%d %s\n",
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
145 i, width, srcOffset, dstOffset, name);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
146 failed=1;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
147 break;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
148 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
149 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
150 for(i=0; i<dstOffset; i++){
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
151 if(dstBuffer[i]!=dstByte){
22029
2fbe2debf5e6 av_logify
lu_zero
parents: 20094
diff changeset
152 av_log(NULL, AV_LOG_INFO, "dst damaged at %d w:%d src:%d dst:%d %s\n",
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
153 i, width, srcOffset, dstOffset, name);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
154 failed=1;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
155 break;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
156 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
157 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
158 for(i=dstOffset + width*dstBpp; i<SIZE; i++){
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
159 if(dstBuffer[i]!=dstByte){
22029
2fbe2debf5e6 av_logify
lu_zero
parents: 20094
diff changeset
160 av_log(NULL, AV_LOG_INFO, "dst damaged at %d w:%d src:%d dst:%d %s\n",
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
161 i, width, srcOffset, dstOffset, name);
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
162 failed=1;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
163 break;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
164 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
165 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
166 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
167 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
168 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
169 if(failed) failedNum++;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
170 else if(srcBpp) passedNum++;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
171 }
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
172
22964
5922ce1dfefc Replace huge switch statement by a lookup table.
ivo
parents: 22829
diff changeset
173 av_log(NULL, AV_LOG_INFO, "\n%d converters passed, %d converters randomly overwrote memory\n", passedNum, failedNum);
18861
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
174 return failedNum;
8579acff875e Move postproc ---> libswscale
lucabe
parents:
diff changeset
175 }