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

📄 camif.c

📁 s3c24a0固件测试代码 ? ? ? ? ?啊 
💻 C
📖 第 1 页 / 共 3 页
字号:
	

	Uart_Printf("camPviewCaptureCount=%d\n",camPviewCaptureCount);

	rINTMSK|=(BIT_CAMIF_PREVIEW);

}

void Test_CamCodecPostTestQVGADisplay(void)
{



	U32 mode;

	camTestMode=CAM_TEST_MODE_CODEC_POST;
	camCodecCaptureCount=0;
	camPviewCaptureCount=0;
	camPviewStatus=CAM_STOPPED;
	camCodecStatus=CAM_STOPPED;

	mode=0;

	InitLDI();

	
#if TEST_DETAIL_EN
	Uart_Printf("Select input format of Camera Scler\n");
	Uart_Printf("0:420, 1:422\n");
	Uart_Printf("Select one:");
	i=Uart_GetIntNum();
	switch(i) {
		case 0:
			camCodecInput=CAM_CCIR420;
			break;
		case 1:
			camCodecInput=CAM_CCIR422;
			break;
		default:
			camCodecInput=CAM_CCIR420;
			break;
	}

	Uart_Printf("Select output format of Camera Scler\n");
	Uart_Printf("0:420, 1:422\n");
	Uart_Printf("Select one:");
	i=Uart_GetIntNum();
	switch(i) {
		case 0:
			camCodecOutput=CAM_CCIR420;
			mode|=POST_IN_YCBYCR420;
			break;
		case 1:
			camCodecOutput=CAM_CCIR422;
			mode|=POST_IN_YCBYCR422;
			break;
		default:
			camCodecOutput=CAM_CCIR420;
			mode|=POST_IN_YCBYCR420;
			break;
	}
#else
	camCodecInput=CAM_CCIR420;
	camCodecOutput=CAM_CCIR420;
	mode|=POST_IN_YCBYCR420;
#endif

#if TEST_DETAIL_EN
	Uart_Printf("Select bpp of post processor output\n");
	Uart_Printf("Note:If you want to test YCBCR 422, you should choose 16bpp\n");
	Uart_Printf("0: 16bpp, 1:24bpp\n");
	Uart_Printf("Select one:");
	i=Uart_GetIntNum();
	switch(i) {
		case 0:
			LcdBGInit(MODE_PAR_16BIT565_240320|MODE_NO_VIRTUAL_16B);
			GlibInit(MODE_PAR_16BIT565_240320|MODE_NO_VIRTUAL_16B, BGBUFFER1);
			mode|=POST_OUT_RGB16B;
			LcdEnvidOnOff(1);			// Enable ENVID Bit
			break;
		case 1:
			LcdBGInit(MODE_PAR_18BIT_240320|MODE_NO_VIRTUAL_24B);
			GlibInit(MODE_PAR_18BIT_240320|MODE_NO_VIRTUAL_24B, BGBUFFER1);
			mode|=POST_OUT_RGB24B;
			LcdEnvidOnOff(1); 			// Enable ENVID Bit			
			break;
		default:
			LcdBGInit(MODE_PAR_16BIT565_240320|MODE_NO_VIRTUAL_16B);
			GlibInit(MODE_PAR_16BIT565_240320|MODE_NO_VIRTUAL_16B, BGBUFFER1);
			mode|=POST_OUT_RGB16B;
			LcdEnvidOnOff(1);			// Enable ENVID Bit
			break;
	}		
#else
	LcdBGInit(MODE_PAR_16BIT565_240320|MODE_NO_VIRTUAL_16B);
	GlibInit(MODE_PAR_16BIT565_240320|MODE_NO_VIRTUAL_16B, BGBUFFER1);
	mode|=POST_OUT_RGB16B;
	LcdEnvidOnOff(1);			// Enable ENVID Bit
#endif

	switch(CAMTYPE) {
		case CAM_S5X532:
			if(camCodecOutput==CAM_CCIR422) {
				CamInit(240, 320, 240, 320, 112, 40,  0x12000000, LCDFRAMEBUFFERBG1);
				PostInit(240, 320, 240, 320, 0, 0, 
						240, 320, 240, 320, 0, 0, 
						0x12000000, LCDFRAMEBUFFERBG1, mode);    
			}	
			else	 {
				CamInit(640, 480, 240, 320, 112, 40,  0x12000000, LCDFRAMEBUFFERBG1);
				PostInit(640, 480, 640, 480, 0, 0, 
						240, 320, 240, 320, 0, 0, 
						0x12000000, LCDFRAMEBUFFERBG1, mode);	 
			}	
			break;
		case CAM_S5K3BAFX:
			if(camCodecOutput==CAM_CCIR422) {
				CamInit(240, 320, 240, 320, 112, 40,  0x12000000, LCDFRAMEBUFFERBG1);
				PostInit(240, 320, 240, 320, 0, 0, 
						240, 320, 240, 320, 0, 0, 
						0x12000000, LCDFRAMEBUFFERBG1, mode);    
			}	
			else	 {
				if(CAMSIZE==SVGA_XSIZE)	 {
					CamInit(800, 600, 240, 320, 0, 0,  0x12000000, LCDFRAMEBUFFERBG1);
					PostInit(800, 600, 800, 600, 0, 0, 
							240, 320, 240, 320, 0, 0, 
							0x12000000, LCDFRAMEBUFFERBG1, mode);	 
				}	
				else if(CAMSIZE==MEGA2_XSIZE) {
					CamInit(800, 600, 240, 320, 0, 0,  0x12000000, LCDFRAMEBUFFERBG1);
					PostInit(800, 600, 800, 600, 0, 0, 
							240, 320, 240, 320, 0, 0, 
							0x12000000, LCDFRAMEBUFFERBG1, mode);
				}
			}	
			break;	
		case CAM_OV7620:
		default:
			if(camCodecOutput==CAM_CCIR422) {
				CamInit(240, 320, 240, 320, 112, 40,  0x12000000, LCDFRAMEBUFFERBG1);
				PostInit(240, 320, 240, 320, 0, 0, 
						240, 320, 240, 320, 0, 0, 
						0x12000000, LCDFRAMEBUFFERBG1, mode);    
			}	
			else	 {			
				CamInit(640, 480, 240, 320, 112, 40,  0x12000000, LCDFRAMEBUFFERBG1);
				PostInit(640, 480, 640, 480, 0, 0, 
						240, 320, 240, 320, 0, 0, 
						0x12000000, LCDFRAMEBUFFERBG1, mode);	
			}	
			break;
	}	

	rCIGCTRL|=(1<<26); // Signals of Synchronization are not inverted
	//rCIGCTRL&=~(1<<26); // Signals of Synchronization are not inverted



#if TEST_DETAIL_EN
	Uart_Printf("Select Shape of Test Pattern\n");
	Uart_Printf("0:camera input, 1:color bar, 2:horizontal increment, 3:vertical increment\n");
	Uart_Printf("Select One:");
	i=Uart_GetIntNum();
	rCIGCTRL&=~(0x3<<27);
	switch(i) {		
		case 0:
			rCIGCTRL|=(0<<27);
			break;
		case 1:
			rCIGCTRL|=(1<<27);
			break;
		case 2:
			rCIGCTRL|=(2<<27);
			break;
		case 3:
			rCIGCTRL|=(3<<27);
			break;
		default:
			break;
	}		
#else	
	rCIGCTRL&=~(0x3<<27);
#endif


#if TEST_DETAIL_EN
	Uart_Printf("Select Flip mode\n");
	Uart_Printf("0:normal, 1:X-axis mirror, 2:Y-axis mirror, 3:180 rotation\n");
	Uart_Printf("Select One:");
	i=Uart_GetIntNum();
	rCICOTRGFMT&=~(0x3<<14);
	switch(i) {
		case 0:
			rCICOTRGFMT|=(0<<14);
			break;
		case 1:
			rCICOTRGFMT|=(1<<14);
			break;
		case 2:
			rCICOTRGFMT|=(2<<14);
			break;
		case 3:
			rCICOTRGFMT|=(3<<14);
			break;
		default:
			break;	
	}		
#endif

#if TEST_DETAIL_EN
	Uart_Printf("Scaler ByPass mode\n");
	Uart_Printf("0:ByPass Off, 1:ByPass On\n");
	Uart_Printf("Select One:");
	i=Uart_GetIntNum();
	switch(i) {
		case 0:
			rCICOSCCTRL&=~(1<<31);
			break;
		case 1:
			rCICOSCCTRL|=(1<<31);
			break;
		default:
			rCICOSCCTRL&=~(1<<31);
			break;	
	}		
#endif


	if(camCodecOutput==CAM_CCIR422) {
		camTestMode=CAM_TEST_MODE_CODEC;
		pISR_CAMIF_CODEC=(U32)CamCodecIsr;
		rINTMSK&=~(BIT_CAMIF_CODEC);	
	}	
	else {
		camTestMode=CAM_TEST_MODE_CODEC_POST;
		pISR_CAMIF_CODEC=(U32)CamCodecIsr;
		pISR_LCD_POST=(U32)PostIsr;
		rINTMSK&=~(BIT_CAMIF_CODEC|BIT_LCD_POST);	
		rINTSUBMSK &= ~(BIT_SUB_POST);
	}

	Uart_Printf("Camera preview for codec will be started!\n");
	Uart_Printf("Press Enter to continue!\n");
	Uart_TxEmpty(0);

	if(rCICOSTATUS&0xe0000000) {
		rCIWDOFST|=(1<<30|1<<15|1<<14);
		rCIWDOFST&=~(1<<30|1<<15|1<<14);
	}
	if(rCIPRSTATUS&0xc0000000) {
		rCIWDOFST|=(0x3<<12);
		rCIWDOFST&=~(0x3<<12);
	}		

	CamCaptureStart(CAM_CODEC_SCALER_CAPTURE_ENABLE_BIT);

	if(camCodecOutput==CAM_CCIR422) {
		while(1) {
			if(camCodecDataValid==1) {
				camCodecDataValid=0;
				Display_Cam_Image(PQVGA_XSIZE, PQVGA_YSIZE);
			}	
			if(Uart_GetKey()=='\r') break;
		}
	}	
	else Uart_Getch();
    
	CamCaptureStop();
    
	Uart_Printf("Wait until the current frame capture is completed.\n");
    
	while(!( camCodecStatus==CAM_STOPPED));

	Uart_TxEmpty(0);
	Uart_Printf("camCodecCaptureCount:%d\n",camCodecCaptureCount);
	Uart_Printf("codec Status register:0x%x\n", rCICOSTATUS);
	Uart_Printf("preview Status register:0x%x\n", rCIPRSTATUS);
	Uart_TxEmpty(0);

	rINTSUBMSK|=BIT_SUB_POST;
	rINTMSK|=BIT_CAMIF_CODEC|BIT_LCD_POST;	
	
}


U32 Conv_YCbCr_Rgb(U8 y0, U8 y1, U8 cb0, U8 cr0) 
{
	// bit order is
	// YCbCr = [Cr0 Y1 Cb0 Y0], RGB=[R1,G1,B1,R0,G0,B0].
	
	int r0, g0, b0, r1, g1, b1;
	U32 rgb0, rgb1, rgb;
 
	#if 1 
	r0 = YCbCrtoR(y0, cb0, cr0);
	g0 = YCbCrtoG(y0, cb0, cr0);
	b0 = YCbCrtoB(y0, cb0, cr0);
	r1 = YCbCrtoR(y1, cb0, cr0);
	g1 = YCbCrtoG(y1, cb0, cr0);
	b1 = YCbCrtoB(y1, cb0, cr0);
	#endif

	if (r0>255 ) r0 = 255;
	if (r0<0) r0 = 0;
	if (g0>255 ) g0 = 255;
	if (g0<0) g0 = 0;
	if (b0>255 ) b0 = 255;
	if (b0<0) b0 = 0;

	if (r1>255 ) r1 = 255;
	if (r1<0) r1 = 0;
	if (g1>255 ) g1 = 255;
	if (g1<0) g1 = 0;
	if (b1>255 ) b1 = 255;
	if (b1<0) b1 = 0;
	
	// 5:6:5 16bit format
	rgb0 = (((U16)r0>>3)<<11) | (((U16)g0>>2)<<5) | (((U16)b0>>3)<<0);	//RGB565.
	rgb1 = (((U16)r1>>3)<<11) | (((U16)g1>>2)<<5) | (((U16)b1>>3)<<0);	//RGB565.

	rgb = (rgb1<<16) | rgb0;

	return(rgb);
}


void Display_Cam_Image(U32 size_x, U32 size_y)
{
	U8 *buffer_y, *buffer_cb, *buffer_cr;
	U32 rgb_data0; 
	U32 x, y;
	int temp;

	U32 *lcdframebuffer;

	temp = (((rCICOSTATUS>>26)&0x3)+4-2)%4; // current frame memory block
	switch (temp) // current frame mem - 2
	{
	case 0:
		buffer_y = (U8 *)rCICOYSA1;
		buffer_cb = (U8 *)rCICOCBSA1;
		buffer_cr = (U8 *)rCICOCRSA1;
		break;
	case 1:
		buffer_y = (U8 *)rCICOYSA2;
		buffer_cb = (U8 *)rCICOCBSA2;
		buffer_cr = (U8 *)rCICOCRSA2;
		break;
	case 2:
		buffer_y = (U8 *)rCICOYSA3;
		buffer_cb = (U8 *)rCICOCBSA3;
		buffer_cr = (U8 *)rCICOCRSA3;
		break;
	case 3:
		buffer_y = (U8 *)rCICOYSA4;
		buffer_cb = (U8 *)rCICOCBSA4;
		buffer_cr = (U8 *)rCICOCRSA4;
		break;
	default :
		buffer_y = (U8 *)rCICOYSA1;
		buffer_cb = (U8 *)rCICOCBSA1;
		buffer_cr = (U8 *)rCICOCRSA1;
		break;
	}

	lcdframebuffer=(U32 *)LCDFRAMEBUFFERBG1;
	//Uart_Printf("End setting : Y-0x%x, Cb-0x%x, Cr-0x%x\n", buffer_y, buffer_cb, buffer_cr);	
#if 0
	// for checking converting time 
	rGPGCON = (rGPGCON&~(1<<23))|(1<<22); //EINT19 -> GPG11 output
	rGPGUP |= (1<<11);
	rGPGDAT &= ~(1<<11);
	Delay(90);
	rGPGDAT |=(1<<11);
	
	rgb_data0 = 0;
#endif

#if 0
	for (y=0;y<size_y;y++) // YCbCr 4:2:0 format
	{
		for (x=0;x<size_x;x+=2)
		{		
			rgb_data0 = Conv_YCbCr_Rgb(*buffer_y++, *buffer_y++, *buffer_cb++, *buffer_cr++);
			frameBuffer16BitTft240320[y][x/2] = rgb_data0;

			if ( (x==(size_x-2)) && ((y%2)==0) ) // when x is last pixel & y is even number
			{
				buffer_cb -= size_x/2;
				buffer_cr -= size_x/2;
			} 	
		}
	}	
#else
	for (y=0;y<size_y;y++) // YCbCr 4:2:2 format
	{
		for (x=0;x<size_x;x+=2)
		{ 	
			rgb_data0 = Conv_YCbCr_Rgb(*buffer_y++, *buffer_y++, *buffer_cb++, *buffer_cr++);
			*(lcdframebuffer++) = rgb_data0;
		}
	} 
#endif

#if 0		
	rGPGDAT &= ~(1<<11);
	Delay(30);
	rGPGDAT |=(1<<11);
	rGPGCON = (rGPGCON&~(1<<22))|(1<<23); // GPG11 output -> EINT19
#endif
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -