📄 scaler_test.c
字号:
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 + -