📄 camapi.c
字号:
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 + -