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

📄 camera_test.c

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