Commit 2a80b21d authored by Ivo van Poorten's avatar Ivo van Poorten
Browse files

Replace huge switch statement by a lookup table.

Add newline to final report.

Originally committed as revision 22982 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale
parent 940d8f76
......@@ -31,6 +31,7 @@
#define srcByte 0x55
#define dstByte 0xBB
#define FUNC(s,d,n) {s,d,#n,n}
static int cpu_caps;
......@@ -70,12 +71,50 @@ int main(int argc, char **argv)
av_log(NULL, AV_LOG_INFO, "CPU capabilities forced to %x\n", cpu_caps);
sws_rgb2rgb_init(cpu_caps);
for(funcNum=0; funcNum<100; funcNum++){
for(funcNum=0; ; funcNum++){
struct func_info_s {
int src_bpp;
int dst_bpp;
char *name;
void (*func)(const uint8_t *src, uint8_t *dst, long src_size);
} func_info[] = {
FUNC(2, 2, rgb15to16),
FUNC(2, 3, rgb15to24),
FUNC(2, 4, rgb15to32),
FUNC(2, 3, rgb16to24),
FUNC(2, 4, rgb16to32),
FUNC(3, 2, rgb24to15),
FUNC(3, 2, rgb24to16),
FUNC(3, 4, rgb24to32),
FUNC(4, 2, rgb32to15),
FUNC(4, 2, rgb32to16),
FUNC(4, 3, rgb32to24),
FUNC(2, 2, rgb16to15),
FUNC(2, 2, rgb15tobgr15),
FUNC(2, 2, rgb15tobgr16),
FUNC(2, 3, rgb15tobgr24),
FUNC(2, 4, rgb15tobgr32),
FUNC(2, 2, rgb16tobgr15),
FUNC(2, 2, rgb16tobgr16),
FUNC(2, 3, rgb16tobgr24),
FUNC(2, 4, rgb16tobgr32),
FUNC(3, 2, rgb24tobgr15),
FUNC(3, 2, rgb24tobgr16),
FUNC(3, 3, rgb24tobgr24),
FUNC(3, 4, rgb24tobgr32),
FUNC(4, 2, rgb32tobgr15),
FUNC(4, 2, rgb32tobgr16),
FUNC(4, 3, rgb32tobgr24),
FUNC(4, 4, rgb32tobgr32),
FUNC(0, 0, NULL)
};
int width;
int failed=0;
int srcBpp=0;
int dstBpp=0;
if (!func_info[funcNum].func) break;
av_log(NULL, AV_LOG_INFO,".");
memset(srcBuffer, srcByte, SIZE);
......@@ -92,179 +131,12 @@ int main(int argc, char **argv)
if(failed) break; //don't fill the screen with shit ...
switch(funcNum){
case 0:
srcBpp=2;
dstBpp=2;
name="rgb15to16";
rgb15to16(src, dst, width*srcBpp);
break;
case 1:
srcBpp=2;
dstBpp=3;
name="rgb15to24";
rgb15to24(src, dst, width*srcBpp);
break;
case 2:
srcBpp=2;
dstBpp=4;
name="rgb15to32";
rgb15to32(src, dst, width*srcBpp);
break;
case 3:
srcBpp=2;
dstBpp=3;
name="rgb16to24";
rgb16to24(src, dst, width*srcBpp);
break;
case 4:
srcBpp=2;
dstBpp=4;
name="rgb16to32";
rgb16to32(src, dst, width*srcBpp);
break;
case 5:
srcBpp=3;
dstBpp=2;
name="rgb24to15";
rgb24to15(src, dst, width*srcBpp);
break;
case 6:
srcBpp=3;
dstBpp=2;
name="rgb24to16";
rgb24to16(src, dst, width*srcBpp);
break;
case 7:
srcBpp=3;
dstBpp=4;
name="rgb24to32";
rgb24to32(src, dst, width*srcBpp);
break;
case 8:
srcBpp=4;
dstBpp=2;
name="rgb32to15";
//((*s++) << TGA_SHIFT32) | TGA_ALPHA32;
rgb32to15(src, dst, width*srcBpp);
break;
case 9:
srcBpp=4;
dstBpp=2;
name="rgb32to16";
rgb32to16(src, dst, width*srcBpp);
break;
case 10:
srcBpp=4;
dstBpp=3;
name="rgb32to24";
rgb32to24(src, dst, width*srcBpp);
break;
case 11:
srcBpp=2;
dstBpp=2;
name="rgb16to15";
rgb16to15(src, dst, width*srcBpp);
break;
case 14:
srcBpp=2;
dstBpp=2;
name="rgb15tobgr15";
rgb15tobgr15(src, dst, width*srcBpp);
break;
case 15:
srcBpp=2;
dstBpp=2;
name="rgb15tobgr16";
rgb15tobgr16(src, dst, width*srcBpp);
break;
case 16:
srcBpp=2;
dstBpp=3;
name="rgb15tobgr24";
rgb15tobgr24(src, dst, width*srcBpp);
break;
case 17:
srcBpp=2;
dstBpp=4;
name="rgb15tobgr32";
rgb15tobgr32(src, dst, width*srcBpp);
break;
case 18:
srcBpp=2;
dstBpp=2;
name="rgb16tobgr15";
rgb16tobgr15(src, dst, width*srcBpp);
break;
case 19:
srcBpp=2;
dstBpp=2;
name="rgb16tobgr16";
rgb16tobgr16(src, dst, width*srcBpp);
break;
case 20:
srcBpp=2;
dstBpp=3;
name="rgb16tobgr24";
rgb16tobgr24(src, dst, width*srcBpp);
break;
case 21:
srcBpp=2;
dstBpp=4;
name="rgb16tobgr32";
rgb16tobgr32(src, dst, width*srcBpp);
break;
case 22:
srcBpp=3;
dstBpp=2;
name="rgb24tobgr15";
rgb24tobgr15(src, dst, width*srcBpp);
break;
case 23:
srcBpp=3;
dstBpp=2;
name="rgb24tobgr16";
rgb24tobgr16(src, dst, width*srcBpp);
break;
case 24:
srcBpp=3;
dstBpp=3;
name="rgb24tobgr24";
rgb24tobgr24(src, dst, width*srcBpp);
break;
case 25:
srcBpp=3;
dstBpp=4;
name="rgb24tobgr32";
rgb24tobgr32(src, dst, width*srcBpp);
break;
case 26:
srcBpp=4;
dstBpp=2;
name="rgb32tobgr15";
rgb32tobgr15(src, dst, width*srcBpp);
break;
case 27:
srcBpp=4;
dstBpp=2;
name="rgb32tobgr16";
rgb32tobgr16(src, dst, width*srcBpp);
break;
case 28:
srcBpp=4;
dstBpp=3;
name="rgb32tobgr24";
rgb32tobgr24(src, dst, width*srcBpp);
break;
case 29:
srcBpp=4;
dstBpp=4;
name="rgb32tobgr32";
rgb32tobgr32(src, dst, width*srcBpp);
break;
srcBpp = func_info[funcNum].src_bpp;
dstBpp = func_info[funcNum].dst_bpp;
name = func_info[funcNum].name;
func_info[funcNum].func(src, dst, width*srcBpp);
}
if(!srcBpp) break;
for(i=0; i<SIZE; i++){
......@@ -298,6 +170,6 @@ int main(int argc, char **argv)
else if(srcBpp) passedNum++;
}
av_log(NULL, AV_LOG_INFO, "%d converters passed, %d converters randomly overwrote memory\n", passedNum, failedNum);
av_log(NULL, AV_LOG_INFO, "\n%d converters passed, %d converters randomly overwrote memory\n", passedNum, failedNum);
return failedNum;
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment