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

📄 image_sensor.c

📁 mtk 6225平台
💻 C
📖 第 1 页 / 共 5 页
字号:
        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 + -