📄 camera_test.c
字号:
}
}
else if (nX == 2)
{
if ((uCurHsz+2*uSrcStX)<=uSrcHSz && (uCurVsz+2*uSrcStY)<=uSrcVSz)
{
uCurHsz += 2*uSrcStX;
uCurVsz += 2*uSrcStY;
}
if (uSrcStX>=uHStep && uSrcStY>=uVStep)
{
uSrcStX -= uHStep;
uSrcStY -= uVStep;
}
}
else if (nX == 0)
{
break;
}
else
printf("Invaild Input! Retry It!!\n");
printf("Src Cropping Start XSz: %d, Src Cropping Start YSz: %d\n", uSrcStX, uSrcStY);
printf("Src Cropping HSz: %d, Src Cropping VSz: %d\n", uCurHsz, uCurVsz);
}
INTC_Disable(NUM_CAMIF_P);
}
//////////
// Function Name : CAMERAT_TestZoomInOut_Codec
// Function Description : Function of ZoomIn/Out Test at Codec Path
// Input : NONE
// Output : NONE
// Version : v0.1
static void CAMERAT_TestZoomInOut_Codec(void)
{
u32 uLcdHsz, uLcdVsz;
u32 uSrcHSz, uSrcVSz;
char cChar;
u32 uCurHsz;
u32 uCurVsz;
u32 uSrcStX;
u32 uSrcStY;
u32 uHStep;
u32 uVStep;
int nX;
// 1. Initialize interrupt
//=======================================
INTC_SetVectAddr(NUM_CAMIF_C, Isr_CodecDone);
INTC_Enable(NUM_CAMIF_C);
// 2. Initialize lcd
//=======================================
LCD_InitDISPC(eLcdBpp, uLcdFbAddr, WIN0, false);
LCD_GetFrmSz(&uLcdHsz, &uLcdVsz, WIN0);
LCD_SetWinOnOff(1, WIN0);
LCD_Start();
// 3. Initialize camera and variables of the fimc, run the zoom in/out process
//=======================================
CAMERA_InitSensor();
CAMERA_GetSrcImgSz(&uSrcHSz, &uSrcVSz);
uCurHsz = uSrcHSz;
uCurVsz = uSrcVSz;
uSrcStX = 0;
uSrcStY = 0;
uHStep = 16;
uVStep = 16*uSrcVSz/uSrcHSz;
eFlipDir = FLIP_NO;
eRotDeg = ROT_0;
while (true)
{
CAMERA_InitCodecPath0(uSrcStX, uSrcStY, uCurHsz, uCurVsz, uLcdHsz, uLcdVsz, 0, 0, uLcdHsz, uLcdVsz,
uLcdFbAddr, uLcdFbAddr, eLcdBpp, eFlipDir, eRotDeg);
CAMERA_StartCodecPath(0);
printf("\nHit Any Key to Stop Codec!\n\n");
UART_Getc();
CAMERA_StopCodecPath();
printf("\n 0 : Exit\n");
printf(" 1 : Zoom In\n");
printf(" 2 : Zoom Out\n");
printf("Hit Key: ");
nX = GetIntNum();
printf("%c\n", cChar);
if (nX == 1)
{
uSrcStX += uHStep;
uSrcStY += uVStep;
if ((uCurHsz >= 16+2*uSrcStX)||(uCurVsz>= 8+2*uSrcStY))
{
uCurHsz -= 2*uSrcStX;
uCurVsz -= 2*uSrcStY;
}
else
{
uSrcStX -= uHStep;
uSrcStY -= uVStep;
}
}
else if (nX == 2)
{
if ((uCurHsz+2*uSrcStX)<=uSrcHSz && (uCurVsz+2*uSrcStY)<=uSrcVSz)
{
uCurHsz += 2*uSrcStX;
uCurVsz += 2*uSrcStY;
}
if (uSrcStX>=uHStep && uSrcStY>=uVStep)
{
uSrcStX -= uHStep;
uSrcStY -= uVStep;
}
}
else if (nX == 0)
{
break;
}
else
printf("Invaild Input! Retry It!!\n");
printf("Src Cropping Start XSz: %d, Src Cropping Start YSz: %d\n", uSrcStX, uSrcStY);
printf("Src Cropping HSz: %d, Src Cropping VSz: %d\n", uCurHsz, uCurVsz);
}
INTC_Disable(NUM_CAMIF_C);
}
//////////
// Function Name : CAMERAT_TestPreviewPath_Simple
// Function Description : Basic Function of Preview Path Camera In DMA Out
// Input : None
// Output : None
static void CAMERAT_TestPreviewPath_Simple(void)
{
u32 uLcdHsz, uLcdVsz;
u32 i,j,k;
// 1. Initialize interrupt process
//=======================================
INTC_SetVectAddr(NUM_CAMIF_P, Isr_PreviewDone);
INTC_Enable(NUM_CAMIF_P);
// 2. Initialize lcd
//=======================================
*(volatile unsigned *)0x7410800c=0x0; // Modem I/F Bypass Control. It should be 0,
LCD_InitDISPC(eLcdBpp, uLcdFbAddr, WIN0, false);
LCD_GetFrmSz(&uLcdHsz, &uLcdVsz, WIN0);
LCD_SetWinOnOff(1, WIN0);
GLIB_InitInstance(uLcdFbAddr, uLcdHsz, uLcdVsz, eLcdBpp);
k=0;
for(i=0; i<240; i++)
for(j=0; j<320; j++)
GLIB_PutPixel2(j, i, pSmile[k++]);
LCD_Start();
printf("\nHit any key to start Camera simple test!\n");
UART_Getc();
// 3. Initialize camera and run the process of preview path.
//========================================
CAMERA_InitSensor();
CAMERA_InitPreviewPath(uLcdHsz, uLcdVsz, uLcdFbAddr, eLcdBpp, FLIP_NO,ROT_0);
CAMERA_StartPreviewPath();
printf("\nHit any key to stop it!\n");
UART_Getc();
CAMERA_StopPreviewPath();
INTC_Disable(NUM_CAMIF_P);
LCD_SetAllWinOnOff(0);
LCD_Stop();
printf("\nLCD OFF\n");
}
//////////
// Function Name : CAMERAT_TestPreviewPath_LastIRQ
// Function Description : Basic Function of Preview Path Camera In DMA Out( Using Last IRQ)
// Input : None
// Output : None
static void CAMERAT_TestPreviewPath_LastIRQ(void)
{
u32 uLcdHsize, uLcdVsize;
uCamPreviewStatus = CAPTURE_STOPPED;
uCamPreviewCptCount = 0;
uCamPreviewDataValid = 0 ;
// 1. Initialize interrupt process
//=======================================
INTC_SetVectAddr(NUM_CAMIF_P, Isr_LastIRQDone);
INTC_Enable(NUM_CAMIF_P);
// 2. Initialize lcd
//=======================================
LCD_InitDISPC(eLcdBpp, uLcdFbAddr, WIN0, false);
LCD_GetFrmSz(&uLcdHsize, &uLcdVsize, WIN0);
LCD_SetWinOnOff(1, WIN0);
LCD_Start();
// 3. Initialize camera and run the process of preview path.
//========================================
CAMERA_InitSensor();
CAMERA_InitPreviewPath(uLcdHsize, uLcdVsize, uLcdFbAddr, eLcdBpp,FLIP_NO,ROT_0);
CAMERA_StartPreviewPath();
uCamPreviewCptCount = 0 ;
uCamPreviewStatus = CAPTURING;
printf("\nLast IRQ Enable Setting Preview Path Start!\n");
while( UART_GetKey()==0 )
{
if( uCamPreviewDataValid)
{
uCamPreviewDataValid = 0 ;
}
}
uCamPreviewStatus = CAPTURE_STOP_ISSUED;
while( !(uCamPreviewStatus == CAPTURE_STOPPED) );
printf("\nPreview Capture Count ==%d\n", uCamPreviewCptCount);
CAMERA_StopPreviewPath();
INTC_Disable(NUM_CAMIF_P);
LCD_SetAllWinOnOff(0);
LCD_Stop();
printf("\nLCD OFF\n");
}
//////////
// Function Name : CAMERAT_TestPreviewPath_Complex
// Function Description : This Function is Complex(ScanlineOffset) Test..
// Input None
// Output : None
static void CAMERAT_TestPreviewPath_Complex(void)
{
// u32 uBufAddr0, uBufAddr1;
u32 uLcdHsz, uLcdVsz;
u32 uDstHsz, uDstVsz;
u32 uDisplayStartX, uDisplayStartY;
u32 uSrcCropStartX, uSrcCropStartY;
// 1. Initalize interrupt
//=====================================
INTC_Enable(NUM_CAMIF_P);
INTC_SetVectAddr(NUM_CAMIF_P, Isr_PreviewDone);
bPreviewDone = false;
// 2. Initialize lcd with trigger mode
//=====================================
LCD_InitDISPC(eLcdBpp, uLcdFbAddr, WIN0, false);
LCD_GetFrmSz(&uLcdHsz, &uLcdVsz, WIN0);
LCD_SetWinOnOff(1, WIN0);
LCD_Start();
// 3. Initialize the camera and run the process of preview path
//===========================================
uDstHsz = 160, uDstVsz = 120, uDisplayStartX = 16, uDisplayStartY = 12;
uSrcCropStartX = 0, uSrcCropStartY = 0;
// uSrcCroppedHsz = 1600,uSrcCroppedVsz = 1200;
// uSrcCropStartX = 8, uSrcCropStartY = 24,uSrcCroppedHsz = 144,uSrcCroppedVsz = 176;
// eFlipDir = FLIP_NO, eRotDeg = ROT_90;
CAMERA_InitSensor();
CAMERA_InitPreviewPath0(uSrcCropStartX, uSrcCropStartY, uSrcCroppedHsz, uSrcCroppedVsz,
uLcdHsz, uLcdVsz, uDisplayStartX, uDisplayStartY, uDstHsz, uDstVsz,
uLcdFbAddr, uLcdFbAddr, eLcdBpp, eFlipDir, eRotDeg);
if (eImgEffect == ARBITRARY_CBCR)
CAMERA_SetArbitraryCbCr(uArbitraryCbValue, uArbitraryCrValue);
else
CAMERA_SetImageEffect(eImgEffect);
CAMERAT_DisplayParam();
CAMERA_StartPreviewPath();
printf("\nHit any key to stop it!\n");
UART_Getc();
CAMERA_StopPreviewPath();
INTC_Disable(NUM_CAMIF_P);
LCD_SetAllWinOnOff(0);
LCD_Stop();
printf("\nLCD OFF\n");
}
//////////
// Function Name : CAMERAT_TestPreviewPath_AllParams
// Function Description : Preview Path All Parameter Test
// Input : None
// Output : None
// Test case = 5 + 4 + 5 + 4 + 1 = 19ea
static void CAMERAT_TestPreviewPath_AllParams(void)
{
// 1. Set the case group of the input parameters.
//================================
u32 uSrcCropSzList[5][2] = {{192,260}, {560, 400}, {144, 176}, {160, 320}, {800, 600} };
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[4] = { FLIP_X, FLIP_Y, FLIP_XY, FLIP_NO};
u32 uSrcCropIdx;
u32 uImgEffectIdx;
u32 uArbitraryIdx;
u32 uFlipIdx;
// 3. Change the case and test all the case
//=================================
for (uSrcCropIdx=0; uSrcCropIdx<5; uSrcCropIdx++) // Scaler up,down, bypass = 5 EA (2*2 + 1)
{
uSrcCroppedHsz = uSrcCropSzList[uSrcCropIdx][0];
uSrcCroppedVsz = uSrcCropSzList[uSrcCropIdx][1];
printf("\nHit any key to test\n");
UART_Getc();
CAMERAT_TestPreviewPath_Complex();
}
for (uImgEffectIdx=2; uImgEffectIdx<6; uImgEffectIdx++) // Image effect = 4 EA
{
eImgEffect = eImgEffectList[uImgEffectIdx];
printf("\nHit any key to test\n");
UART_Getc();
CAMERAT_TestPreviewPath_Complex();
}
eImgEffect = ARBITRARY_CBCR;
for (uArbitraryIdx=0; uArbitraryIdx<5; uArbitraryIdx++) // Arbitrary Cb,Cr = 5 EA
{
uArbitraryCbValue = uArbitraryCbCrList[uArbitraryIdx][0];
uArbitraryCrValue = uArbitraryCbCrList[uArbitraryIdx][1];
printf("\nHit any key to test\n");
UART_Getc();
CAMERAT_TestPreviewPath_Complex();
}
eImgEffect = BYPASS;
for (uFlipIdx=0; uFlipIdx<4; uFlipIdx++) // Flip = 4EA
{
eFlipDir = eFlipDirList[uFlipIdx];
printf("\nHit any key to test\n");
UART_Getc();
CAMERAT_TestPreviewPath_Complex();
}
eImgEffect = BYPASS; // Rotation Test 1 EA
eFlipDir = FLIP_NO;
eRotDeg = ROT_90;
printf("\nHit any key to test\n");
UART_Getc();
CAMERAT_TestPreviewPath_Complex();
eImgEffect = BYPASS;
eFlipDir = FLIP_NO;
eRotDeg = ROT_0;
}
//////////
// Function Name : CAMERAT_TestPreviewPathToFifoOut_Simple
// Function Description : camera input and fifo out test function
// Preveiw->FIFO, the DstFmt = RGB24(fixed)
// For Cam FIFO out, win1 is used for p_path, win2 is used for c_path
// Input : None
// Output : None
/*
static void CAMERAT_TestPreviewPathToFifoOut_Simple(void)
{
u32 uLcdHsz, uLcdVsz;
// 1. Initialize interrupt
//================================
INTC_Enable(NUM_CAMIF_P);
INTC_SetVectAddr(NUM_CAMIF_P, Isr_PreviewDone);
// 2. Initialize lcd
//========================================
LCD_InitDISPC(eLcdBpp, uLcdFbAddr, WIN1, false);
LCD_GetFrmSz(&uLcdHsz, &uLcdVsz, WIN1);
LCD_InitWinForFifoIn1(IN_CIM, WIN1, LOCALIN_RGB );
LCD_SetWinOnOff(1, WIN1);
LCD_Start();
// 3. Initialize camera and run the process of fifo-input fifo-output p_path
//===============================================
CAMERA_InitSensor();
CAMERA_InitPreviewPathToFifoOut(uLcdHsz, uLcdVsz, eLcdBpp);
CAMERA_StartPreviewPath();
printf("\nHit any key to stop it!\n");
UART_Getc();
CAMERA_StopPreviewPath();
INTC_Disable(NUM_CAMIF_P);
// LCD Off
LCD_SetAllWinOnOff(0);
LCD_Stop();
}
*/
//////////
// Function Name : CAMERAT_TestPreviewPathToFifoOut_Complex
// Function Description : camera input and fifo out test function
// Fifo out mode doesn't support the scan line offset. No Rotation, No Flip in fifo in&fifo out mode.
// Input : None
// Output : None
/*
static void CAMERAT_TestPreviewPathToFifoOut_Complex(void)
{
u32 uLcdHsz, uLcdVsz;
u32 uSrcCropStartX, uSrcCropStartY;
u32 uLCDInputFormat;
// 1. Initialize interrupt
//================================
INTC_Enable(NUM_CAMIF_P);
INTC_SetVectAddr(NUM_CAMIF_P, Isr_PreviewDone);
if ( eDstDataFmt == RGB16 || eDstDataFmt == RGB18 || eDstDataFmt == RGB24 )
{
uLCDInputFormat = LOCALIN_RGB ;
}
else
{
uLCDInputFormat = LOCALIN_YCbCr;
}
// 2. Initialize lcd
//========================================
LCD_InitDISPC(eLcdBpp, uLcdFbAddr, WIN1, false);
LCD_GetFrmSz(&uLcdHsz, &uLcdVsz, WIN1);
LCD_InitWinForFifoIn1(IN_CIM, WIN1, (LOCAL_INPUT_COLORSPACE)uLCDInputFormat);
LCD_SetWinOnOff(1, WIN1);
LCD_Start();
// 3. Initialize camera and variables, run the process of fifo-input fifo-output p_path
//==========================================================
uSrcCropStartX = 0, uSrcCropStartY = 0;
CAMERA_InitSensor();
CAMERA_InitPreviewPathToFifoOut0(uSrcCropStartX, uSrcCropStartY, uSrcCroppedHsz, uSrcCroppedVsz, uLcdHsz, uLcdVsz, eDstDataFmt);
if (eImgEffect == ARBITRARY_CBCR)
CAMERA_SetArbitraryCbCr( uArbitraryCbValue, uArbitraryCrValue);
else
CAMERA_SetImageEffect(eImgEffect);
CAMERAT_DisplayParam();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -