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

📄 camapi.c

📁 用于需要Camera驱动场合的驱动的原代码.如手机,监控设备等
💻 C
📖 第 1 页 / 共 3 页
字号:
	      		ret = FALSE;
	      else if (u16Status & u16IntFlag)	// received the related event
		      ret = TRUE;
		else
			ret  = FALSE;
	     
	}   
	CamWatchDogTimer(0,OFF); // stoptimer 
	CamInterruptMask(0xffff);
	CamCommandStatus();   // clear status	  
	if(sCamCtrlParam.bIntEnable == TRUE)
	{
		uhGPIOClearPendingInterrupt(CLC346_INT_PIN);
		uhGPIOEnableInterrupt(CLC346_INT_PIN);
	}	
	return ret;  
}	
CAM_CTRL_ERR_ENUM  CamCtrl_Init(CAM_CTRL_INIT_PARAM_STRUCT sInitParam,void func(CAMCTRL_OPERATION_EVENT_ENUM Mode, void *Param))
{
        

	if(eCamCtrlState != CAMCTRL_STATE_UNINITIALIZED)
		return CAM_CTRL_INVALID_STATE;
	sCamCtrlParam.eCurPreviewMode = SINGLE_SHOT;
	sCamCtrlParam.eJPEGResolution=   IMAGE_RES_QVGA;	
	sCamCtrlParam.eImageType = IMAGE_RES_QVGA;
	sCamCtrlParam.u16LCDWinSX  =sInitParam.u16ClientWinSX;
	sCamCtrlParam.u16LCDWinSY  =sInitParam.u16ClientWinSY;
	sCamCtrlParam.u16LCDWinWX = sInitParam.u16ClientWinWX;
	sCamCtrlParam.u16LCDWinWY = sInitParam.u16ClientWinWY;
	sCamCtrlParam.bIntEnable= sInitParam.bIntEnable;
	sCamCtrlParam.u16LCDHeight =sInitParam.u16LCDHeight;
      sCamCtrlParam.u16LCDWidth =sInitParam.u16LCDWidth;
	sCamCtrlParam.eCurLCD=MAIN_LCD;	
	sCamCtrlParam.u8SensorBright = 0x60;
	sCamCtrlParam.sZoomSetting.u16ZoomMin = SENSOR_HEIGTH/2;
	sCamCtrlParam.sZoomSetting.u16ZoomMax = SENSOR_HEIGTH;
	sCamCtrlParam.sZoomSetting.u16ZoomStepSize	= (SENSOR_HEIGTH-SENSOR_HEIGTH/2)/ZOOM_STEP;
	sCamCtrlParam.sZoomSetting.u16ZoomCurStep = ZOOM_STEP/2;	
	sCamCtrlParam.eCurRotation = IMAGE_ROTAION_NORMAL;
	sCamCtrlParam.sImageEffect.u16Parameter=69;
	sCamCtrlParam.sImageEffect.u16ImgEffectMode=IMAGE_EFFECT_NORMAL;
	sCamCtrlParam.sImageEffect.bGray=FALSE;
	sCamCtrlParam.sImageEffect.bHalfColorKey=FALSE;
	sCamCtrlParam.sImageEffect.bHalfImageVal=FALSE;
	sCamCtrlParam.sImageEffect.u16R_KeyValue =	0x00AA;
	sCamCtrlParam.sImageEffect.u16G_KeyValue =	0x00AA;
	sCamCtrlParam.sImageEffect.u16B_KeyValue =	0x00AA;
	sCamCtrlParam.sOSDOption.eOSDMode = OSD_NORMAL_DISP;
	sCamCtrlParam.sOSDOption.eOSDParameter =OSD_OVERLAY_75_25;
	sCamCtrlParam.sOSDOption.u16ChromaKeyValue	= 0x001F;
	sCamCtrlParam.sOSDOption.pOSDImg =NULL;
	sCamCtrlParam.sCShotSetting.eCaptureCounts =CSHOUT_COUNT_FIFTEEN;
	sCamCtrlParam.sCShotSetting.eImageSamplingRate = FRAME_SAMPLE_ONE;
	sCamCtrlParam.u16ImageQuality =  0x18;    
	pCallBackFunc =func;
//	if(sCamCtrlParam.bIntEnable)  InstallCamIntHandle();
       eCamCtrlState = CAMCTRL_STATE_INITIALIZED;
	return CAM_CTRL_ERR_NONE;    
}


CAM_CTRL_ERR_ENUM  CamCtrl_Open(void)
{

      UINT32 u32Addr,u32BufLen;
      UINT16   u16LowerAddr,u16UpperAddr;  
	if(eCamCtrlState != CAMCTRL_STATE_INITIALIZED) return CAM_CTRL_INVALID_STATE;  
      SetNormalMode();
      CamPreview_Off();  
      CamPreviewImageRotation_Skip(sCamCtrlParam.eCurRotation);   
      CamImageEffect( 0,IMAGE_EFFECT_NORMAL,
	  	                    sCamCtrlParam.sImageEffect.bGray,
	  	                    sCamCtrlParam.sImageEffect.bHalfColorKey,
	  	                    sCamCtrlParam.sImageEffect.bHalfImageVal);	
	CamLensEffectRColorKey(sCamCtrlParam.sImageEffect.u16R_KeyValue );
	CamLensEffectGColorKey(sCamCtrlParam.sImageEffect.u16G_KeyValue);
	CamLensEffectBColorKey(sCamCtrlParam.sImageEffect.u16B_KeyValue);
	
	CamOSDMode( sCamCtrlParam.sOSDOption.eOSDMode,
		                sCamCtrlParam.sOSDOption.eOSDParameter,
		                0);
	CamChromaKey(sCamCtrlParam.sOSDOption.u16ChromaKeyValue);
	SetJPEGResolution(sCamCtrlParam.eJPEGResolution);
	SetViewResolution(sCamCtrlParam.eJPEGResolution);

	u32BufLen =( ( sCamCtrlParam.u16LCDWinWX * sCamCtrlParam.u16LCDWinWY) & 0x3fff8)+ 0x8;
// we don't use the lcd buffer

	CamLowerLCDBuffer1Address(0xf000);
	CamUpperLCDBuffer1Address(0x3);
	CamLowerLCDBuffer2Address(0xf000);
	CamUpperLCDBuffer2Address(0x3);
// 
      ReadAsicCommand_Escape(LCDBUF1ADDRU,&u16UpperAddr);
      ReadAsicCommand_Escape(LCDBUF1ADDRL,&u16LowerAddr);
	u32Addr = ( ( u16UpperAddr <<16) |u16LowerAddr) - u32BufLen;
	
      CamLowerVideoBufferAddress(u32Addr & 0xffff);
      CamUpperVideoBufferAddress((u32Addr>>16) & 0xffff);

	ReadAsicCommand_Escape(VIDBUFADDRU,&u16UpperAddr);
	ReadAsicCommand_Escape(VIDBUFADDRL,&u16LowerAddr);  

	u32Addr = ( ( u16UpperAddr <<16) |u16LowerAddr) - u32BufLen;
	CamLowerOSDAddress(u32Addr & 0xffff);
      CamUpperOSDAddress((u32Addr>>16) & 0xffff);

      CamFrameSamplingInterval(1,FALSE);	
	CamJPEGQuantizationFactor(sCamCtrlParam.u16ImageQuality);  
      CamMainLCDInit();
      
 #if (defined(SUB_LCD_ENABLE))
       CamSubLCDInit();
#endif
	CamSensorInit();
	CamInterruptMask(0xffff);
	CamWatchDogTimer(0,OFF);  
	CamCommandStatus();    // clear status
	if(sCamCtrlParam.bIntEnable ==TRUE)
	{
		uhGPIOClearPendingInterrupt(CLC346_INT_PIN);
      		uhGPIOEnableInterrupt(CLC346_INT_PIN); 
	}
	eCamCtrlState =CAMCTRL_STATE_OPEN;
	return CAM_CTRL_ERR_NONE;  
}	


CAM_CTRL_ERR_ENUM  CamCtrl_Close(void)
{
      
	if((eCamCtrlState ==  CAMCTRL_STATE_UNINITIALIZED)
	   	||(eCamCtrlState ==  CAMCTRL_STATE_INITIALIZED))
      		return CAM_CTRL_INVALID_STATE;  
	   
	CamPreview_Off();
	CamInterruptMask(0xffff);  // mask all the interrupt  
	CamWatchDogTimer(0,OFF);
	CamSensorPowerSupply(LOW);      
	SetBypassMode();
	uhGPIODisableInterrupt(CLC346_INT_PIN);  
	eCamCtrlState =CAMCTRL_STATE_INITIALIZED;  
	return CAM_CTRL_ERR_NONE;  
}


CAM_CTRL_ERR_ENUM CamCtrl_ChangeImageQuality(CAM_IMAGE_QUALITY_ENUM  eImgQuality) 
{
      
	   
	if(eCamCtrlState ==  CAMCTRL_STATE_UNINITIALIZED)
		return CAM_CTRL_INVALID_STATE;    
	switch(eImgQuality)
	{
	case IMAGE_QUALITY_HIGH:
		sCamCtrlParam.u16ImageQuality = 0x10;
		break;
	case IMAGE_QUALITY_MIDIUM:
		sCamCtrlParam.u16ImageQuality = 0x18;
		break;
	case IMAGE_QUALITY_LOW:
		sCamCtrlParam.u16ImageQuality = 0x30;
		break;
	default: return CAM_CTRL_INVALID_PARAMS;	
	 	
	}
	if(eCamCtrlState == CAMCTRL_STATE_ON_PREVIEW)
	{
	 	CamPreview_Off();  	
	 	CamJPEGQuantizationFactor(sCamCtrlParam.u16ImageQuality);
	 	CamPreview_On(); 	
	}	
	  return CAM_CTRL_ERR_NONE;
}

CAM_CTRL_ERR_ENUM CamCtrl_ChangeImageSize(CAM_IMAGE_RESOLUTION_ENUM eResolution)
{
      
   	if(eCamCtrlState ==  CAMCTRL_STATE_UNINITIALIZED)
		return CAM_CTRL_INVALID_STATE;    
	sCamCtrlParam.eImageType  = eResolution;
	sCamCtrlParam.eJPEGResolution= eResolution;
	if(eCamCtrlState == CAMCTRL_STATE_ON_PREVIEW)
		OnPreView(sCamCtrlParam.eJPEGResolution);
	return CAM_CTRL_ERR_NONE;
}

CAM_CTRL_ERR_ENUM CamCtrl_ChangeImageEffect(CAM_IMAGE_EFFECT_ENUM eImgEffect)
{
	 
   	if(eCamCtrlState ==  CAMCTRL_STATE_UNINITIALIZED)
		return CAM_CTRL_INVALID_STATE;    
	sCamCtrlParam.sImageEffect.u16ImgEffectMode = eImgEffect;
	if(eCamCtrlState ==	CAMCTRL_STATE_ON_PREVIEW) 
	{	
	 	CamPreview_Off();
		if(sCamCtrlParam.sImageEffect.u16ImgEffectMode ==IMAGE_EFFECT_GRAY)
			CamImageEffect(0,0,1,0,0);
		else
	      		CamImageEffect(sCamCtrlParam.sImageEffect.u16Parameter,
	      						 sCamCtrlParam.sImageEffect.u16ImgEffectMode,
	      						 sCamCtrlParam.sImageEffect.bGray,
	      						 sCamCtrlParam.sImageEffect.bHalfColorKey,
	      						 sCamCtrlParam.sImageEffect.bHalfImageVal);
	
	 	CamPreview_On(); 	
	}
	 return CAM_CTRL_ERR_NONE;

}

CAM_CTRL_ERR_ENUM CamCtrl_ChangeImageRotation(CAM_IMAGE_ROTAION_ENUM eRotation)
{
	
   	if(eCamCtrlState ==  CAMCTRL_STATE_UNINITIALIZED)
		return CAM_CTRL_INVALID_STATE;      
	sCamCtrlParam.eCurRotation = eRotation;
	if(eCamCtrlState == CAMCTRL_STATE_ON_PREVIEW)
	{
		CamPreview_Off();
		CamPreviewImageRotation_Skip(sCamCtrlParam.eCurRotation);
	      CamPreview_On(); 	
	}
	 return CAM_CTRL_ERR_NONE;

}
CAM_CTRL_ERR_ENUM  CamCtrl_ChangeZoom(CAM_IMAGE_ZOOM_ENUM eZoom)
{

	if(eCamCtrlState !=  CAMCTRL_STATE_ON_PREVIEW)
		return CAM_CTRL_INVALID_STATE;     
	
	if(eZoom == ZOOM_IN) // Zoom In
	{
		if(sCamCtrlParam.sZoomSetting.u16ZoomCurStep<ZOOM_STEP)
			sCamCtrlParam.sZoomSetting.u16ZoomCurStep++;			
	}
	else if(eZoom == ZOOM_OUT)  // Zoom Out
	{
		if(sCamCtrlParam.sZoomSetting.u16ZoomCurStep>0)
			sCamCtrlParam.sZoomSetting.u16ZoomCurStep--;			
	}
	else return CAM_CTRL_INVALID_PARAMS;
      sCamCtrlParam.u16JPEGWY								=	
		(sCamCtrlParam.sZoomSetting.u16ZoomMax-sCamCtrlParam.sZoomSetting.u16ZoomStepSize*sCamCtrlParam.sZoomSetting.u16ZoomCurStep);
	sCamCtrlParam.u16JPEGWX								=	
		sCamCtrlParam.u16JPEGWY*SENSOR_WIDTH/SENSOR_HEIGTH;
	sCamCtrlParam.u16JPEGSX								=	
		((SENSOR_WIDTH - sCamCtrlParam.u16JPEGWX)/2)/4*4;
	sCamCtrlParam.u16JPEGSY								=	
		((SENSOR_HEIGTH - sCamCtrlParam.u16JPEGWY)/2)/4*4;
	sCamCtrlParam.u16JPEGWX								=	
		(SENSOR_WIDTH-sCamCtrlParam.u16JPEGSX*2);
	sCamCtrlParam.u16JPEGWY								=	
		(SENSOR_HEIGTH-sCamCtrlParam.u16JPEGSY*2);

	sCamCtrlParam.u16ViewWY								=	
		sCamCtrlParam.u16JPEGWY;
	sCamCtrlParam.u16ViewWX								=	
		sCamCtrlParam.u16ViewWY*sCamCtrlParam.u16LCDWinWX/sCamCtrlParam.u16LCDWinWY;	
	sCamCtrlParam.u16ViewSX								=	
		((SENSOR_WIDTH - sCamCtrlParam.u16ViewWX)/2)/4*4;
	sCamCtrlParam.u16ViewSY								=	
		((SENSOR_HEIGTH - sCamCtrlParam.u16ViewWY)/2)/4*4;
	sCamCtrlParam.u16ViewWX								=	
		(SENSOR_WIDTH-sCamCtrlParam.u16ViewSX*2);
	sCamCtrlParam.u16ViewWY								=	
		(SENSOR_HEIGTH-sCamCtrlParam.u16ViewSY*2);
	sCamCtrlParam.u16ViewTargetX							=	sCamCtrlParam.u16LCDWinWX;
	sCamCtrlParam.u16ViewTargetY							=	sCamCtrlParam.u16LCDWinWY;

	CamPreview_Off();
	  
	SetViewWindowSize(
		sCamCtrlParam.u16ViewSX, sCamCtrlParam.u16ViewSY, 
		sCamCtrlParam.u16ViewWX, sCamCtrlParam.u16ViewWY, 
		sCamCtrlParam.u16ViewTargetX, sCamCtrlParam.u16ViewTargetY);
/*  does the jpeg window need to chang? */	
	SetJPEGWindowSize(
		sCamCtrlParam.u16JPEGSX, sCamCtrlParam.u16JPEGSY, 
		sCamCtrlParam.u16JPEGWX, sCamCtrlParam.u16JPEGWY, 
		sCamCtrlParam.u16JPEGTargetX, sCamCtrlParam.u16JPEGTargetY);
	CamPreview_On();
       return CAM_CTRL_ERR_NONE;
}

CAM_CTRL_ERR_ENUM CamCtrl_ChangeBright(CAM_IMAGE_BRIGHT_ENUM  eBright)
{
    
	if(eCamCtrlState !=  CAMCTRL_STATE_ON_PREVIEW)
		return CAM_CTRL_INVALID_STATE;    
	if(eBright == BRIGHT_HIGHER)
	{
      	 	if(sCamCtrlParam.u8SensorBright<SENSOR_BRIGHT_MAX)
			sCamCtrlParam.u8SensorBright+= SENSOR_BRIGHT_STEP_SIZE;	
	 	else  CAM_CTRL_OPERATION_FAILED;
    	}
   	else if (eBright == BRIGHT_LOWER)	
    	{
	 	if(sCamCtrlParam.u8SensorBright>SENSOR_BRIGHT_MIN)
			sCamCtrlParam.u8SensorBright-= SENSOR_BRIGHT_STEP_SIZE;	
	 	else  CAM_CTRL_OPERATION_FAILED;	
    	}
	else return CAM_CTRL_INVALID_PARAMS;	
	CamChangeBright(sCamCtrlParam.u8SensorBright);
	return  CAM_CTRL_ERR_NONE;	 
}


CAM_CTRL_ERR_ENUM CamCtrl_SetSinglePreview(void)
{
	if((eCamCtrlState == CAMCTRL_STATE_UNINITIALIZED)
	   ||(eCamCtrlState == CAMCTRL_STATE_INITIALIZED))	
		return CAM_CTRL_INVALID_STATE;    
	sCamCtrlParam.eCurPreviewMode  = SINGLE_SHOT;
	sCamCtrlParam.eJPEGResolution =   sCamCtrlParam.eImageType;   
	CamPreview_Off();
	CamFrameSamplingInterval(1,0);
	CamJPEGQuantizationFactor(sCamCtrlParam.u16ImageQuality);
	CamOSDMode(OSD_NORMAL_DISP,0,0);   
	OnPreView(sCamCtrlParam.eJPEGResolution);
	eCamCtrlState = CAMCTRL_STATE_ON_PREVIEW;
	return  CAM_CTRL_ERR_NONE; 

}


CAM_CTRL_ERR_ENUM CamCtrl_SetOSDPreview(CAM_OSD_OPTION_STRUCT sOSDOption)
{
	UINT16  u16Addr;
	if((eCamCtrlState == CAMCTRL_STATE_UNINITIALIZED)
	   ||(eCamCtrlState == CAMCTRL_STATE_INITIALIZED))	
		return CAM_CTRL_INVALID_STATE;   
	sCamCtrlParam.eCurPreviewMode  = SINGLE_SHOT;
	sCamCtrlParam.eJPEGResolution =   sCamCtrlParam.eImageType;  
	sCamCtrlParam.sOSDOption.eOSDMode = sOSDOption.eOSDMode;
	sCamCtrlParam.sOSDOption.eOSDParameter = sOSDOption.eOSDParameter;
	sCamCtrlParam.sOSDOption.u16ChromaKeyValue = sOSDOption.u16ChromaKeyValue;	   
	CamPreview_Off();	
	CamFrameSamplingInterval(1,0);
	CamJPEGQuantizationFactor(sCamCtrlParam.u16ImageQuality);
	CamChromaKey(sCamCtrlParam.sOSDOption.u16ChromaKeyValue);  
	CamOSDMode(sOSDOption.eOSDMode, sOSDOption.eOSDParameter,0);
	if(sOSDOption.eOSDMode != OSD_NORMAL_DISP)
	{
             if(sOSDOption.pOSDImg == NULL)
			return CAM_CTRL_INVALID_PARAMS;
		sCamCtrlParam.eCurPreviewMode  =  OSD_SHOT;	 
		u16Addr = CamGetLowerOSDAddress();
		CamLowerSRAMStartAddress(u16Addr);
		u16Addr =  CamGetUpperOSDAddress();
		CamUpperSRAMStartAddress(u16Addr);
		CamStillImageDownload();	
		CamWriteSram(sOSDOption.pOSDImg,sCamCtrlParam.u16LCDWinWX*sCamCtrlParam.u16LCDWinWY*2);
		CamPreview_Off();
		CamUpperSRAMStartAddress(0);
		CamLowerSRAMStartAddress(0);
//		WaitTime_us(1000);
		sCamCtrlParam.eJPEGResolution = IMAGE_RES_OSD;
	}
	OnPreView(sCamCtrlParam.eJPEGResolution);
	eCamCtrlState = CAMCTRL_STATE_ON_PREVIEW;
	return  CAM_CTRL_ERR_NONE;
}


CAM_CTRL_ERR_ENUM CamCtrl_SetContinuousPreview(CAM_CONTINUOUSSHOT_SETTING_STRUCT sSetting)
{

      if((eCamCtrlState == CAMCTRL_STATE_UNINITIALIZED)
	   ||(eCamCtrlState == CAMCTRL_STATE_INITIALIZED))	
		return CAM_CTRL_INVALID_STATE;    
	sCamCtrlParam.eCurPreviewMode = CONTINUOUS_SHOT;
	sCamCtrlParam.eJPEGResolution = sCamCtrlParam.eImageType;
	sCamCtrlParam.sCShotSetting.eImageSamplingRate  = sSetting.eImageSamplingRate;
	sCamCtrlParam.sCShotSetting.eCaptureCounts = sSetting.eCaptureCounts;
	if((sCamCtrlParam.eJPEGResolution == IMAGE_RES_VGA)
	    &&( sSetting.eCaptureCounts >3))
              sCamCtrlParam.sCShotSetting.eCaptureCounts  =3;
	CamOSDMode(OSD_NORMAL_DISP,0,0);  
	CamJPEGQuantizationFactor(sCamCtrlParam.u16ImageQuality);
	OnPreView(sCamCtrlParam.eJPEGResolution);
	eCamCtrlState = CAMCTRL_STATE_ON_PREVIEW;
	return  CAM_CTRL_ERR_NONE;

}

CAM_CTRL_ERR_ENUM CamCtrl_SetMoviePreview(CAM_MOVIESHOT_SETTING_STRUCT  sSetting)
{
      if((eCamCtrlState == CAMCTRL_STATE_UNINITIALIZED)
	   ||(eCamCtrlState == CAMCTRL_STATE_INITIALIZED))	
		return CAM_CTRL_INVALID_STATE; 
      sCamCtrlParam.eCurPreviewMode = MOVIE_SHOT;
      sCamCtrlParam.eJPEGResolution = IMAGE_RES_MOVIE;
	sCamCtrlParam.sMShotSetting.eImageSamplingRate =sSetting.eImageSamplingRate;
	CamOSDMode(OSD_NORMAL_DISP,0,0);  
	CamJPEGQuantizationFactor(sCamCtrlParam.u16ImageQuality);
	OnPreView(sCamCtrlParam.eJPEGResolution);
	eCamCtrlState = CAMCTRL_STATE_ON_PREVIEW;  
	return  CAM_CTRL_ERR_NONE;

}


CAM_CTRL_ERR_ENUM CamCtrl_CaptureImage(void)
{
    UINT16 u16IntFlag,u16WaitTime;
    UINT16 u16CamFunction;	

     if(eCamCtrlState != CAMCTRL_STATE_ON_PREVIEW)
	   return CAM_CTRL_INVALID_STATE; 
    CamUpperSRAMStartAddress(0);
    CamLowerSRAMStartAddress(0);

⌨️ 快捷键说明

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