⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scaler_test.c

📁 s3c6400 ADS下官方测试程序
💻 C
📖 第 1 页 / 共 5 页
字号:

		uDstStartX = 20, uDstStartY = 40, uDstScaledHSz = 160, uDstScaledVSz = 200;		
	}
	else if (eSrcDataFmt == RGB24 && eMidDataFmt == CBYCRY&& eDstDataFmt == RGB24)
	{

		uImgHSz = 360, uImgVSz = 480, uSrcStartX = 0, uSrcStartY = 0;
		uSrcCroppedHSz = 360, 	uSrcCroppedVSz = 480;

		uMidImgHSz = 360, uMidImgVSz = 480, uMidStartX = 0, uMidStartY = 0;
		uMidScaledHSz = 360, uMidScaledVSz = 480;

		uDstStartX = 0, uDstStartY = 0, uDstScaledHSz = 320, uDstScaledVSz = 240;		
	}
	else if (eSrcDataFmt == RGB24 && eMidDataFmt == CRYCBY&& eDstDataFmt == RGB24)
	{
		uImgHSz = 240, uImgVSz = 320, uSrcStartX = 80, uSrcStartY = 80;
		uSrcCroppedHSz = 104, uSrcCroppedVSz = 120;

		uMidImgHSz = 360, uMidImgVSz = 480, uMidStartX = 180, uMidStartY = 180;
		uMidScaledHSz = 120, uMidScaledVSz = 240;

		uDstStartX = 20, uDstStartY = 80, uDstScaledHSz = 80, uDstScaledVSz = 160;		
	}
	else if (eSrcDataFmt == RGB24 && eMidDataFmt == YC420 && eDstDataFmt == RGB24)
	{
		uImgHSz = 120, 	uImgVSz = 160, uSrcStartX = 20, uSrcStartY = 80;
		uSrcCroppedHSz = 72, uSrcCroppedVSz = 72;

		uMidImgHSz = 360, uMidImgVSz = 480, uMidStartX = 24, uMidStartY = 20;
		uMidScaledHSz = 320, uMidScaledVSz = 400;

		uDstStartX = 80, uDstStartY = 100, uDstScaledHSz = 120, uDstScaledVSz = 120;		
	}
	else if (eSrcDataFmt == RGB16 && eMidDataFmt == YCBYCR && eDstDataFmt == RGB24)
	{
		uImgHSz = 240, 	uImgVSz = 320, uSrcStartX = 160, 	uSrcStartY = 200;
		uSrcCroppedHSz = 56, uSrcCroppedVSz = 120;

		uMidImgHSz = 120, uMidImgVSz = 160, uMidStartX = 20, uMidStartY = 40;
		uMidScaledHSz = 80, uMidScaledVSz = 80;

		uDstStartX = 20, uDstStartY = 20, uDstScaledHSz = 200, uDstScaledVSz = 220;		
	}
	else if (eSrcDataFmt == RGB16 && eMidDataFmt == YCRYCB && eDstDataFmt == RGB24)
	{
		uImgHSz = 120, 	uImgVSz = 160, uSrcStartX = 20, uSrcStartY = 20;
		uSrcCroppedHSz = 88, uSrcCroppedVSz = 120;

		uMidImgHSz = 120, uMidImgVSz = 480, uMidStartX = 0, uMidStartY = 40;
		uMidScaledHSz = 88, uMidScaledVSz = 280;

		uDstStartX = 10, uDstStartY = 10, uDstScaledHSz = 200,	uDstScaledVSz = 230;		
	}
	else if (eSrcDataFmt == RGB16 && eMidDataFmt == CBYCRY && eDstDataFmt == RGB24)
	{
		uImgHSz = 360, 	uImgVSz = 480, uSrcStartX = 180, 	uSrcStartY = 240;
		uSrcCroppedHSz = 120, 	uSrcCroppedVSz = 240;

		uMidImgHSz = 240, uMidImgVSz = 160, uMidStartX = 20, uMidStartY = 40;
		uMidScaledHSz = 144, uMidScaledVSz = 120;

		uDstStartX = 10, uDstStartY = 10, uDstScaledHSz = 104, uDstScaledVSz = 104;		
	}
	else if (eSrcDataFmt == RGB16 && eMidDataFmt == CRYCBY && eDstDataFmt == RGB24)
	{
		uImgHSz = 240, 	uImgVSz = 320, uSrcStartX = 40, uSrcStartY = 50;
		uSrcCroppedHSz = 184, 	uSrcCroppedVSz = 120;

		uMidImgHSz = 120, uMidImgVSz = 480, uMidStartX = 20, uMidStartY = 40;
		uMidScaledHSz = 88, uMidScaledVSz = 400;

		uDstStartX = 10, uDstStartY = 10, uDstScaledHSz = 160, uDstScaledVSz = 230;		
	}
	else if (eSrcDataFmt == RGB16 && eMidDataFmt == YC420 && eDstDataFmt == RGB24)
	{
		uImgHSz = 120, 	uImgVSz = 160, uSrcStartX = 40, uSrcStartY = 50;
		uSrcCroppedHSz = 40, uSrcCroppedVSz = 88;

		uMidImgHSz = 360, uMidImgVSz = 480, uMidStartX = 56, uMidStartY = 10;
		uMidScaledHSz = 184, uMidScaledVSz = 240;

		uDstStartX = 10, uDstStartY = 10, uDstScaledHSz = 160, uDstScaledVSz = 160;		
	}
	else if (eSrcDataFmt == RGB24 && eMidDataFmt == YCBYCR && eDstDataFmt == RGB16)
	{
		uImgHSz = 240, uImgVSz = 320, uSrcStartX = 60, uSrcStartY = 200;
		uSrcCroppedHSz = 112, 	uSrcCroppedVSz = 96;

		uMidImgHSz = 120, uMidImgVSz = 160, uMidStartX = 20, uMidStartY = 40;
		uMidScaledHSz = 88, uMidScaledVSz = 96;

		uDstStartX = 60, uDstStartY = 80, uDstScaledHSz = 136, uDstScaledVSz = 160;		
	}
	else if (eSrcDataFmt == RGB24 && eMidDataFmt == YCRYCB&& eDstDataFmt == RGB16)
	{
		uImgHSz = 240, uImgVSz = 320, uSrcStartX = 180, uSrcStartY = 60;
		uSrcCroppedHSz = 48, uSrcCroppedVSz = 240;

		uMidImgHSz = 240, uMidImgVSz = 480, uMidStartX = 20, uMidStartY = 40;
		uMidScaledHSz = 184, uMidScaledVSz = 240;

		uDstStartX = 40, uDstStartY = 40, uDstScaledHSz = 184, uDstScaledVSz = 80;		
	}
	else if (eSrcDataFmt == RGB24 && eMidDataFmt == CBYCRY && eDstDataFmt == RGB16)
	{
		uImgHSz = 240, uImgVSz = 320, uSrcStartX = 180, uSrcStartY = 60;
		uSrcCroppedHSz = 48, uSrcCroppedVSz = 240;

		uMidImgHSz = 240, uMidImgVSz = 480, uMidStartX = 20, uMidStartY = 40;
		uMidScaledHSz = 184, uMidScaledVSz = 240;

		uDstStartX = 40, uDstStartY = 40, uDstScaledHSz = 184, uDstScaledVSz = 80;		
	}
	else if (eSrcDataFmt == RGB24 && eMidDataFmt == CRYCBY && eDstDataFmt == RGB16)
	{
		uImgHSz = 360, uImgVSz = 480, uSrcStartX = 40, uSrcStartY = 50;
		uSrcCroppedHSz = 184, 	uSrcCroppedVSz = 120;

		uMidImgHSz = 120, uMidImgVSz = 480, uMidStartX = 20, uMidStartY = 40;
		uMidScaledHSz = 80, uMidScaledVSz = 240;

		uDstStartX = 10, uDstStartY = 10, uDstScaledHSz = 160, uDstScaledVSz = 230;		
		
	}
	else if (eSrcDataFmt == RGB24 && eMidDataFmt == YC420 && eDstDataFmt == RGB16)
	{
		uImgHSz = 240, uImgVSz = 320, uSrcStartX = 120, uSrcStartY = 120;
		uSrcCroppedHSz = 120, 	uSrcCroppedVSz = 120;

		uMidImgHSz = 120, uMidImgVSz = 160, uMidStartX = 24, uMidStartY = 20;
		uMidScaledHSz = 96, uMidScaledVSz = 96;

		uDstStartX = 10, uDstStartY = 10, uDstScaledHSz = 160, uDstScaledVSz = 160;		
	}
	else 
	{
		UART_Printf("Error! Unsupported Data Format!\n");
		return;
	}

	UART_Printf("\n");
	if(uSimpleTest == 0)
	{
		UART_Printf("=========    Complex_Test Image Size    =========\n");
		UART_Printf("SrcImgHSz     = %d,       SrcImgVSz     = %d\n",uImgHSz,uImgVSz);
		UART_Printf("SrcStartX     = %d,       SrcStartY     = %d\n",uSrcStartX,uSrcStartY);
		UART_Printf("SrcCroppedHSz = %d,       SrcCroppedVSz = %d\n",uSrcCroppedHSz,uSrcCroppedVSz);
		UART_Printf("\n");
		UART_Printf("MidImgHSz     = %d,       MidImgVSz     = %d\n",uMidImgHSz,uMidImgVSz);
		UART_Printf("MidStartX     = %d,       MidStartY     = %d\n",uMidStartX,uMidStartY);
		UART_Printf("MidScaledHSz  = %d,       MidScaledVSz  = %d\n",uMidScaledHSz,uMidScaledVSz);
		UART_Printf("\n");
		UART_Printf("DstStartX     = %d,       DstStartY     = %d\n",uDstStartX,uDstStartY);
		UART_Printf("DstScaledHSz  = %d,       DstScaledVSz  = %d\n",uDstScaledHSz,uDstScaledVSz);	
		UART_Printf("=================================================\n");
		UART_Printf("\n");
	}
	
}


// TestXXX_R2Y2R does two steps
// Step 1) Glib Addr(RGB Data Format) -> Post(CSC) -> Post Addr (YUV Data Format) // To verify CSC from RGB to YUV
// Step 2) Post Addr(YUV Data Format) -> Post(CSC) -> LCD Addr (RGB Data Format) // To verify CSC from YUV to RGB
static void ScalerT_SimpleDmaToDma_R2Y2R(void)
{
	u32 uGlibStAddr, uPostStAddr;
	u32 uSrcBytesPerPixel, uDstBytesPerPixel;

	UART_Printf("[ScalerT_SimpleDmaToDma_R2Y2R]\n");

	uSimpleTest = 1;
	ScalerT_SetCscTypeDmaToDma_R2Y2R();
		
	//LCD_InitLDI(MAIN);
#ifdef LCD_INIT_TEST	
	LCD_InitBase();
	LCD_Start();
	LCD_InitWin(eDstDataFmt, uImgHSz, uImgVSz, 0, 0, uImgHSz, uImgVSz, 0, 0, uLcdStAddr, WIN0, false);
#else
	LCD_InitBase();
	LCD_InitDISPC(eDstDataFmt, uLcdStAddr, WIN0, false);
	LCD_GetFrmSz(&uLcdHSz, &uLcdVSz, WIN0);
	//LCD_InitDISPC1(uLcdHSz, uLcdVSz, eDstDataFmt, uLcdStAddr, WIN0, false);
	LCD_Start();
#endif
	LCD_SetWinOnOff(1, WIN0);
	//LCD_GetFrmSz(&uLcdHSz, &uLcdVSz, WIN0);

	uSrcBytesPerPixel = (eSrcDataFmt == RGB16) ? 2 : 4;
	uDstBytesPerPixel = (eDstDataFmt == RGB16) ? 2 : 4;
	uGlibStAddr = uLcdStAddr + uLcdHSz*uLcdVSz*uDstBytesPerPixel;
	uPostStAddr = uGlibStAddr + uLcdHSz*uLcdVSz*uSrcBytesPerPixel;

#if (POST_IMAGE_SORCE == POST_IMAGE_PATTERN)
	GLIB_Init(uGlibStAddr, uLcdHSz, uLcdVSz, eSrcDataFmt);
	GLIB_DrawPattern(uLcdHSz, uLcdVSz);
#elif (POST_IMAGE_SORCE == POST_IMAGE_HEADER)
	ScalerT_GetImageFromHeader(uGlibStAddr, uLcdHSz, uLcdVSz, eSrcDataFmt);
#endif

	// From RGB To YUV
	UART_Printf("========   RGB -> YUV   =========\n");
	UART_Printf("Source Address : 0x%08x\n", uGlibStAddr);
	UART_Printf("Destination Address : 0x%08x\n", uPostStAddr);
	POST_InitIpForDmaInDmaOut(	uLcdHSz, uLcdVSz, uGlibStAddr, eSrcDataFmt, 
									uLcdHSz, uLcdVSz, uPostStAddr, eMidDataFmt,
									1, FALSE, ONE_SHOT, &oSc);
	//POST_InitIpForDmaInDmaOut(	uImgHSz, uImgVSz, uGlibStAddr, eSrcDataFmt, 
		//							uLcdHSz, uLcdVSz, uPostStAddr, eMidDataFmt,
			//						1, FALSE, ONE_SHOT, &oSc);	
	POST_StartProcessing(&oSc);
	while (!POST_IsProcessingDone(&oSc));	

	//SaveToFile(POST_YUV_FILE_NAME1, uLcdHSz*uLcdVSz*2, uPostStAddr);
	
#if 0	// R->Y Wide & Narrow check
	{
		int R, G, B, YCbCr, i, j;
		for(i=0 ; i<uLcdVSz ; i++)
			for(j=0 ; j<uLcdHSz ; j++)
			{
				R = (*((s32 *)uGlibStAddr + i*uLcdVSz + j) & 0xFF0000)>>16;
				G = (*((s32 *)uGlibStAddr + i*uLcdVSz + j) & 0x00FF00)>>8;
				B = (*((s32 *)uGlibStAddr + i*uLcdVSz + j) & 0x0000FF)>>0;
				YCbCr = CSCR2Y_C(R, G, B, 0);
				UART_Printf("YCbCr : 0x%08x\n", YCbCr);
			}
	}
#endif

	// From YUV To RGB
	UART_Printf("========   YUV -> RGB   =========\n");
	UART_Printf("Source Address : 0x%08x\n", uPostStAddr);
	UART_Printf("Destination Address : 0x%08x\n", uLcdStAddr);	
	POST_InitIpForDmaInDmaOut(	uLcdHSz, uLcdVSz, uPostStAddr, eMidDataFmt, 
									uLcdHSz, uLcdVSz, uLcdStAddr, eDstDataFmt,
									1, FALSE, ONE_SHOT, &oSc);
	POST_StartProcessing(&oSc);
	while (!POST_IsProcessingDone(&oSc));	

#if (POST_IMAGE_BMP_SLIDE)	
	{
		u32 uImageNum;
		UART_Printf("Input the any key to display the other image ('q' : quit)\n");
		uImageNum = 0;
		
		while(UART_Getc() != 'q')
		{
			ScalerT_GetImageFromBMP(uGlibStAddr, uLcdHSz, uLcdVSz, uImageNum, eSrcDataFmt);

			// RGB -> YUV
			POST_InitIpForDmaInDmaOut(	uLcdHSz, uLcdVSz, uGlibStAddr, eSrcDataFmt, 
											uLcdHSz, uLcdVSz, uPostStAddr, eMidDataFmt,
											1, FALSE, ONE_SHOT, &oSc);
			POST_StartProcessing(&oSc);
			while (!POST_IsProcessingDone(&oSc));	

			//SaveToFile(POST_YUV_FILE_NAME1, uLcdHSz*uLcdVSz*2, uPostStAddr);
			
			// YUV -> RGB
			POST_InitIpForDmaInDmaOut(	uLcdHSz, uLcdVSz, uPostStAddr, eMidDataFmt, 
											uLcdHSz, uLcdVSz, uLcdStAddr, eDstDataFmt,
											1, FALSE, ONE_SHOT, &oSc);
			POST_StartProcessing(&oSc);
			while (!POST_IsProcessingDone(&oSc));	
			uImageNum++;
		}
	}
#endif	

	UART_Printf("\n");
}


static void ScalerT_ComplexDmaToDma_R2Y2R(void)
{
	u32 uGlibStAddr, uPostStAddr;
	u32 uSrcBytesPerPixel, uDstBytesPerPixel;

	UART_Printf("[ScalerT_ComplexDmaToDma_R2Y2R]\n");

	uSimpleTest = 0;
	ScalerT_SetCscTypeDmaToDma_R2Y2R();
	
	ePostRunMode = ONE_SHOT;

	//LCD_InitLDI(MAIN);

#ifdef LCD_INIT_TEST	
	LCD_InitBase();
	LCD_Start();
	LCD_InitWin(eDstDataFmt, uImgHSz, uImgVSz, 0, 0, uImgHSz, uImgVSz, 0, 0, uLcdStAddr, WIN0, false);
#else
	LCD_InitDISPC(eDstDataFmt, uLcdStAddr, WIN0, false);
	LCD_Start();
#endif

	LCD_SetWinOnOff(1, WIN0);

	LCD_GetFrmSz(&uLcdHSz, &uLcdVSz, WIN0);

	uSrcBytesPerPixel = (eSrcDataFmt == RGB24) ? 4 : 2;
	uDstBytesPerPixel = (eDstDataFmt == RGB24) ? 4 : 2;

	uGlibStAddr = uLcdStAddr + uLcdHSz*uLcdVSz*uDstBytesPerPixel;
	uPostStAddr = uGlibStAddr + uImgHSz*uImgVSz*uSrcBytesPerPixel;

	GLIB_Init(uLcdStAddr, uLcdHSz, uLcdVSz, eDstDataFmt);
	GLIB_ClearFrame(C_BLACK);

#if (POST_IMAGE_SORCE == POST_IMAGE_PATTERN)
	GLIB_Init(uGlibStAddr, uImgHSz, uImgVSz, eSrcDataFmt);
	GLIB_DrawPattern(uImgHSz, uImgVSz);
#elif (POST_IMAGE_SORCE == POST_IMAGE_HEADER)
	ScalerT_GetImageFromHeader(uGlibStAddr, uImgHSz, uImgVSz, eSrcDataFmt);
#elif (POST_IMAGE_SORCE == POST_IMAGE_BMP)
	ScalerT_GetImageFromBMP(uGlibStAddr, uLcdHSz, uLcdVSz, 3, eSrcDataFmt);
#endif

	// From RGB To YUV
	UART_Printf("========   RGB -> YUV   =========\n");
	UART_Printf("Source Address : 0x%08x\n", uGlibStAddr);
	UART_Printf("Destination Address : 0x%08x\n", uPostStAddr);	
	POST_InitIp1(	uImgHSz, uImgVSz, uSrcStartX, uSrcStartY, uSrcCroppedHSz, uSrcCroppedVSz, uGlibStAddr, eSrcDataFmt,
					uMidImgHSz, uMidImgVSz, uMidStartX, uMidStartY, uMidScaledHSz, uMidScaledVSz, uPostStAddr, eMidDataFmt,
					1, false, ePostRunMode, POST_DMA, POST_DMA, &oSc);
	POST_StartProcessing(&oSc);
	while (!POST_IsProcessingDone(&oSc));
	
	// From YUV To RGB
	UART_Printf("========   YUV -> RGB   =========\n");
	UART_Printf("Source Address : 0x%08x\n", uPostStAddr);
	UART_Printf("Destination Address : 0x%08x\n", uLcdStAddr);		
	POST_InitIp1(	uMidImgHSz, uMidImgVSz, uMidStartX, uMidStartY, uMidScaledHSz, uMidScaledVSz, uPostStAddr, eMidDataFmt,
					uLcdHSz, uLcdVSz, uDstStartX, uDstStartY, uDstScaledHSz, uDstScaledVSz, uLcdStAddr, eDstDataFmt,
					1, false, ONE_SHOT, POST_DMA, POST_DMA, &oSc);
	POST_StartProcessing(&oSc);
	while (!POST_IsProcessingDone(&oSc));	
}


static void ScalerT_SimpleFreeRunDmaToDma_R2Y2R_Polling(void)
{
	u32 uGlibStAddr, uGlibStAddr2, uPostStAddr, uPostStAddr2;
	u32 uSrcBytesPerPixel, uDstBytesPerPixel;
	u32 uFrmCnt;

	UART_Printf("[ScalerT_SimpleFreeRunDmaToDma_R2Y2R_Polling]\n");

	uSimpleTest = 1;
	ScalerT_SetCscTypeDmaToDma_R2Y2R();
	
	bScalerIsPollingOrInt = TRUE;

	//LCD_InitLDI(MAIN);
#ifdef LCD_INIT_TEST	
	LCD_InitBase();
	LCD_Start();
	LCD_InitWin(eDstDataFmt, uImgHSz, uImgVSz, 0, 0, uImgHSz, uImgVSz, 0, 0, uLcdStAddr, WIN0, false);
#else
	LCD_InitDISPC(eDstDataFmt, uLcdStAddr, WIN0, false);
	LCD_Start();
#endif
	LCD_SetWinOnOff(1, WIN0);
	LCD_GetFrmSz(&uLcdHSz, &uLcdVSz, WIN0);

	uSrcBytesPerPixel = (eSrcDataFmt == RGB16) ? 2 : 4;
	uDstBytesPerPixel = (eDstDataFmt == RGB16) ? 2 : 4;

	uGlibStAddr = uLcdStAddr + uLcdHSz*uLcdVSz*uDstBytesPerPixel;
	uPostStAddr = uGlibStAddr + uLcdHSz*uLcdVSz*uSrcBytesPerPixel;

	uGlibStAddr2 = uPostStAddr + uLcdHSz*uLcdVSz*uDstBytesPerPixel;
	uPostStAddr2 = uGlibStAddr2 + uLcdHSz*uLcdVSz*uSrcBytesPerPixel;

	GLIB_Init(uGlibStAddr, uLcdHSz, uLcdVSz, eSrcDataFmt);
	GLIB_DrawPattern(uLcdHSz, uLcdVSz);

	GLIB_Init(uGlibStAddr2, uLcdHSz, uLcdVSz, eSrcDataFmt);
	GLIB_DrawPattern2(uLcdHSz, uLcdVSz);

	// From RGB to YUV for pattern 1
	POST_InitIpForDmaInDmaOut(uLcdHSz, uLcdVSz, uGlibStAddr, eSrcDataFmt, 
								uLcdHSz, uLcdVSz, uPostStAddr, eMidDataFmt,
								1, FALSE, ONE_SHOT, &oSc);
	POST_StartProcessing(&oSc);
	while (!POST_IsProcessingDone(&oSc));
	UART_Printf("CSC(RGB -> YUV) is finished for pattern 1\n");
	
	// From RGB to YUV for pattern 2
	POST_InitIpForDmaInDmaOut(uLcdHSz, uLcdVSz, uGlibStAddr2, eSrcDataFmt,
								uLcdHSz, uLcdVSz, uPostStAddr2, eMidDataFmt,
								1, FALSE, ONE_SHOT, &oSc);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -