📄 camera_test.c
字号:
//================================================
printf("\nHow many pictures ? : ");
uCapNum = GetIntNum();
// 3. Initialize camera and run the process of codec path
//===================================
uBufCnt = 0;
CAMERA_InitSensor();
CAMERA_InitCodecPath(uLcdHsz, uLcdVsz, uLcdFbAddr, eLcdBpp, FLIP_NO, ROT_0);
printf("\nCapture count = %d. \n", uCapNum);
CAMERA_StartCodecPath(uCapNum);
if (uCapNum==0)
{
printf("Hit any key to capture it!\n");
while(!bCodecDone);
bCodecDone = false;
while(GetKey() == 0);
CAMERA_StopCodecPath();
}
else
{
while(1)
{
while(!bCodecDone);
bCodecDone = false;
uBufCnt++;
if (uBufCnt==uCapNum)
break;
}
CAMERA_StopCodecPath();
}
INTC_Disable(NUM_CAMIF_C);
#if 0
// LCD Off
LCD_SetAllWinOnOff(0);
LCD_Stop();
printf("\nLCD OFF\n");
#endif
}
//////////
// Function Name : CAMERAT_TestMultiCaptureOfPreviewPath
// Function Description : Capture Count Function Test(Preview Path)
// Input : None
// Output : None
static void CAMERAT_TestMultiCaptureOfPreviewPath(void)
{
u32 uLcdHsz, uLcdVsz;
u32 uCapNum;
u32 uBufCnt;
// 0. Interrupt Setting
//=====================================
INTC_Enable(NUM_CAMIF_P);
INTC_SetVectAddr(NUM_CAMIF_P, Isr_PreviewDone);
bPreviewDone = false;
// 1. Initialize lcd
//=====================================
LCD_InitDISPC(eLcdBpp, uLcdFbAddr, WIN0, false);
LCD_GetFrmSz(&uLcdHsz, &uLcdVsz, WIN0);
LCD_SetWinOnOff(1, WIN0);
LCD_Start();
// 2. Set the process mode(interrupt or polling mode) and captured pic number
//================================================
printf("\nHow many pictures ? : ");
uCapNum = GetIntNum();
// 3. Initialize camera and run the process of codec path
//===================================
uBufCnt = 0;
CAMERA_InitSensor();
CAMERA_InitPreviewPath(uLcdHsz, uLcdVsz, uLcdFbAddr, eLcdBpp, FLIP_NO, ROT_0);
printf("\nCapture count = %d. \n", uCapNum);
CAMERA_StartPreviewPathCPT(uCapNum);
if (uCapNum==0)
{
printf("Hit any key to capture it!\n");
while(!bPreviewDone);
bPreviewDone = false;
while(GetKey() == 0);
CAMERA_StopPreviewPath();
}
else
{
while(1)
{
while(!bPreviewDone);
bPreviewDone = false;
uBufCnt++;
if (uBufCnt==uCapNum)
break;
}
CAMERA_StopPreviewPath();
}
INTC_Disable(NUM_CAMIF_P);
#if 0
// LCD Off
LCD_SetAllWinOnOff(0);
LCD_Stop();
printf("\nLCD OFF\n");
#endif
}
//////////
// Function Name : CAMERAT_TestDmaInPath_PreviewPath_Simple
// Function Description : MSMDA Path Basic Test In Preview Path
// Input : None
// Output : None
static void CAMERAT_TestDmaInPath_PreviewPath_Simple(void)
{
u32 uLcdHsz, uLcdVsz;
u32 uWIN0FbEndAddr;
// 1. Initialize interrupt
//==============================
INTC_Enable(NUM_CAMIF_P);
INTC_SetVectAddr(NUM_CAMIF_P, Isr_MSDMAPreviewDone);
bPreviewDone = false;
// 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
//=================================
printf("\nDma input -> dma output in c_path\n");
GLIB_InitInstance(uWIN0FbEndAddr, uLcdHsz, uLcdVsz, eLcdBpp);
GLIB_DrawPattern(uLcdHsz, uLcdVsz);
// 4. Run the process of dma-input path
//=============================
CAMERA_InitDmaInPath(uLcdHsz, uLcdVsz, uWIN0FbEndAddr, eLcdBpp, uLcdHsz, uLcdVsz, uLcdFbAddr, eLcdBpp, FLIP_NO, ROT_0, P_PATH);
CAMERAT_DisplayParam();
CAMERA_StartDmaInPath();
printf("\nCheck Iamge and Get Any Key!\n");
UART_Getc();
while(!bPreviewDone);
CAMERA_StopDmaInPath();
INTC_Disable(NUM_CAMIF_P);
// LCD Off
LCD_SetAllWinOnOff(0);
LCD_Stop();
printf("\nLCD OFF\n");
}
//////////
// Function Name : CAMERAT_TestDmaInPath_CodecPath_Simple
// Function Description : MSDMA Path Basic Test In Codec Path
// Input : None
// Output : None
static void CAMERAT_TestDmaInPath_CodecPath_Simple(void)
{
u32 uLcdHsz, uLcdVsz;
u32 uWIN0FbEndAddr;
// 1. Initialize interrupt
//==============================
INTC_Enable(NUM_CAMIF_C);
INTC_SetVectAddr(NUM_CAMIF_C, Isr_MSDMACodecDone);
bCodecDone = false;
// 2. Initialize lcd
//================================
LCD_InitDISPC(eLcdBpp, uLcdFbAddr, WIN0, false);
LCD_GetFrmSz(&uLcdHsz, &uLcdVsz, WIN0);
LCD_GetFbEndAddr(&uWIN0FbEndAddr, WIN0);
LCD_SetWinOnOff(1, WIN0);
LCD_Start();
// 2. Create the input picture
//=================================
printf("Dma input -> dma output in c_path\n");
GLIB_InitInstance(uWIN0FbEndAddr, uLcdHsz, uLcdVsz, eLcdBpp);
GLIB_DrawPattern(uLcdHsz, uLcdVsz);
// 4. Run the process of dma-input path
//=============================
CAMERA_InitDmaInPath(uLcdHsz, uLcdVsz, uWIN0FbEndAddr, eLcdBpp, uLcdHsz, uLcdVsz, uLcdFbAddr, eLcdBpp, FLIP_NO, ROT_0, C_PATH);
CAMERAT_DisplayParam();
CAMERA_StartDmaInPath();
printf("\nCheck Image and stop Test Get any Key!\n");
UART_Getc();
while(!bCodecDone);
CAMERA_StopDmaInPath();
INTC_Disable(NUM_CAMIF_C);
// LCD Off
LCD_SetAllWinOnOff(0);
LCD_Stop();
printf("\nLCD OFF\n");
}
//////////
// Function Name : CAMERAT_TestDmaInPath_Complex
// Function Description : DMA in (C/P Path) DMA out (C/P Path)
// Input : None
// Output : None
static void CAMERAT_TestDmaInPath_Complex(void)
{
u32 uLcdHsz, uLcdVsz;
u32 uWIN0FbEndAddr;
u32 uSrcAddr;
u32 uDstHsz, uDstVsz;
u32 uDisplayStartX, uDisplayStartY;
u32 uSrcCropStartX, uSrcCropStartY;
// 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;
// 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
//=================================
uSrcAddr = uWIN0FbEndAddr+uLcdHsz*uLcdVsz*4;
GLIB_InitInstance(uWIN0FbEndAddr, uLcdHsz, uLcdVsz, eLcdBpp);
GLIB_DrawPattern(uLcdHsz, uLcdVsz);
// CAMERA_InitDmaInPath(uLcdHsz, uLcdVsz, uWIN0FbEndAddr, eLcdBpp,
// uSrcWidth, uSrcHeight, uSrcAddr, eSrcDataFmt, FLIP_NO, ROT_0, C_PATH);
CAMERA_InitDmaInPath(uLcdHsz, uLcdVsz, uWIN0FbEndAddr, eLcdBpp,
uSrcWidth, uSrcHeight, uSrcAddr, eSrcDataFmt, FLIP_NO, ROT_0, P_PATH);
CAMERA_StartDmaInPath();
// while(!bCodecDone);
// bCodecDone = false;
while(!bPreviewDone);
bPreviewDone = false;
CAMERA_StopDmaInPath();
// 4. Run the process of dma-input path
//=============================
eDstDataFmt = eLcdBpp;
// uCodecBufAddr = uSrcAddr+uSrcWidth*uSrcHeight*4;
uDstHsz = 160, uDstVsz = 120;
uDisplayStartX = 80, uDisplayStartY = 60;
uSrcCropStartX = 0, uSrcCropStartY = 0;
// eRotDeg = ROT_0;
CAMERA_InitDmaInPath0(uSrcWidth, uSrcHeight, uSrcCropStartX, uSrcCropStartY, uSrcCroppedHsz, uSrcCroppedVsz, uSrcAddr, uSrcAddr,eSrcDataFmt,
uLcdHsz, uLcdVsz, uDisplayStartX, uDisplayStartY, uDstHsz, uDstVsz, uLcdFbAddr,uLcdFbAddr, eDstDataFmt, eFlipDir, eRotDeg, eProcessPath);
if (eImgEffect == ARBITRARY_CBCR)
{
CAMERA_SetImageEffect(eImgEffect);
CAMERA_SetArbitraryCbCr( uArbitraryCbValue, uArbitraryCrValue);
}
else
CAMERA_SetImageEffect(eImgEffect);
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_TestDmaInPath_AllParams
// Function Description : DMA In / DMA Out Test Function 5+4+5+4+1+9 = 28 EA Test
// Input : None
// Output : None
static void CAMERAT_TestDmaInPath_AllParams(void)
{
int nI;
int nSrcCropIdx;
int nImgEffectIdx;
int nArbitraryIdx;
// int nDstIdx;
int nSrcIdx;
u32 uFlipIdx;
// 1. Set the case of the input parameters.
//================================
u32 uSrcCropSzList[5][2] = {{144, 160}, {112, 176}, {80, 144}, {176, 192}, {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}};
FLIP_DIR eFlipDirList[5] = { FLIP_NO, FLIP_X, FLIP_Y, FLIP_XY, FLIP_NO};
CSPACE eSrcFmtArray[9] = {YCBYCR, YCRYCB, CBYCRY, CRYCBY, YC422, YC420, RGB16, RGB18, RGB24 };
// 2. Change the case and test all the case
//=================================
eInputPath = DMA;
for (nI=0; nI<2; nI++)
{
eProcessPath = (nI==0) ? P_PATH : C_PATH;
eRotDeg = ROT_0;
eImgEffect = BYPASS;
eFlipDir = FLIP_NO;
printf("\n============================================================");
printf("\n=================> Process Path 0(Preview) 1(Codec) =%d\n", eProcessPath);
printf("============================================================\n");
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();
// LCD Off
LCD_SetAllWinOnOff(0);
LCD_Stop();
printf("\nLCD OFF\n");
CAMERAT_TestDmaInPath_Complex();
}
for (nImgEffectIdx=2; nImgEffectIdx<6; nImgEffectIdx++) // Image effect = 4 EA
{
eImgEffect = eImgEffectList[nImgEffectIdx];
printf("\nHit any key to test\n");
UART_Getc();
// LCD Off
LCD_SetAllWinOnOff(0);
LCD_Stop();
printf("\nLCD OFF\n");
CAMERAT_TestDmaInPath_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");
UART_Getc();
// LCD Off
LCD_SetAllWinOnOff(0);
LCD_Stop();
printf("\nLCD OFF\n");
CAMERAT_TestDmaInPath_Complex();
}
eImgEffect = BYPASS;
eRotDeg = ROT_0 ;
eSrcDataFmt = RGB16;
//eSrcDataFmt = eSrcFmtArray[8-nDstIdx];
for ( uFlipIdx=0; uFlipIdx<5; uFlipIdx++)
{
eFlipDir = eFlipDirList[uFlipIdx];
printf("\nHit any key to test\n");
UART_Getc();
// LCD Off
LCD_SetAllWinOnOff(0);
LCD_Stop();
printf("\nLCD OFF\n");
CAMERAT_TestDmaInPath_Complex();
}
eImgEffect = BYPASS;
eFlipDir = FLIP_NO;
if ( eProcessPath == P_PATH )
{
eRotDeg = ROT_90;
printf("\nHit any key to tets\n");
UART_Getc();
// LCD Off
LCD_SetAllWinOnOff(0);
LCD_Stop();
printf("\nLCD OFF\n");
CAMERAT_TestDmaInPath_Complex();
}
eImgEffect = BYPASS;
eFlipDir = FLIP_NO;
eRotDeg = ROT_0 ;
for ( nSrcIdx=0; nSrcIdx<9; nSrcIdx++)
{
eSrcDataFmt = eSrcFmtArray[nSrcIdx];
printf("\nHit any key to test\n");
UART_Getc();
// LCD Off
LCD_SetAllWinOnOff(0);
LCD_Stop();
printf("\nLCD OFF\n");
CAMERAT_TestDmaInPath_Complex();
}
eImgEffect = BYPASS;
eFlipDir = FLIP_NO;
eRotDeg = ROT_0;
}
}
//////////
// Function Name : CAMERAT_TestDmaInPathToFifoOut_Simple
// Function Description : MSMDA In Path and FIFO Out Path Basic Test. (Preview / Codec Path)
// Input : None
// Output : None
static void CAMERAT_TestDmaInPathToFifoOut_Simple(void)
{
u32 uLcdHsz, uLcdVsz;
u32 uWIN1FbEndAddr;
#if 1 // Preview Path Test
// 0. Interrupt Setting : For MSDMA.....
//================================
INTC_Enable(NUM_CAMIF_P);
INTC_SetVectAddr(NUM_CAMIF_P, Isr_MSDMAPreviewDone);
bPreviewDone = false;
// 1. Initialize lcd
//================================
LCD_InitDISPC(eLcdBpp, uLcdFbAddr, WIN1, false);
LCD_GetFrmSz(&uLcdHsz, &uLcdVsz, WIN1);
LCD_GetFbEndAddr(&uWIN1FbEndAddr, WIN1);
LCD_InitWinForFifoIn(IN_CIM, WIN1);
LCD_SetWinOnOff(1, WIN1);
LCD_Start();
// 2. Create the input picture
//=================================
printf("Dma Input -> dma output in Preview_path\n");
GLIB_InitInstance(uWIN1FbEndAddr, uLcdHsz, uLcdVsz, eLcdBpp);
GLIB_DrawPattern(uLcdHsz, uLcdVsz);
// 3. Run the process of dma-input fifo-output path
//=======================================
eDstDataFmt = RGB24;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -