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

📄 camera_test.c

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