aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvo van Poorten <ivop@euronet.nl>2007-04-12 19:25:36 +0000
committerIvo van Poorten <ivop@euronet.nl>2007-04-12 19:25:36 +0000
commit2a80b21d38ae35fbc91b35295212dfbad704445d (patch)
treeeb90193eaf8f174dad6661002fbdd7b174811132
parent940d8f7614f6609eda3521f3b0d9efe5e48ac4a5 (diff)
downloadffmpeg-2a80b21d38ae35fbc91b35295212dfbad704445d.tar.gz
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
-rw-r--r--libswscale/cs_test.c220
1 files changed, 46 insertions, 174 deletions
diff --git a/libswscale/cs_test.c b/libswscale/cs_test.c
index cd0100618c..96b157c583 100644
--- a/libswscale/cs_test.c
+++ b/libswscale/cs_test.c
@@ -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;
}