📄 camera_test.c
字号:
CAMERA_InitDmaInPathToFifoOut(uLcdHsz, uLcdVsz, uWIN1FbEndAddr, eLcdBpp,
uLcdHsz, uLcdVsz, eLcdBpp, ROT_0, P_PATH);
uSrcCroppedHsz = uLcdHsz;
uSrcCroppedVsz = uLcdVsz;
uSrcHeight = uLcdVsz;
uSrcWidth = uLcdHsz ;
CAMERAT_DisplayParam();
CAMERA_StartDmaInPath();
printf("\nHit any key to stop the test!\n");
UART_Getc();
while(!bPreviewDone);
CAMERA_StopDmaInPath();
INTC_Disable(NUM_CAMIF_P);
//LCD Off
//LCD_SetAllWinOnOff(0);
LCD_SetWinOnOff(0, WIN1);
LCD_Stop();
printf("\nLCD OFF\n");
#else // Codec Path Test
// 0. Interrupt Setting : For MSDMA.....
//================================
INTC_Enable(NUM_CAMIF_C);
INTC_SetVectAddr(NUM_CAMIF_C, Isr_MSDMACodecDone);
bCodecDone = false;
// 1. Initialize lcd
//================================
LCD_InitDISPC(eLcdBpp, uLcdFbAddr, WIN2, false);
LCD_GetFrmSz(&uLcdHsz, &uLcdVsz, WIN2);
LCD_GetFbEndAddr(&uWIN1FbEndAddr, WIN2);
LCD_InitWinForFifoIn(IN_CIM, WIN2);
LCD_SetWinOnOff(1, WIN2);
LCD_Start();
// 2. Create the input picture
//=================================
printf("Dma input -> dma output in Codec_path\n");
GLIB_InitInstance(uWIN1FbEndAddr, uLcdHsz, uLcdVsz, eLcdBpp);
GLIB_DrawPattern(uLcdHsz, uLcdVsz);
// 3. Run the process of dma-input fifo-output path
//=======================================
eDstDataFmt = RGB24;
CAMERA_InitDmaInPathToFifoOut(uLcdHsz, uLcdVsz, uWIN1FbEndAddr, eLcdBpp,
uLcdHsz, uLcdVsz, eLcdBpp, ROT_0, C_PATH);
uSrcCroppedHsz = uLcdHsz;
uSrcCroppedVsz = uLcdVsz;
uSrcHeight = uLcdVsz;
uSrcWidth = uLcdHsz ;
CAMERAT_DisplayParam();
CAMERA_StartDmaInPath();
printf(" Hit any key to stop the test!\n");
UART_Getc();
while(!bCodecDone);
CAMERA_StopDmaInPath();
INTC_Disable(NUM_CAMIF_C);
//LCD Off
//LCD_SetAllWinOnOff(0);
LCD_SetWinOnOff(0, WIN2);
LCD_Stop();
printf("\nLCD OFF\n");
#endif
}
//////////
// Function Name : CAMERAT_TestDmaInPathToFifoOut_Complex
// Function Description :
// Preview path: win1, Codec path: win2
// Input : None
// Output : None
static void CAMERAT_TestDmaInPathToFifoOut_Complex(void)
{
u32 uLcdHsz, uLcdVsz;
u32 uSrcAddr;
u32 uSrcCropStartX, uSrcCropStartY;
LCD_WINDOW eWin;
u32 uLCDInputFormat;
// 0. Interrupt Setting
//================================
INTC_Enable(NUM_CAMIF_P);
INTC_SetVectAddr(NUM_CAMIF_P, Isr_MSDMAPreviewDone);
INTC_Enable(NUM_CAMIF_C);
INTC_SetVectAddr(NUM_CAMIF_C, Isr_MSDMACodecDone);
bCodecDone = false;
bPreviewDone = false;
// 1. Initialize lcd
//================================
eWin = (eProcessPath==P_PATH) ? WIN1: WIN2;
if ( eDstDataFmt == RGB16 || eDstDataFmt == RGB18 || eDstDataFmt == RGB24 )
{
uLCDInputFormat = LOCALIN_RGB ;
}
else
{
uLCDInputFormat = LOCALIN_YCbCr;
}
LCD_InitDISPC(eLcdBpp, uLcdFbAddr, eWin, false);
LCD_GetFrmSz(&uLcdHsz, &uLcdVsz, eWin);
// LCD_GetFbEndAddr(&uWIN1FbEndAddr, WIN1);
LCD_InitWinForFifoIn1(IN_CIM, eWin, (LOCAL_INPUT_COLORSPACE)uLCDInputFormat);
LCD_SetWinOnOff(1, eWin);
LCD_Start();
// 2. Create the input picture
//=================================
uSrcAddr = uLcdFbAddr+uLcdHsz*uLcdVsz*4;
GLIB_InitInstance(uLcdFbAddr, uLcdHsz, uLcdVsz, eLcdBpp);
GLIB_DrawPattern(uLcdHsz, uLcdVsz);
CAMERA_InitDmaInPath(uLcdHsz, uLcdVsz, uLcdFbAddr, eLcdBpp, uSrcWidth, uSrcHeight, uSrcAddr, eSrcDataFmt, FLIP_NO, ROT_0, P_PATH);
CAMERA_StartDmaInPath();
while(!CAMERA_IsProcessingDone());
CAMERA_StopDmaInPath();
// 3. Run the fimc's process of dma-input fifo-output path
//===================================
uSrcCropStartX = 0, uSrcCropStartY = 0;
eRotDeg = ROT_0;
CAMERA_InitDmaInPathToFifoOut0(uSrcWidth, uSrcHeight, uSrcCropStartX, uSrcCropStartY, uSrcCroppedHsz, uSrcCroppedVsz,
uSrcAddr, uSrcAddr,eSrcDataFmt, uLcdHsz, uLcdVsz, eDstDataFmt, eRotDeg, eProcessPath);
if (eImgEffect == ARBITRARY_CBCR)
{
CAMERA_SetImageEffect(eImgEffect);
CAMERA_SetArbitraryCbCr( uArbitraryCbValue, uArbitraryCrValue);
}
else
CAMERA_SetImageEffect(eImgEffect);
CAMERAT_DisplayParam();
CAMERA_StartDmaInPath();
printf("\nHit any key to stop the test!\n");
UART_Getc();
if ( eProcessPath == P_PATH)
{
while(!bPreviewDone);
}
else
{
while(!bCodecDone);
}
CAMERA_StopDmaInPath();
INTC_Disable(NUM_CAMIF_P);
INTC_Disable(NUM_CAMIF_C);
}
//////////
// Function Name : CAMERAT_TestDmaInPathToFifoOut_AllParams
// Function Description : MSDMA Inpath and FIFO Out Path Test : 5+ 4+ 4+ (9*9) = 94EA *2 = 108 EA
// Input : None
// Output : None
static void CAMERAT_TestDmaInPathToFifoOut_AllParams(void)
{
int nI;
int nSrcCropIdx;
int nImgEffectIdx;
int nArbitraryIdx;
int nSrcIdx;
int nDstIdx;
// 1. Set the case of the input parameters.
//================================
u32 uSrcCropSzList[5][2] = {{176, 112}, {120, 240}, {112, 160}, {192, 144}, {640, 480}};
IMAGE_EFFECT eImgEffectList[6] = {BYPASS, ARBITRARY_CBCR, NEGATIVE, ART_FREEZE, EMBOSSING, SILHOUETTE};
u32 uArbitraryCbCrList[5][2] = {{0, 0}, {128, 128}, {255, 255}, {0, 255}, {255, 0}};
CSPACE eSrcFmtArray[9] = {YCBYCR, YCRYCB, CBYCRY, CRYCBY, YC422, YC420, RGB16, RGB18, RGB24 };
CSPACE eDstFmtArray[9] = {YCBYCR, YCRYCB, CBYCRY, CRYCBY, YC422, YC420, RGB16, RGB18, RGB24 };
// 2. Change the case and test all the case
//=================================
eInputPath = DMA;
eOutputPath = FIFO;
uSrcWidth = 640;
uSrcHeight = 480;
for (nI=0; nI<2; nI++)
{
eSrcDataFmt = RGB16;
eDstDataFmt = RGB24;
eProcessPath = (nI==0) ? P_PATH : C_PATH;
eRotDeg = ROT_0;;
for (nSrcCropIdx=0; nSrcCropIdx<5; nSrcCropIdx++) // Scaler up,down, bypass = 5 EA (2*2 + 1)
{
uSrcCroppedHsz = uSrcCropSzList[nSrcCropIdx][0];
uSrcCroppedVsz = uSrcCropSzList[nSrcCropIdx][1];
printf("\nHit any key to test\n");
UART_Getc();
CAMERAT_TestDmaInPathToFifoOut_Complex();
}
for (nImgEffectIdx=2; nImgEffectIdx<6; nImgEffectIdx++) // Image effect = 4 EA
{
eImgEffect = eImgEffectList[nImgEffectIdx];
printf("\nHit any key to test\n");
Getc();
CAMERAT_TestDmaInPathToFifoOut_Complex();
}
eImgEffect = ARBITRARY_CBCR;
for (nArbitraryIdx=0; nArbitraryIdx<5; nArbitraryIdx++) // Arbitrary Cb,Cr = 5 EA
{
uArbitraryCbValue = uArbitraryCbCrList[nArbitraryIdx][0];
uArbitraryCrValue = uArbitraryCbCrList[nArbitraryIdx][1];
printf("\nHit any key to test\n");
Getc();
CAMERAT_TestDmaInPathToFifoOut_Complex();
}
eImgEffect = BYPASS;
for ( nDstIdx=0; nDstIdx<9; nDstIdx++)
{
eDstDataFmt = eDstFmtArray[nDstIdx];
for (nSrcIdx=0; nSrcIdx<9; nSrcIdx++)
{
eSrcDataFmt = eSrcFmtArray[nSrcIdx];
printf("\n Destinaltion Format = %d\n", eDstDataFmt);
printf("Hit any key to test\n");
UART_Getc();
CAMERAT_TestDmaInPathToFifoOut_Complex();
}
}
}
}
//////////
// Function Name : CAMERAT_TestScalerMaxSize
// Function Description : Max Scaler Size Test in Preview / Codec Path
// Input : None
// Output : None
static void CAMERAT_TestScalerMaxSize(void)
{
u32 uLcdHsz, uLcdVsz;
u32 uWIN0FbEndAddr;
u32 uSrcAddr;
u32 uDstHsz, uDstVsz;
u32 uDisplayStartX, uDisplayStartY;
u32 uSrcCropStartX, uSrcCropStartY;
// u32 uCodecBufAddr;
// 1. Initialize interrupt
//==============================
INTC_Enable(NUM_CAMIF_P);
INTC_Enable(NUM_CAMIF_C);
INTC_SetVectAddr(NUM_CAMIF_P, Isr_MSDMAPreviewDone);
INTC_SetVectAddr(NUM_CAMIF_C, Isr_MSDMACodecDone);
bPreviewDone = false;
bCodecDone = false;
eProcessPath = P_PATH;
eLcdBpp = RGB24;
// 2. Initialize lcd
//================================
LCD_InitDISPC(eLcdBpp, uLcdFbAddr, WIN0, false);
LCD_GetFrmSz(&uLcdHsz, &uLcdVsz, WIN0);
LCD_GetFbEndAddr(&uWIN0FbEndAddr, WIN0);
LCD_SetWinOnOff(1, WIN0);
LCD_Start();
// 3. Create the input picture
//=================================
#if 1 // Codec Path Confirm
uSrcAddr = uWIN0FbEndAddr+3200*2400*4;
GLIB_InitInstance(uWIN0FbEndAddr, 3200, 2400, eLcdBpp);
GLIB_DrawPattern(3200, 2400);
CAMERA_InitDmaInPath(3200, 2400, uWIN0FbEndAddr, eLcdBpp,
1600, 1200, uSrcAddr, eLcdBpp, FLIP_NO, ROT_0, C_PATH);
CAMERA_StartDmaInPath();
while(!bCodecDone);
bCodecDone = false;
CAMERA_StopDmaInPath();
#else // Preview Path Confirm
uSrcAddr = uWIN0FbEndAddr+1280*960*4;
GLIB_InitInstance(uWIN0FbEndAddr, 1280, 960, eLcdBpp);
GLIB_DrawPattern(1280, 960);
CAMERA_InitDmaInPath(1280, 960, uWIN0FbEndAddr, eLcdBpp,
640, 480, uSrcAddr, eLcdBpp, FLIP_NO, ROT_0, P_PATH);
CAMERA_StartDmaInPath();
while(!bPreviewDone);
bPreviewDone = false;
CAMERA_StopDmaInPath();
#endif
// 4. Run the process of dma-input path
//=============================
eDstDataFmt = eLcdBpp;
// uCodecBufAddr = uSrcAddr+uSrcWidth*uSrcHeight*4;
uDstHsz = 320, uDstVsz = 240;
uDisplayStartX = 0, uDisplayStartY = 0;
uSrcCropStartX = 0, uSrcCropStartY = 0;
eRotDeg = ROT_0;
#if 1 // Codec Path Confirm
CAMERA_InitDmaInPath0(1600, 1200, uSrcCropStartX, uSrcCropStartY, 1600, 1200, uSrcAddr, uSrcAddr,eLcdBpp,
uLcdHsz, uLcdVsz, uDisplayStartX, uDisplayStartY, uDstHsz, uDstVsz, uLcdFbAddr,uLcdFbAddr, eLcdBpp, FLIP_NO, ROT_0, eProcessPath);
#else // Preview Path Confirm
CAMERA_InitDmaInPath0(640, 480, uSrcCropStartX, uSrcCropStartY, 640, 480, uSrcAddr, uSrcAddr,eLcdBpp,
uLcdHsz, uLcdVsz, uDisplayStartX, uDisplayStartY, uDstHsz, uDstVsz, uLcdFbAddr,uLcdFbAddr, eLcdBpp, FLIP_NO, ROT_0, eProcessPath);
#endif
CAMERAT_DisplayParam();
CAMERA_StartDmaInPath();
if (eProcessPath==P_PATH)
while(!bPreviewDone);
else
while(!bCodecDone);
CAMERA_StopDmaInPath();
INTC_Disable(NUM_CAMIF_C);
INTC_Disable(NUM_CAMIF_P);
}
//////////
// Function Name : CAMERAT_TestBypass_Preview
// Function Description : Bypass Scaler mode Test In Preview Path
// Input : None
// Output : None
static void CAMERAT_TestBypass_Preview(void)
{
u32 uLcdHsz, uLcdVsz;
u32 uWIN0FbEndAddr;
u32 uDstHsz, uDstVsz;
u32 uDisplayStartX, uDisplayStartY;
u32 uSrcCropStartX, uSrcCropStartY;
bPreviewDone = false;
bCodecDone = false;
eProcessPath = P_PATH;
eLcdBpp = RGB24;
// 1. Initialize interrupt
//==============================
INTC_Enable(NUM_CAMIF_P);
INTC_Enable(NUM_CAMIF_C);
INTC_SetVectAddr(NUM_CAMIF_P, Isr_PreviewDone);
INTC_SetVectAddr(NUM_CAMIF_C, Isr_MSDMACodecDone);
// 2. Initialize lcd
//================================
LCD_InitDISPC(eLcdBpp, uLcdFbAddr, WIN0, false);
LCD_GetFrmSz(&uLcdHsz, &uLcdVsz, WIN0);
LCD_GetFbEndAddr(&uWIN0FbEndAddr, WIN0);
LCD_SetWinOnOff(1, WIN0);
LCD_Start();
// 3. Preview Path Bypass
//=================================
CAMERA_InitSensor();
CAMERA_InitPreviewPath0(0, 0, 800,600, 800, 600, 0, 0, 800, 600, uWIN0FbEndAddr, uWIN0FbEndAddr, YCRYCB, FLIP_NO, ROT_0);
CAMERA_StartPreviewPath();
printf("\nIf You want Capture. press Any key\n");
UART_Getc();
while(!bPreviewDone);
CAMERA_StopPreviewPath();
bPreviewDone = false;
// 4. Run the process of dma-input path
//=============================
eDstDataFmt = eLcdBpp;
uDstHsz = 320, uDstVsz = 240;
uDisplayStartX = 0, uDisplayStartY = 0;
uSrcCropStartX = 0, uSrcCropStartY = 0;
eRotDeg = ROT_0;
CAMERA_ResetIp(); //jungil0214
CAMERA_InitDmaInPath0(800, 600, uSrcCropStartX, uSrcCropStartY, 800, 600, uWIN0FbEndAddr, uWIN0FbEndAddr,YCRYCB,
uLcdHsz, uLcdVsz, uDisplayStartX, uDisplayStartY, uDstHsz, uDstVsz, uLcdFbAddr,uLcdFbAddr, eLcdBpp, FLIP_NO, ROT_0, C_PATH);
CAMERAT_DisplayParam();
CAMERA_StartDmaInPath();
printf("\nCheck Image\n");
UART_Getc();
while(!bCodecDone);
CAMERA_StopDmaInPath();
INTC_Disable(NUM_CAMIF_C);
INTC_Disable(NUM_CAMIF_P);
}
//////////
// Function Name : CAMERAT_TestBypass_Codec
// Function Description : Scaler Bypass Mode Test In Codec Path
// Input : None
// Output : None
static void CAMERAT_TestBypass_Codec(void)
{
u32 uLcdHsz, uLcdVsz;
u32 uWIN0FbEndAddr;
u32 uDstHsz, uDstVsz;
u32 uDisplayStartX, uDisplayStartY;
u32 uSrcCropStartX, uSrcCropStartY;
bPreviewDone = false;
bCodecDone = false;
eProcessPath = C_PATH;
eLcdBpp = RGB24;
// 1. Initialize interrupt
//==============================
INTC_Enable(NUM_CAMIF_P);
INTC_Enable(NUM_CAMIF_C);
INTC_SetVectAddr(NUM_CAMIF_P, Isr_MSDMAPreviewDone);
INTC_SetVectAddr(NUM_CAMIF_C, Isr_CodecDone);
// 2. Initialize lcd
//================================
LCD_InitDISPC(eLcdBpp, uLcdFbAddr, WIN0, false);
LCD_GetFrmSz(&uLcdHsz, &uLcdVsz, WIN0);
LCD_GetFbEndAddr(&uWIN0FbEndAddr, WIN0);
LCD_SetWinOnOff(1, WIN0);
LCD_Start();
// 3. Preview Path Bypass
//=================================
CAMERA_InitSensor();
CAMERA_InitCodecPath0(0, 0, 800,600, 800, 600, 0, 0, 800, 600, uWIN0FbEndAddr, uWIN0FbEndAddr, YCRYCB, FLIP_NO, ROT_0);
CAMERA_StartCodecPath(0);
printf("\nIf You want Capture. press Any key\n");
UART_Getc();
while(!bCodecDone);
CAMERA_StopCodecPath();
bCodecDone = false;
// 4. Run the process of dma-input path
//=============================
eDstDataFmt = eLcdBpp;
uDstHsz = 320, uDstVsz = 240;
uDisplayStartX = 0, uDisplayStartY = 0;
uSrcCropStartX = 0, uSrcCropStartY = 0;
eRotDeg = ROT_0;
CAMERA_ResetIp(); //jungil0214
CAMERA_InitDmaInPath0(800, 600, uSrcCropStartX, uSrcCropStartY, 800, 600, uWIN0FbEndAddr, uWIN0FbEndAddr,YCRYCB,
uLcdHsz, uLcdVsz, uDisplayStartX, uDisplayStartY, uDstHsz, uDstVsz, uLcdFbAddr,uLcdFbAddr, eLcdBpp, FLIP_NO, ROT_0, P_PATH);
CAMERAT_Displa
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -