?? scaler_test.c
字號:
if (uPostFrameCount % 2)
POST_SetNextFrameStAddr(uNxtAddr2, uLcdStAddr, &oSc);
else
POST_SetNextFrameStAddr(uNxtAddr1, uLcdStAddr, &oSc);
if (uPostFrameCount == uMaxFrameCnt)
{
POST_StopProcessingOfFreeRun(&oSc);
while (!POST_IsProcessingDone(&oSc));
uScalerIntOccured = FALSE;
break;
}
uPostIsrCount = 0;
}
uScalerIntOccured = FALSE;
}
}
POST_DisableInterrupt(&oSc);
POST_ClearPending(&oSc);
//INTC_Mask(INT_POST);
INTC_Disable(NUM_SCALER);
}
void ScalerT_ScaleUpDown_RGB(void)
{
u32 uGlibStAddr, uGlibStAddr1;
u32 uBytesPerPixel;
u32 uScaleOffsetX, uScaleOffsetY;
u8 uScale;
u32 uHOffset, uVOffset, uPreHOffset, uPreVOffset, uHRatio, uVRatio;
s32 nSelDmaCscType_R2R;
UART_Printf("[ScalerT_ScaleUpDown_RGB]\n");
while(1)
{
UART_Printf("\n");
UART_Printf("[1] RGB16\n");
UART_Printf("[2] RGB24\n");
UART_Printf("\n");
UART_Printf(">>Select The Source Image Type: ");
nSelDmaCscType_R2R = UART_GetIntNum();
if (nSelDmaCscType_R2R == 1 || nSelDmaCscType_R2R == 2 )
{
eSrcDataFmt = (nSelDmaCscType_R2R == 1) ? RGB16 : RGB24;
eDstDataFmt = (nSelDmaCscType_R2R == 2) ? RGB16 : RGB24;
break;
}
else
UART_Printf("Invalid Input! Retry It!!\n");
}
ePostRunMode = ONE_SHOT;
//LCD_InitLDI(MAIN);
LCD_InitDISPC(eSrcDataFmt, uLcdStAddr, WIN0, false);
LCD_Start();
LCD_SetWinOnOff(1, WIN0);
LCD_GetFrmSz(&uLcdHSz, &uLcdVSz, WIN0);
uImgHSz = uLcdHSz;
uImgVSz = uLcdVSz;
uSrcStartX = 0;
uSrcStartY = 0;
uSrcCroppedHSz = uLcdHSz;
uSrcCroppedVSz = uLcdVSz;
uMidImgHSz = 2048;
uMidImgVSz = 2048;
uMidStartX = 0;
uMidStartY = 0;
uMidScaledHSz = 2048;
uMidScaledVSz = 2048;
uDstStartX = 0;
uDstStartY = 0;
uDstScaledHSz = uLcdHSz,
uDstScaledVSz = uLcdVSz;
// To Clear the LCD Display
GLIB_Init(uLcdStAddr, uLcdHSz, uLcdVSz, eSrcDataFmt);
GLIB_ClearFrame(C_BLACK);
uBytesPerPixel = (eSrcDataFmt == RGB16) ? 2: 4;
uGlibStAddr = uLcdStAddr + uLcdHSz*uLcdVSz*uBytesPerPixel;
uGlibStAddr1 = uGlibStAddr + uMidImgHSz*uMidImgVSz*uBytesPerPixel;
//uSrcStAddr=0;
// CSC & Scaling the DrawPattern 1
//GLIB_Init(uGlibStAddr, uImgHSz, uImgVSz, eSrcDataFmt);
//GLIB_DrawPattern(uImgHSz, uImgVSz);
ScalerT_GetImageFromBMP(uGlibStAddr, uLcdHSz, uLcdVSz, 11, eSrcDataFmt);
uScaleOffsetX = uMidImgHSz/2;
uScaleOffsetY = uMidImgVSz/2;
// generation mid image
POST_InitIp1( uImgHSz, uImgVSz, uSrcStartX, uSrcStartY, uSrcCroppedHSz, uSrcCroppedVSz, uGlibStAddr, eSrcDataFmt,
uMidImgHSz, uMidImgVSz, uMidStartX, uMidStartY, uMidScaledHSz, uMidScaledVSz, uGlibStAddr1, eSrcDataFmt,
1, false, ePostRunMode, POST_DMA, POST_DMA, &oSc);
POST_StartProcessing1(0, 0, &oSc);
while (!POST_IsProcessingDone(&oSc));
// default display image
POST_InitIp1( uMidImgHSz, uMidImgVSz, uMidStartX, uMidStartY, uMidScaledHSz-uScaleOffsetX, uMidScaledVSz-uScaleOffsetY, uGlibStAddr1, eSrcDataFmt,
uLcdHSz, uLcdVSz, uDstStartX, uDstStartY, uDstScaledHSz, uDstScaledVSz, uLcdStAddr, eSrcDataFmt,
1, false, ePostRunMode, POST_DMA, POST_DMA, &oSc);
POST_StartProcessing1(0, 0, &oSc);
while (!POST_IsProcessingDone(&oSc));
UART_Printf("=============================================\n");
UART_Printf("'w' : Vertical Scale-up, 'x' : Vertical Scale-down\n");
UART_Printf("'d' : Horizontal Scale-up, 'a' : Horizontal Scale-down\n");
UART_Printf("=============================================\n");
UART_Printf("Press 'q' key to exit\n");
//RGB24 -> Width : multiple of 1, RGB16 -> Width : multiple of 2
while((uScale=UART_Getc()) != 'q')
{
switch (uScale)
{
//Vetical Scale Up
case 'w' :
case 'W' : POST_CalcurateScaleOffset( uMidScaledHSz-uScaleOffsetX-uPreHOffset, uMidScaledVSz-uScaleOffsetY-uPreVOffset, uDstScaledHSz, uDstScaledVSz, &oSc,
&uHOffset, &uVOffset, &uHRatio, &uVRatio, eSrcDataFmt);
if(uPreVOffset == uVOffset)
{
if(uScaleOffsetY < (uMidImgVSz-uPreVOffset))
uScaleOffsetY += uPreVOffset;
}
else
{
if(uScaleOffsetY < (uMidImgVSz-uVOffset))
uScaleOffsetY += uVOffset - (uScaleOffsetY%(uVOffset));
uPreVOffset = uVOffset;
}
break;
//Vetical Scale Down
case 'x' :
case 'X' : POST_CalcurateScaleOffset( uMidScaledHSz-uScaleOffsetX+uPreHOffset, uMidScaledVSz-uScaleOffsetY+uPreVOffset, uDstScaledHSz, uDstScaledVSz, &oSc,
&uHOffset, &uVOffset, &uHRatio, &uVRatio, eSrcDataFmt);
if(uPreVOffset == uVOffset)
{
if(uScaleOffsetY >= uPreVOffset)
uScaleOffsetY -= uPreVOffset;
}
else
{
if(uScaleOffsetY >= uVOffset)
uScaleOffsetY -= uVOffset - (uScaleOffsetY%(uVOffset));
uPreVOffset = uVOffset;
}
break;
//Horizontal Scale Up
case 'd' :
case 'D' : POST_CalcurateScaleOffset( uMidScaledHSz-uScaleOffsetX-uPreHOffset, uMidScaledVSz-uScaleOffsetY-uPreVOffset, uDstScaledHSz, uDstScaledVSz, &oSc,
&uHOffset, &uVOffset, &uHRatio, &uVRatio, eSrcDataFmt);
if(uPreHOffset == uHOffset)
{
if(uScaleOffsetX < (uMidImgHSz-uPreHOffset))
uScaleOffsetX += uPreHOffset;
}
else
{
if(uScaleOffsetX < (uMidImgHSz-uHOffset))
uScaleOffsetX += uHOffset - (uScaleOffsetX%(uHOffset));
uPreHOffset = uHOffset;
}
break;
//Horizontal Scale Down
case 'a' :
case 'A' : POST_CalcurateScaleOffset( uMidScaledHSz-uScaleOffsetX+uPreHOffset, uMidScaledVSz-uScaleOffsetY+uPreVOffset, uDstScaledHSz, uDstScaledVSz, &oSc,
&uHOffset, &uVOffset, &uHRatio, &uVRatio, eSrcDataFmt);
if(uPreHOffset == uHOffset)
{
if(uScaleOffsetX >= uPreHOffset)
uScaleOffsetX -= uPreHOffset;
}
else
{
if(uScaleOffsetX >= uHOffset)
uScaleOffsetX -= uHOffset - (uScaleOffsetX%(uHOffset));
uPreHOffset = uHOffset;
}
default : break;
}
UART_Printf("(%d*%d) -> (%d*%d)\n",uMidScaledHSz-uScaleOffsetX, uMidScaledVSz-uScaleOffsetY, uDstScaledHSz, uDstScaledVSz);
POST_InitIp1( uMidImgHSz, uMidImgVSz, uMidStartX, uMidStartY, uMidScaledHSz-uScaleOffsetX, uMidScaledVSz-uScaleOffsetY, uGlibStAddr1, eSrcDataFmt,
uLcdHSz, uLcdVSz, uDstStartX, uDstStartY, uDstScaledHSz, uDstScaledVSz, uLcdStAddr, eSrcDataFmt,
1, false, ePostRunMode, POST_DMA, POST_DMA, &oSc);
POST_StartProcessing1(0, 0, &oSc);
while (!POST_IsProcessingDone(&oSc));
}
}
const testFuncMenu scaler_r2r_menu[] =
{
ScalerT_SimpleDmaToDma_R2R, "Simple DMA CSC Test From RGB To RGB",
ScalerT_ComplexIDmaToDma_R2R, "Complex DMA CSC Test From RGB To RGB",
ScalerT_SimpleFreeRunDmaToDma_R2R_Polling, "Simple FreeRun And CSC Test From RGB To RGB By Using Polling",
ScalerT_SimpleFreeRunDmaToDma_R2R_Int, "Simple FreeRun And CSC Test From RGB To RGB By Using Interrupt",
ScalerT_ComplexFreeRunDmaToDma_R2R_Polling, "Complex FreeRun And CSC Test From RGB To RGB By Using Polling",
ScalerT_ComplexFreeRunDmaToDma_R2R_Int, "Complex FreeRun And CSC Test From RGB To RGB By Using Interrupt",
ScalerT_ScaleUpDown_RGB, "Scale Up/Down RGB",
0, 0
};
static void ScalerT_ConvertRGBToRGB(void)
{
u32 i;
s32 uSel;
UART_Printf("[ScalerT_ConvertRGBToRGB]\n");
while(1)
{
UART_Printf("\n");
for (i=0; (int)(scaler_r2r_menu[i].desc)!=0; i++)
{
UART_Printf("%2d: %s\n", i, scaler_r2r_menu[i].desc);
}
UART_Printf("\n");
UART_Printf("Select The Function To Test: ");
uSel = UART_GetIntNum();
UART_Printf("\n");
if (uSel == -1)
break;
if (uSel>=0 && uSel<(sizeof(scaler_r2r_menu)/8-1))
(scaler_r2r_menu[uSel].func)();
}
}
////////////////////////////////////////////////////////////////////////////
////////////////// RGB to YUV to RGB ///////////////////
////////////////////////////////////////////////////////////////////////////
static void ScalerT_SetCscTypeDmaToDma_R2Y2R(void)
{
int nSelDmaCscType_R2Y2R;
while(1)
{
UART_Printf("\n");
UART_Printf(" [1] RGB16 -> YCbYCr422_Intlv And YCbYCr422_Intlv -> RGB16\n");
UART_Printf(" [2] RGB16 -> YCrYCb422_Intlv And YCrYCb422_Intlv -> RGB16\n");
UART_Printf(" [3] RGB16 -> CbYCrY422_Intlv And CbYCrY422_Intlv -> RGB16\n");
UART_Printf(" [4] RGB16 -> CrYCbY422_Intlv And CrYCbY422_Intlv -> RGB16\n");
UART_Printf(" [5] RGB16 -> YC420 And YC420 -> RGB16\n");
UART_Printf("\n");
UART_Printf(" [6] RGB24 -> YCbYCr422_Intlv And YCbYCr422_Intlv -> RGB24\n");
UART_Printf(" [7] RGB24 -> YCrYCb422_Intlv And YCrYCb422_Intlv -> RGB24\n");
UART_Printf(" [8] RGB24 -> CbYCrY422_Intlv And CbYCrY422_Intlv -> RGB24\n");
UART_Printf(" [9] RGB24 -> CrYCbY422_Intlv And CrYCbY422_Intlv -> RGB24\n");
UART_Printf("[10] RGB24 -> YC420 And YC420 -> RGB24\n");
UART_Printf("\n");
UART_Printf("[11] RGB16 -> YCbYCr422_Intlv And YCbYCr422_Intlv -> RGB24\n");
UART_Printf("[12] RGB16 -> YCrYCb422_Intlv And YCrYCb422_Intlv -> RGB24\n");
UART_Printf("[13] RGB16 -> CbYCrY422_Intlv And CbYCrY422_Intlv -> RGB24\n");
UART_Printf("[14] RGB16 -> CrYCbY422_Intlv And CrYCbY422_Intlv -> RGB24\n");
UART_Printf("[15] RGB16 -> YC420 And YC420 -> RGB24\n");
UART_Printf("\n");
UART_Printf("[16] RGB24 -> YCbYCr422_Intlv And YCbYCr422_Intlv -> RGB16\n");
UART_Printf("[17] RGB24 -> YCrYCb422_Intlv And YCrYCb422_Intlv -> RGB16\n");
UART_Printf("[18] RGB24 -> CbYCrY422_Intlv And CbYCrY422_Intlv -> RGB16\n");
UART_Printf("[19] RGB24 -> CrYCbY422_Intlv And CrYCbY422_Intlv -> RGB16\n");
UART_Printf("[20] RGB24 -> YC420 And YC420 -> RGB16\n");
UART_Printf("\n");
UART_Printf(">> Select The Color Space Conversion Type: ");
nSelDmaCscType_R2Y2R = UART_GetIntNum();
// if( nSelDmaCscType_R2Y2R == 1 || nSelDmaCscType_R2Y2R == 2 || nSelDmaCscType_R2Y2R == 3 || nSelDmaCscType_R2Y2R == 4 ||
// nSelDmaCscType_R2Y2R == 5 || nSelDmaCscType_R2Y2R == 6 || nSelDmaCscType_R2Y2R == 7 || nSelDmaCscType_R2Y2R == 8 ||
// nSelDmaCscType_R2Y2R == 9 || nSelDmaCscType_R2Y2R == 10 || nSelDmaCscType_R2Y2R == 11 || nSelDmaCscType_R2Y2R == 12 ||
// nSelDmaCscType_R2Y2R == 13 || nSelDmaCscType_R2Y2R == 14 || nSelDmaCscType_R2Y2R == 15 || nSelDmaCscType_R2Y2R == 16 ||
// nSelDmaCscType_R2Y2R == 17 || nSelDmaCscType_R2Y2R == 18 || nSelDmaCscType_R2Y2R == 19 || nSelDmaCscType_R2Y2R == 20)
if( (nSelDmaCscType_R2Y2R >= 1) && (nSelDmaCscType_R2Y2R <=20) )
{
eSrcDataFmt =
(nSelDmaCscType_R2Y2R == 1 || nSelDmaCscType_R2Y2R == 2 || nSelDmaCscType_R2Y2R == 3 ||
nSelDmaCscType_R2Y2R == 4 || nSelDmaCscType_R2Y2R == 5 || nSelDmaCscType_R2Y2R == 11 ||
nSelDmaCscType_R2Y2R == 12 || nSelDmaCscType_R2Y2R == 13 || nSelDmaCscType_R2Y2R == 14 ||
nSelDmaCscType_R2Y2R == 15) ? RGB16 : RGB24;
eMidDataFmt =
(nSelDmaCscType_R2Y2R == 1 || nSelDmaCscType_R2Y2R == 6 ||
nSelDmaCscType_R2Y2R == 11 || nSelDmaCscType_R2Y2R == 16 ) ? YCBYCR :
(nSelDmaCscType_R2Y2R == 2 || nSelDmaCscType_R2Y2R == 7 ||
nSelDmaCscType_R2Y2R == 12 || nSelDmaCscType_R2Y2R == 17 ) ? YCRYCB :
(nSelDmaCscType_R2Y2R == 3 || nSelDmaCscType_R2Y2R == 8 ||
nSelDmaCscType_R2Y2R == 13 || nSelDmaCscType_R2Y2R == 18 ) ? CBYCRY :
(nSelDmaCscType_R2Y2R == 4 || nSelDmaCscType_R2Y2R == 9 ||
nSelDmaCscType_R2Y2R == 14 || nSelDmaCscType_R2Y2R == 19 ) ? CRYCBY : YC420;
eDstDataFmt =
(nSelDmaCscType_R2Y2R == 1 || nSelDmaCscType_R2Y2R == 2 || nSelDmaCscType_R2Y2R == 3 ||
nSelDmaCscType_R2Y2R == 4 || nSelDmaCscType_R2Y2R == 5 || nSelDmaCscType_R2Y2R == 16 ||
nSelDmaCscType_R2Y2R == 17 || nSelDmaCscType_R2Y2R == 18 || nSelDmaCscType_R2Y2R == 19 ||
nSelDmaCscType_R2Y2R == 20) ? RGB16 : RGB24;
break;
}
else
UART_Printf("Invalid Input! Retry It!!\n");
}
if (eSrcDataFmt == RGB16 && eMidDataFmt == YCBYCR && eDstDataFmt == RGB16)
{
uImgHSz = 240, uImgVSz = 320, uSrcStartX = 20, uSrcStartY = 20;
uSrcCroppedHSz = 160, uSrcCroppedVSz = 240;
uMidImgHSz = 240, uMidImgVSz = 320, uMidStartX = 60, uMidStartY = 40;
uMidScaledHSz = 120, uMidScaledVSz = 120;
uDstStartX = 120, uDstStartY = 100, uDstScaledHSz = 104, uDstScaledVSz = 140;
}
else if (eSrcDataFmt == RGB16 && eMidDataFmt == YCRYCB && eDstDataFmt == RGB16)
{
uImgHSz = 120, uImgVSz = 160, uSrcStartX = 0, uSrcStartY = 40;
uSrcCroppedHSz = 120, uSrcCroppedVSz = 100;
uMidImgHSz = 240, uMidImgVSz = 320, uMidStartX = 0, uMidStartY = 40;
uMidScaledHSz = 120, uMidScaledVSz = 120;
uDstStartX = 0, uDstStartY = 50, uDstScaledHSz = 120, uDstScaledVSz = 110;//160;
}
else if (eSrcDataFmt == RGB16 && eMidDataFmt == CBYCRY && eDstDataFmt == RGB16)
{
uImgHSz = 360, uImgVSz = 480, uSrcStartX = 80, uSrcStartY = 120;
uSrcCroppedHSz = 104, uSrcCroppedVSz = 100;
uMidImgHSz = 240, uMidImgVSz = 320, uMidStartX = 20, uMidStartY = 40;
uMidScaledHSz = 160, uMidScaledVSz = 120;
uDstStartX = 120, uDstStartY = 80, uDstScaledHSz = 80, uDstScaledVSz = 160;
}
else if (eSrcDataFmt == RGB16 && eMidDataFmt == CRYCBY && eDstDataFmt == RGB16)
{
uImgHSz = 240, uImgVSz = 320, uSrcStartX = 0, uSrcStartY = 20;
uSrcCroppedHSz = 160, uSrcCroppedVSz = 200;
uMidImgHSz = 120, uMidImgVSz = 160 ,uMidStartX = 10, uMidStartY = 30;
uMidScaledHSz = 80, uMidScaledVSz = 100;
uDstStartX = 50, uDstStartY = 60, uDstScaledHSz = 176 ,uDstScaledVSz = 180;
}
else if (eSrcDataFmt == RGB16 && eMidDataFmt == YC420 && eDstDataFmt == RGB16)
{
uImgHSz = 240, uImgVSz = 320, uSrcStartX = 20, uSrcStartY = 20;
uSrcCroppedHSz = 160, uSrcCroppedVSz = 200;
uMidImgHSz = 120, uMidImgVSz = 160, uMidStartX = 0, uMidStartY = 30;
uMidScaledHSz = 48, uMidScaledVSz = 100;
uDstStartX = 50, uDstStartY = 40, uDstScaledHSz = 160, uDstScaledVSz = 200;
}
else if (eSrcDataFmt == RGB24 && eMidDataFmt == YCBYCR && eDstDataFmt == RGB24)
{
uImgHSz = 240, uImgVSz = 320, uSrcStartX = 20, uSrcStartY = 10;
uSrcCroppedHSz = 128, uSrcCroppedVSz = 128;
uMidImgHSz = 360, uMidImgVSz = 480, uMidStartX = 60, uMidStartY = 40;
uMidScaledHSz = 240, uMidScaledVSz = 240;
uDstStartX = 20, uDstStartY = 80, uDstScaledHSz = 160, uDstScaledVSz = 160;
}
else if (eSrcDataFmt == RGB24 && eMidDataFmt == YCRYCB&& eDstDataFmt == RGB24)
{
uImgHSz = 120, uImgVSz = 160, uSrcStartX = 20, uSrcStartY = 10;
uSrcCroppedHSz = 80, uSrcCroppedVSz = 120;
uMidImgHSz = 240, uMidImgVSz = 320, uMidStartX = 120, uMidStartY = 120;
uMidScaledHSz = 80, uMidScaledVSz = 160;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -