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

📄 cameratest.c

📁 samsung 最新芯片2450 的测试程序.
💻 C
📖 第 1 页 / 共 3 页
字号:
	camCodecStatus=CAPTURE_STOPPED;
	camCodecCaptureCount=0;
	camCodecDataValid=0;

	pISR_CAM	=	(unsigned int)MSDMAISR;
	rSUBSRCPND = BIT_SUB_CAM_P|BIT_SUB_CAM_C;
	ClearPending(BIT_CAM);
	rINTSUBMSK &= ~(BIT_SUB_CAM_P|BIT_SUB_CAM_C);
	rINTMSK &= ~BIT_CAM;

// QVGA
/*
	for(i=0; i<240*320*2*4; i++) {
		*Codecframebuffer ++ = 0x0;
	}
	for(i=0; i<240*320*2*4; i++) {
		*Previewframebuffer ++ = 0x0;
	}	
*/

// WVGA

	for(i=0; i<480*800*2*4; i++) {
		*Codecframebuffer ++ = 0x0;
	}
	for(i=0; i<480*800*2*4; i++) {
		*Previewframebuffer ++ = 0x0;
	}	


	SetCodecFormat( InFormat_YCBCR422, OutFormat_YCBCR422, INTERLEAVE_ON, ORDER_CRYCBY);
	SetCodecScaler( CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, TargetHsize, TargetVsize);
	SetCodecDMA( TargetHsize, TargetVsize, OutFormat_YCBCR422, INTERLEAVE_ON);	// jcs
	SetCodec_ScanLine_Bubffer(3);

	//	Use MSDMA Offset
	SetPreviewPath( 320, 240, lcd_horizon_value, lcd_line_value, OutFormat);
//	SetPreviewPath( 800, 480, lcd_horizon_value, lcd_line_value, OutFormat);
	SetPreviewFrameBuffer( CameraPreviewFrameBuffer, lcd_horizon_value, lcd_line_value, OutFormat);
	SetPreviewSource( PREVIEW_MSDMA);

	SetMSDMAFormat( MSDMA_InFormat_YCBCR422, INTERLEAVE_ON, ORDER_CRYCBY);
/*
	rCIIMGCPT |=  (1<<24) | (0<<18) | (0x0<<19);
	rCICOCPTSEQ = 0xa;
*/
	
	
	CodecCaptureStart();

	EnablePreviewScaler();
	EnableImageCapturePreview();

	printf("\nrCIMSCTRL = %x\n",rCIMSCTRL);

	while (1) {
		if (camCodecDataValid) {
			camCodecDataValid = 0;

			i = GetCodecFrameCount();
				
			Return_ScanLine_BubfferAddr();
			
			fb = GetCodecFrameBuffer((i-2)&0x3);

			SetMSDMAFrameBuffer( fb, lcd_horizon_value, lcd_line_value, 0, MSDMA_InFormat_YCBCR422);

			PreviewComplete=0;

			StartMSDMA();
			WaitMSDMA();

			SetCodec_ScanLine_Bubffer(3);

			while(PreviewComplete==0);

			i = GetPreviewFrameCount();
			fb = GetPreviewFrameBuffer((i-1)&0x3);

			*VIDWxADD0_Reg_Addr[0][0] = fb;

		}
		if (Uart_GetKey()== '\r') break;			
	}

	DisableImageCapturePreview();
	DisablePreviewScaler();

	CodecCaptureStop();

	while(!(camCodecStatus==CAPTURE_STOPPED ));

	printf("\ncamCodecCaptureCount=%d\n",camCodecCaptureCount);
	printf("codec Status register:0x%x\n", rCICOSTATUS);

	rINTMSK |= BIT_CAM;
	rINTSUBMSK |= BIT_SUB_CAM_P|BIT_SUB_CAM_C;



	
	
#endif 
}



void Return_ScanLine_BubfferAddr()
{
	rCICOYSA1	=	(0x31000000+0x01800000);
	rCICOYSA2	=	rCICOYSA1+(320*240*2);
	rCICOYSA3	=	rCICOYSA2+(320*240*2);
	rCICOYSA4	=	rCICOYSA3+(320*240*2);
}
void SetCodecDstOffset(U32 uDisplayHSz, U32 uStartX, U32 uStartY)
{

/*
	U32 InitOffset = uDisplayHSz*uStartY + uStartX;
	U32 LineOffset = uDisplayHSz - 160;

	if (InitOffset >= 0x1000)
	{
		printf("\nInitial Offset error\n");
		return;
	}

	printf("\nInitial Offset = %x\n",InitOffset);
*/
	rCICOSCOS = (160<<16) | (160<<0);
	printf("\nrCICOSCOS = %x\n",rCICOSCOS);

}

void SetCodec_ScanLine_Bubffer(U32 FrameNumber)
{

	switch(FrameNumber)
		{
		case 0:
			//Frame 0
			rCICOYSA1	=	CameraCodecFrameBuffer;
			rCICOYSA2	=	rCICOYSA1+(lcd_horizon_value*lcd_line_value*2);
			rCICOYSA3	=	rCICOYSA2+(lcd_horizon_value*lcd_line_value*2);
			rCICOYSA4	=	rCICOYSA3+(lcd_horizon_value*lcd_line_value*2);
			rCICOSCOS   =     (0<<16) | ((lcd_horizon_value -240) <<0);
			break;
			
		case 1:
			//Frame 1
			rCICOYSA1	=	CameraCodecFrameBuffer;
			rCICOYSA2	=	rCICOYSA1+(lcd_horizon_value*lcd_line_value*2);
			rCICOYSA3	=	rCICOYSA2+(lcd_horizon_value*lcd_line_value*2);
			rCICOYSA4	=	rCICOYSA3+(lcd_horizon_value*lcd_line_value*2);
			rCICOSCOS   =     (160<<16) | ((lcd_horizon_value -240) <<0);
			break;

		case 2:			
			//Frame 2
			rCICOYSA1	=	CameraCodecFrameBuffer + 320*120*2;
			rCICOYSA2	=	rCICOYSA1+(lcd_horizon_value*lcd_line_value*2);
			rCICOYSA3	=	rCICOYSA2+(lcd_horizon_value*lcd_line_value*2);
			rCICOYSA4	=	rCICOYSA3+(lcd_horizon_value*lcd_line_value*2);
			rCICOSCOS   =     (0<<16) | ((lcd_horizon_value -240) <<0);
			break;

		case 3:
			//Frame 3		
			rCICOYSA1	=	CameraCodecFrameBuffer +  320*120*2;
			rCICOYSA2	=	rCICOYSA1+(lcd_horizon_value*lcd_line_value*2);
			rCICOYSA3	=	rCICOYSA2+(lcd_horizon_value*lcd_line_value*2);
			rCICOYSA4	=	rCICOYSA3+(lcd_horizon_value*lcd_line_value*2);	
			rCICOSCOS   =     (160<<16) | ((lcd_horizon_value -240) <<0);

		case 4:
			//Frame 3		
			rCICOYSA1	=	CameraCodecFrameBuffer;
			rCICOYSA2	=	rCICOYSA1+(lcd_horizon_value*lcd_line_value*2);
			rCICOYSA3	=	rCICOYSA2+(lcd_horizon_value*lcd_line_value*2);
			rCICOYSA4	=	rCICOYSA3+(lcd_horizon_value*lcd_line_value*2);	
			rCICOSCOS   =     ((320*26)<<16) | ((lcd_horizon_value -240) <<0);
			break;
		}
}

//************************************************************************
//*		Preview test
//************************************************************************

void StartPreviewCapture( void)
{ 
	camPviewCaptureCount	=	0;
	camPviewStatus			=	CAPTURING;

	EnablePreviewScaler();

	EnableImageCapturePreview();


	EnableImageCapture();


	


}

void PreviewCaptureStop(void)
{
	camPviewStatus	=	CAPTURE_STOP_ISSUED;
}

void CameraIF_PreviewISR(void)
{
	switch(camPviewStatus) {

	case CAPTURE_STOPPED	:					//	It will never happen.
			break;
			
	case CAPTURING	:
			break;

	case CAPTURE_STOP_ISSUED	:
			EnablePreviewLastIRQ();
			camPviewStatus	=	CAPTURE_LASTIRQ_ISSUED;
			break;

	case CAPTURE_LASTIRQ_ISSUED	:
			DisableImageCapture();
			DisableImageCapturePreview();
			DisablePreviewScaler();
			camPviewStatus	=	CAPTURE_LAST_IRQ;
			break;			

	case CAPTURE_LAST_IRQ	:
			camPviewStatus	=	CAPTURE_STOPPED;
			break;
	}

	if (camPviewCaptureCount>0)
		camPviewDataValid	=	1;
				
	camPviewCaptureCount++;	
}


void CameraPreview( void)
{
	unsigned int OutFormat=0;
	unsigned int *Codecframebuffer, *Previewframebuffer;
	int i, fb;
	

	InitCameraModule();
	
	switch(lcd_bpp)
	{
	case WINCONx_16BPP_565 : 
		OutFormat = OutFormat_RGB16B;
		break;
	case WINCONx_24BPP_888 : 
		OutFormat = OutFormat_RGB24B;
		break;
	}
       Previewframebuffer = (U32 *)CameraPreviewFrameBuffer;

	printf("Camera Preview path test.\n");

	camPviewStatus=CAPTURE_STOPPED;
	camPviewCaptureCount=0;
	camPviewDataValid=0;

	pISR_CAM	=	(unsigned int)CameraISR;
	rSUBSRCPND = BIT_SUB_CAM_P|BIT_SUB_CAM_C;
	ClearPending(BIT_CAM);
	rINTSUBMSK &= ~BIT_SUB_CAM_P;
	rINTMSK &= ~BIT_CAM;

	 for(i=0; i<480*800*2*4; i++) {
		*Previewframebuffer ++ = 0x0;
	}	

//       SetCameraWindowOffset(WINDOWOFFSET_ENABLE,0,0,1200,720); // jcs for offset test
  	rCIPRSCOS=(rCIPRSCOS& ~(0x1fff<<0))|(400<<0);
	
//	SetPreviewPath(CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, lcd_horizon_value, lcd_line_value, OutFormat); //org
       SetPreviewPath(CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, 400, 480, OutFormat);  // 400 x 480


//	SetPreviewPath(400, lcd_line_value, 400, lcd_line_value, OutFormat); // jcs for offset test
	SetPreviewFrameBuffer(CameraPreviewFrameBuffer, lcd_horizon_value, lcd_line_value, OutFormat); //org

	

      

//	SetPreviewFlipMode(FLIPMODE);
//	SetCameraTestPattern(TESTPATTERN);
	

 
	SetPreviewSource(PREVIEW_CAMERA);

	StartPreviewCapture();

	while (1) {
		if (camPviewDataValid) {
			camPviewDataValid = 0;
			i = (GetPreviewFrameCount()-2)&0x3;
			fb = GetPreviewFrameBuffer(i);

			*VIDWxADD0_Reg_Addr[0][0] = fb;
		}
		if (Uart_GetKey()== '\r') break;
	}

	PreviewCaptureStop();

	while(!(camPviewStatus==CAPTURE_STOPPED ));

	printf("\ncamPviewCaptureCount=%d\n",camPviewCaptureCount);
	printf("preview Status register:0x%x\n", rCIPRSTATUS);

	rINTMSK |= BIT_CAM;
	rINTSUBMSK |= BIT_SUB_CAM_P;
}


void CameraPreview_ScanLine_Offset( void)
{
	unsigned int OutFormat=0, InitOffset, LineOffset;
	int i, fb;
	unsigned int *Codecframebuffer, *Previewframebuffer;
	unsigned int TargetHsize, TargetVsize;//, StartPixelNumber;

	InitCameraModule();
	
	Previewframebuffer = (U32 *)CameraPreviewFrameBuffer;
	
	switch(lcd_bpp)
	{
	case WINCONx_16BPP_565 : 
		OutFormat = OutFormat_RGB16B;
		break;
	case WINCONx_24BPP_888 : 
		OutFormat = OutFormat_RGB24B;
		break;
	}

	printf("Camera Preview scanline offset test.\n");

	camPviewStatus=CAPTURE_STOPPED;
	camPviewCaptureCount=0;
	camPviewDataValid=0;

	pISR_CAM	=	(unsigned int)CameraISR;
	rSUBSRCPND = BIT_SUB_CAM_P|BIT_SUB_CAM_C;
	ClearPending(BIT_CAM);
	rINTSUBMSK &= ~BIT_SUB_CAM_P;
	rINTMSK &= ~BIT_CAM;

     	for(i=0; i<480*800*2*4; i++) {
		*Previewframebuffer ++ = 0x0;
	}	

	InitOffset=480;
	LineOffset=480;
//	SetPreviewPath(CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, lcd_horizon_value, lcd_line_value, OutFormat);
	SetPreviewPath(CameraModule[CAMTYPE].Hsize, CameraModule[CAMTYPE].Vsize, 320, 240, OutFormat);

//	SetPreviewFrameBuffer(CameraPreviewFrameBuffer, lcd_horizon_value, lcd_line_value, OutFormat);
	SetPreviewFrameBuffer_Scanline(CameraPreviewFrameBuffer, lcd_horizon_value, lcd_line_value, OutFormat, InitOffset, LineOffset);

   
		
	SetPreviewSource(PREVIEW_CAMERA);

	StartPreviewCapture();

	while (1) {
		if (camPviewDataValid) {
			camPviewDataValid = 0;
			i = (GetPreviewFrameCount()-2)&0x3;
			fb = GetPreviewFrameBuffer(i);

			*VIDWxADD0_Reg_Addr[0][0] = fb;
		}
		if (Uart_GetKey()== '\r') break;
	}

	PreviewCaptureStop();

	while(!(camPviewStatus==CAPTURE_STOPPED ));

	printf("\ncamPviewCaptureCount=%d\n",camPviewCaptureCount);
	printf("preview Status register:0x%x\n", rCIPRSTATUS);

	rINTMSK |= BIT_CAM;
	rINTSUBMSK |= BIT_SUB_CAM_P;
}


//************************************************************************
//*		MSDMA test
//************************************************************************

void MSDMAPreview( void)
{
	unsigned int OutFormat=0;
	unsigned int i,fb;

	InitCameraModule();
	

⌨️ 快捷键说明

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