📄 image_sensor.c
字号:
g_iPreviewExp = iExp; // keep the exposure of preview mode
CHANGE_TO_PAGE(4);
iTemp = read_cmos_sensor(0x10) & 0x7F;
write_cmos_sensor(0x10, iTemp); // disable AWB
if (pImage_Window->image_target_width < IMAGE_SENSOR_VGA_WIDTH &&
pImage_Window->image_target_height < IMAGE_SENSOR_VGA_HEIGHT) {
/********************************************
* This part captures image size under VGA *
********************************************/
if (pImage_Window->digital_zoom_factor >= (ISP_DIGITAL_ZOOM_INTERVAL << 1)) {
SET_TG_PIXEL_CLK_DIVIDER(3); // PCLK = [CLK divider] * MCLK
SET_CMOS_DATA_LATCH(2);
iMask = 0x01; // set CLK divider = 1/2
}
}else if (pImage_Window->image_target_width == IMAGE_SENSOR_VGA_WIDTH &&
pImage_Window->image_target_height == IMAGE_SENSOR_VGA_HEIGHT) {
/************************************************
* This part captures image size equal to VGA *
************************************************/
// HBLANK has no effect to exposure time for MC501CB, no need to update
// exposure for HBLANK change
#ifdef SLOW_DOWN_SENSOR_FOR_240X320_LCD
ConfigHBlank(HBLANK_EXTRA_CAMERA_VGA_CAPTURE_WITH_240x320_LCD);
#else
ConfigHBlank(HBLANK_EXTRA_CAMERA_VGA_CAPTURE);
#endif
if (pImage_Window->digital_zoom_factor == ISP_DIGITAL_ZOOM_INTERVAL) {
/****************************
* VGA capture w/o zoom *
****************************/
iMask = 0x00; // set CLK divider = 1x
}else if (pImage_Window->digital_zoom_factor <= (ISP_DIGITAL_ZOOM_INTERVAL << 1)) {
/****************************
* VGA capture <= 2x zoom *
****************************/
SET_TG_PIXEL_CLK_DIVIDER(3); // PCLK = [CLK divider] * MCLK
SET_CMOS_DATA_LATCH(2);
iMask = 0x01; // set CLK divider = 1/2
}else {
/****************************
* VGA capture > 2x zoom *
****************************/
SET_TG_PIXEL_CLK_DIVIDER(7); // PCLK = [CLK divider] * MCLK
SET_CMOS_DATA_LATCH(4);
iMask = 0x02; // set CLK divider = 1/4
}
}else if (pImage_Window->image_target_width > IMAGE_SENSOR_VGA_WIDTH &&
pImage_Window->image_target_height > IMAGE_SENSOR_VGA_HEIGHT) {
/********************************************
* This part captures image size over VGA *
********************************************/
if (pImage_Window->digital_zoom_factor == ISP_DIGITAL_ZOOM_INTERVAL) {
// no zoom
iMask = 0x02; // set CLK divider = 1/4
ConfigHBlank(HBLANK_EXTRA_CAMERA_SXGA_1xZOOM_CAPTURE);
}else if (pImage_Window->digital_zoom_factor <= ISP_DIGITAL_ZOOM_INTERVAL * 2) {
iMask = 0x03; // set CLK divider = 1/8
ConfigHBlank(HBLANK_EXTRA_CAMERA_SXGA_2xZOOM_CAPTURE);
}else if (pImage_Window->digital_zoom_factor <= ISP_DIGITAL_ZOOM_INTERVAL * 3) {
iMask = 0x03; // set CLK divider = 1/8
ConfigHBlank(HBLANK_EXTRA_CAMERA_SXGA_3xZOOM_CAPTURE);
}else {
iMask = 0x03; // set CLK divider = 1/8
ConfigHBlank(HBLANK_EXTRA_CAMERA_SXGA_4xZOOM_CAPTURE);
}
}
CHANGE_TO_PAGE(0);
iTemp = read_cmos_sensor(0x12) & 0xFC;
write_cmos_sensor(0x12, iTemp | iMask); // set CLK divider
// PCLK = [CLK divider] * MCLK
iExp >>= iMask; // adjust exposure time w.r.t. clock reduction
if (iExp < 1) {
iExp = 1;
}
// write new exposure time
CHANGE_TO_PAGE(3);
write_cmos_sensor(0x33, iExp >> 16);
write_cmos_sensor(0x34, (iExp >> 8) & 0x000000FF);
write_cmos_sensor(0x35, iExp & 0x000000FF);
}
// setup grab window
pImage_Window->grab_start_x = iStartX;
pImage_Window->grab_start_y = iStartY;
pImage_Window->exposure_window_width = IMAGE_SENSOR_VGA_WIDTH - iStartX;
pImage_Window->exposure_window_height = IMAGE_SENSOR_VGA_HEIGHT - iStartY;
} /* MC501CB_Capture() */
/*************************************************************************
* FUNCTION
* MC501CB_SetShutter
*
* DESCRIPTION
* This function set e-shutter of MC501CB to change exposure time.
*
* PARAMETERS
* shutter : exposured lines
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void MC501CB_SetShutter(kal_uint16 shutter)
{
} /* MC501CB_SetShutter */
/*************************************************************************
* FUNCTION
* MC501CB_SetGain
*
* DESCRIPTION
* This function is to set global gain to sensor.
*
* PARAMETERS
* iGain : sensor global gain(base: 0x40)
*
* RETURNS
* the actually gain set to sensor.
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint16 MC501CB_SetGain(kal_uint16 iGain)
{
return iGain;
} /* MC501CB_SetGain */
#if (!defined(DRV_ISP_6219_SERIES))
/*************************************************************************
* FUNCTION
* MC501CB_SetFlash
*
* DESCRIPTION
* Turn on/off MC501CB flashlight .
*
* PARAMETERS
* bEnable:
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void MC501CB_SetFlash(kal_bool bEnable)
{
} /* MC501CB_SetFlash */
#endif
/*************************************************************************
* FUNCTION
* MC501CB_Set_Para_Zoom
*
* DESCRIPTION
* MC501CB zoom setting.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 MC501CB_Set_Para_Zoom(kal_uint32 iPara)
{
// MC501CB not support zoom
switch (iPara) {
case CAM_ZOOM_1X:
case CAM_ZOOM_2X:
case CAM_ZOOM_4X:
default:
return KAL_FALSE;
}
return KAL_FALSE;
} /* MC501CB_Set_Para_Zoom */
/*************************************************************************
* FUNCTION
* MC501CB_Set_Para_Contrast
*
* DESCRIPTION
* MC501CB contrast setting.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 MC501CB_Set_Para_Contrast(kal_uint32 iPara)
{
// MC501CB not support contrast adjustment
return KAL_FALSE;
} /* MC501CB_Set_Para_Contrast */
/*************************************************************************
* FUNCTION
* MC501CB_Set_Para_Brightness
*
* DESCRIPTION
* MC501CB brightness setting.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 MC501CB_Set_Para_Brightness(kal_uint32 iPara)
{
// MC501CB not support brightness adjustment
return KAL_FALSE;
} /* MC501CB_Set_Para_Brightness */
/*************************************************************************
* FUNCTION
* MC501CB_Set_Para_Hue
*
* DESCRIPTION
* MC501CB hue setting.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 MC501CB_Set_Para_Hue(kal_uint32 iPara)
{
// MC501CB not support HUE adjustment
return KAL_FALSE;
} /* MC501CB_Set_Para_Hue */
/*************************************************************************
* FUNCTION
* MC501CB_Set_Para_Gamma
*
* DESCRIPTION
* MC501CB gamma setting.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 MC501CB_Set_Para_Gamma(kal_uint32 iPara)
{
// MC501CB not support GAMMA adjustment
return KAL_FALSE;
} /* MC501CB_Set_Para_Gamma */
/*************************************************************************
* FUNCTION
* MC501CB_Set_Para_WB
*
* DESCRIPTION
* MC501CB WB setting.
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
kal_uint32 MC501CB_Set_Para_WB(kal_uint32 iPara)
{
/****************************************************************************
* camera_para.AWB.LightSource[m][n] is in 0x80 base, i.e. 0x80 = 1x gain *
****************************************************************************/
// kal_uint16 iRGain = 0x80, iGGain = 0x80, iBGain = 0x80; // all set to 1x gain
kal_uint8 iTemp;
if (g_bCaptureMode == KAL_TRUE) {
return KAL_TRUE;
}
CHANGE_TO_PAGE(4);
iTemp = read_cmos_sensor(0x10);
switch (iPara) {
case CAM_WB_AUTO: // enable AWB
// the AUTO setting should be the same as
// initial setting in MC501CB_Write_Sensor_Initial_Setting
write_cmos_sensor(0x10, iTemp | 0x80); // enable AWB
/********************************************
* AWB mode shoule not specify RGB values. *
* this would affect AWB convergence in *
* cont. shot's color balance when swith *
* from capture to preview. *
********************************************/
// write_cmos_sensor(0x40, 0x3E); // RGAIN
// write_cmos_sensor(0x41, 0x20); // GGAIN
// write_cmos_sensor(0x42, 0x35); // BGAIN
write_cmos_sensor(0x43, 0x7F); // RMAX
write_cmos_sensor(0x44, 0x19); // RMIN
write_cmos_sensor(0x45, 0x5A); // BMAX
write_cmos_sensor(0x46, 0x19); // BMIN
break;
case CAM_WB_CLOUD: // 7000K
write_cmos_sensor(0x10, iTemp & 0x7F); // disable AWB
write_cmos_sensor(0x40, 0x4F); // RGAIN
write_cmos_sensor(0x41, 0x20); // GGAIN
write_cmos_sensor(0x42, 0x20); // BGAIN
write_cmos_sensor(0x43, 0x50); // RMAX
write_cmos_sensor(0x44, 0x45); // RMIN
write_cmos_sensor(0x45, 0x25); // BMAX
write_cmos_sensor(0x46, 0x20); // BMIN
break;
case CAM_WB_DAYLIGHT: // 6500K
write_cmos_sensor(0x10, iTemp & 0x7F); // disable AWB
write_cmos_sensor(0x40, 0x40); // RGAIN
write_cmos_sensor(0x41, 0x20); // GGAIN
write_cmos_sensor(0x42, 0x21); // BGAIN
write_cmos_sensor(0x43, 0x45); // RMAX
write_cmos_sensor(0x44, 0x40); // RMIN
write_cmos_sensor(0x45, 0x30); // BMAX
write_cmos_sensor(0x46, 0x25); // BMIN
break;
case CAM_WB_INCANDESCENCE: // 3000K
write_cmos_sensor(0x10, iTemp & 0x7F); // disable AWB
write_cmos_sensor(0x40, 0x2A); // RGAIN
write_cmos_sensor(0x41, 0x20); // GGAIN
write_cmos_sensor(0x42, 0x44); // BGAIN
write_cmos_sensor(0x43, 0x25); // RMAX
write_cmos_sensor(0x44, 0x20); // RMIN
write_cmos_sensor(0x45, 0x50); // BMAX
write_cmos_sensor(0x46, 0x45); // BMIN
break;
case CAM_WB_FLUORESCENT: // 5000K
write_cmos_sensor(0x10, iTemp & 0x7F); // disable AWB
write_cmos_sensor(0x40, 0x50); // RGAIN
write_cmos_sensor(0x41, 0x20); // GGAIN
write_cmos_sensor(0x42, 0x32); // BGAIN
write_cmos_sensor(0x43, 0x35); // RMAX
write_cmos_sensor(0x44, 0x30); // RMIN
write_cmos_sensor(0x45, 0x35); // BMAX
write_cmos_sensor(0x46, 0x30); // BMIN
break;
case CAM_WB_TUNGSTEN: // 4000K
write_cmos_sensor(0x10, iTemp & 0x7F); // disable AWB
write_cmos_sensor(0x40, 0x3A); // RGAIN
write_cmos_sensor(0x41, 0x20); // GGAIN
write_cmos_sensor(0x42, 0x3A); // BGAIN
write_cmos_sensor(0x43, 0x40); // RMAX
write_cmos_sensor(0x44, 0x35); // RMIN
write_cmos_sensor(0x45, 0x40); // BMAX
write_cmos_sensor(0x46, 0x35); // BMIN
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -