From 068e718f32ad088e60b3e68f7f1a43b431fed909 Mon Sep 17 00:00:00 2001 From: michael Date: Sat, 29 Jun 2002 15:01:23 +0000 Subject: 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 :(((( git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@6604 b3059339-0415-0410-9bf9-f77b7e298cf2 --- postproc/Makefile | 4 ++ postproc/cs_test.c | 182 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 186 insertions(+) create mode 100644 postproc/cs_test.c diff --git a/postproc/Makefile b/postproc/Makefile index a55356021c..71e0ad2df6 100644 --- a/postproc/Makefile +++ b/postproc/Makefile @@ -5,6 +5,7 @@ LIBNAME = libpostproc.a SRCS=postprocess.c swscale.c rgb2rgb.c yuv2rgb.c OBJS=$(SRCS:.c=.o) +CS_TEST_OBJS=cs_test.o rgb2rgb.o ../cpudetect.o ../mp_msg.o CFLAGS = $(OPTFLAGS) $(MLIB_INC) -I. -I.. -Wall $(EXTRA_INC) # -I/usr/X11R6/include/ @@ -32,6 +33,9 @@ dep: depend depend: $(CC) -MM $(CFLAGS) $(SRCS) 1>.depend +cs_test: $(CS_TEST_OBJS) + $(CC) $(CS_TEST_OBJS) -o cs_test + # # include dependency files if they exist # diff --git a/postproc/cs_test.c b/postproc/cs_test.c new file mode 100644 index 0000000000..308096b811 --- /dev/null +++ b/postproc/cs_test.c @@ -0,0 +1,182 @@ +/* + Copyright (C) 2002 Michael Niedermayer + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include +#include +#include + +#include "rgb2rgb.h" +#include "../cpudetect.h" + +#define SIZE 1000 +#define srcByte 0x55 +#define dstByte 0xBB + +main(int argc, char **argv) +{ + int i, funcNum; + uint8_t *srcBuffer= (uint8_t*)memalign(128, SIZE); + uint8_t *dstBuffer= (uint8_t*)memalign(128, SIZE); + int failedNum=0; + int passedNum=0; + + printf("memory corruption test ...\n"); + + if(argc==2){ + GetCpuCaps(&gCpuCaps); + printf("testing mmx\n"); + } + + for(funcNum=0; funcNum<100; funcNum++){ + int width; + int failed=0; + int srcBpp=0; + int dstBpp=0; + + printf("."); fflush(stdout); + memset(srcBuffer, srcByte, SIZE); + + for(width=32; width<64; width++){ + int dstOffset; + for(dstOffset=128; dstOffset<196; dstOffset++){ + int srcOffset; + memset(dstBuffer, dstByte, SIZE); + + for(srcOffset=128; srcOffset<196; srcOffset++){ + uint8_t *src= srcBuffer+srcOffset; + uint8_t *dst= dstBuffer+dstOffset; + char *name=NULL; + + if(failed) break; //dont 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"; + 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=3; + dstBpp=3; + name="rgb24tobgr24"; + rgb24tobgr24(src, dst, width*srcBpp); + break; + case 12: + srcBpp=4; + dstBpp=4; + name="rgb32tobgr32"; + rgb32tobgr32(src, dst, width*srcBpp); + break; + } + if(!srcBpp) break; + + for(i=0; i