⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 camera_test.c

📁 s3c6400 ADS下官方测试程序
💻 C
📖 第 1 页 / 共 5 页
字号:
			}
		}
		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 + -