mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-10-31 20:42:49 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			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;
 | |
| } | 
