274 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			274 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
    Copyright (C) 2002 Michael Niedermayer <michaelni@gmx.at>
 | 
						|
 | 
						|
    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 <stdio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
#include <inttypes.h>
 | 
						|
 | 
						|
#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=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;
 | 
						|
 | 
						|
					}
 | 
						|
					if(!srcBpp) break;
 | 
						|
 | 
						|
					for(i=0; i<SIZE; i++){
 | 
						|
						if(srcBuffer[i]!=srcByte){
 | 
						|
							printf("src damaged at %d w:%d src:%d dst:%d %s\n", 
 | 
						|
								i, width, srcOffset, dstOffset, name);
 | 
						|
							failed=1;
 | 
						|
							break;
 | 
						|
						}
 | 
						|
					}
 | 
						|
					for(i=0; i<dstOffset; i++){
 | 
						|
						if(dstBuffer[i]!=dstByte){
 | 
						|
							printf("dst damaged at %d w:%d src:%d dst:%d %s\n", 
 | 
						|
								i, width, srcOffset, dstOffset, name);
 | 
						|
							failed=1;
 | 
						|
							break;
 | 
						|
						}
 | 
						|
					}
 | 
						|
					for(i=dstOffset + width*dstBpp; i<SIZE; i++){
 | 
						|
						if(dstBuffer[i]!=dstByte){
 | 
						|
							printf("dst damaged at %d w:%d src:%d dst:%d %s\n", 
 | 
						|
								i, width, srcOffset, dstOffset, name);
 | 
						|
							failed=1;
 | 
						|
							break;
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		if(failed) failedNum++;
 | 
						|
		else if(srcBpp) passedNum++;
 | 
						|
	}
 | 
						|
	
 | 
						|
	printf("%d converters passed, %d converters randomly overwrote memory\n", passedNum, failedNum);
 | 
						|
	return failedNum;
 | 
						|
} |