📄 isp_if.c
字号:
if(ae_awb_cal_complete==1)
{
ae_count++;
ae_count%=camera_oper_data.ae_awb_cal_period;
}
}
if(usbvideo_attr_setting_PU_index!=0)
usbvideo_camera_effect_background_setting_attr();
}
#endif //END_OF_WEBCAM_SUPPORT
if(wait_first_frame_flag==KAL_TRUE)
{
isp_preview_frame++;
if(isp_preview_frame==camera_oper_data.preview_delay_frame)
{
kal_set_eg_events(camera_isp_event_id,CAMERA_ISP_VD_READY_EVENT,KAL_OR);
wait_first_frame_flag=KAL_FALSE;
}
}
#if (!defined(MT6219))
else if((flashlight_operation_state == FLASHLIGHT_PRE_STROBE_STATE)||
(flashlight_operation_state == FLASHLIGHT_TRIGGER_STATE))
{ // Flash Light Control
flashlight_hisr();
if((flashlight_operation_state == FLASHLIGHT_PRE_STROBE_DONE_STATE)||
(flashlight_operation_state == FLASHLIGHT_TRIGGER_DONE_STATE))
kal_set_eg_events(camera_isp_event_id,CAMERA_ISP_VD_READY_EVENT,KAL_OR);
}
#endif
else
kal_set_eg_events(camera_isp_event_id,CAMERA_ISP_VD_READY_EVENT,KAL_OR);
IRQUnmask(IRQ_CAMERA_CODE);
}
#endif
#endif /* !(YUV_SENSOR_SUPPORT) */
#if (defined(MT6219))
if ((isp_digital_zoom_flag==KAL_TRUE)&&(isp_operation_state==ISP_MPEG4_ENCODE_STATE)&&
(isp_enter_exit_process_flag==KAL_FALSE))
{
kal_uint16 pixel_count,line_count;
pixel_count=*(volatile unsigned int *) 0x80690428;
line_count=*(volatile unsigned int *) 0x8069042C;
if ((img_dma_ibw2_int==KAL_TRUE)||((pixel_count==0)&&(line_count==0)))
{
img_dma_ibw2_int=KAL_FALSE;
SET_TG_GRAB_PIXEL(isp_grab_start_x,isp_grab_width);
SET_TG_GRAB_LINE(isp_grab_start_y,isp_grab_height);
ae_config(isp_grab_width,isp_grab_height);
SET_SUB_SAMPLE_MODE(isp_sub_sample_mode);
RESZ_Stop(SCENARIO_MPEG_ENCODE_ID);
stop_image_dma(SCENARIO_MPEG_ENCODE_ID);
IMGDMA_Close(SCENARIO_MPEG_ENCODE_ID);
(*(volatile unsigned int *) 0x80690404) &= ~1; /* disable IBW2 interrupt */
video_enc_reset_buffer_counter();
STOP_LCD_TRANSFER;
START_LCD_TRANSFER;
config_image_dma(SCENARIO_MPEG_ENCODE_ID,mpeg4_encode_data.image_target_width,
mpeg4_encode_data.image_target_height);
RESZ_SetSize(mpeg4_encode_data.image_source_width,mpeg4_encode_data.image_source_height,
mpeg4_encode_data.mpeg4_image_width,mpeg4_encode_data.mpeg4_image_height,
SCENARIO_MPEG_ENCODE_ID);
RESZ_Start(SCENARIO_MPEG_ENCODE_ID);
isp_digital_zoom_flag=KAL_FALSE;
ENABLE_CMOS_SESNOR;
DISABLE_CAMERA_IDLE_INT;
ENABLE_VIEW_FINDER_MODE;
ae_count=0;
hist_idx=0;
}
}
#endif /* replace 27/28 zoom setting to isp_ibw2_cb() */
#endif
} /* isp_HISR() */
/*************************************************************************
* FUNCTION
* init_isp_if
*
* DESCRIPTION
* initialize ISP interface
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void init_isp_if(void)
{
#if (defined(ISP_SUPPORT))
kal_uint32 save_irq_mask;
save_irq_mask=SaveAndSetIRQMask();
DRV_Reg(DRVPDN_CON3) &= (~DRVPDN_CON3_ISP); /* Power on ISP */
if (isp_sleep_mode_handler==0xFF)
isp_sleep_mode_handler = L1SM_GetHandle();
L1SM_SleepDisable(isp_sleep_mode_handler);
/* set the GPIO48 and GPIO49 mode as camera interface for RESET and PWRDN*/
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
GPIO_ModeSetup(48,1);
GPIO_ModeSetup(49,1);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
GPIO_ModeSetup(12,1);
GPIO_ModeSetup(13,1);
#endif
RestoreIRQMask(save_irq_mask);
/* configure CMOS sensor mode configuration register */
#if (defined(MT6219))
SET_VSYNC_POLARITY_LOW;
DISABLE_AUTO_HSYNC_PIXEL_CAL;
#endif
RESET_CMOS_SENSOR;
POWER_ON_CMOS_SENSOR;
ENABLE_CMOS_SESNOR;
DRV_WriteReg32(ISP_PREPROCESS_CTRL1_REG,0x80003100);
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228))
DISABLE_Y_LPF; /* TBD:LPF customization to camera_para */
DISABLE_C_LPF;
#endif
#if (defined(MT6228))
DISABLE_VERTICAL_LPF;
#endif
/* configure TG phase counter register */
SET_CMOS_FALLING_EDGE(1); //set to HW default
SET_TG_PIXEL_CLK_DIVIDER(1); //set to HW default
ENABLE_CAMERA_TG_PHASE_COUNTER;
ENABLE_CAMERA_CLOCK_OUTPUT_TO_CMOS;
/* debug function */
#if (defined(MT6219))
DISABLE_GMC_DEBUG_OUTPUT;
SET_GMC_RGB565_MODE;
DISABLE_DEBUG_DATA_COUNTER;
SET_DEBUG_OUTPUT_MODE(REG_DEBUG_GMC_OUTPUT_COUNT);
#endif
isp_first_preview_frame=KAL_TRUE;
isp_preview_2a_enable=0;
isp_operation_state=ISP_STANDBY_STATE;
isp_digital_zoom_factor=ISP_MIN_DIGITAL_ZOOM_FACTOR;
ENABLE_CAMERA_FRAME_READY_INT;
DISABLE_CAMERA_RESIZER_OVERRUN_INT;
DISABLE_CAMERA_IDLE_INT;
DISABLE_CAMERA_GMC_OVERRUN_INT;
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227))
// DISABLE_CAMERA_FRAME_READY_INT;
DISABLE_CAMERA_ISP_DONE_INT;
DISABLE_CAMERA_AE_DONE_INT;
DISABLE_CAMERA_ATF_DONE_INT;
DISABLE_CAMERA_AVSYNC_DONE_INT;
DISABLE_CAMERA_FLASH_DONE_INT;
ENABLE_CAMERA_VD_DONE_INT;
#elif (defined(MT6228))
// DISABLE_CAMERA_FRAME_READY_INT;
DISABLE_CAMERA_ISP_DONE_INT;
DISABLE_CAMERA_AE_DONE_INT;
DISABLE_CAMERA_ATF_DONE_INT;
ENABLE_CAMERA_VD_DONE_INT;
#elif (defined(MT6229)||defined(MT6230))
// DISABLE_CAMERA_FRAME_READY_INT;
DISABLE_CAMERA_ISP_DONE_INT;
DISABLE_CAMERA_AE_DONE_INT;
DISABLE_CAMERA_ATF_DONE_INT;
DISABLE_CAMERA_AVSYNC_DONE_INT;
DISABLE_CAMERA_FLASH_DONE_INT;
ENABLE_CAMERA_VD_DONE_INT;
#endif
if (camera_isp_event_id==NULL)
camera_isp_event_id=kal_create_event_group("ISP_EVT");
IRQ_Register_LISR(IRQ_CAMERA_CODE, camera_isp_LISR,"Camera ISR");
VISUAL_Register_HISR(VISUAL_CAMERA_HISR_ID,camera_isp_HISR);
IRQSensitivity(IRQ_CAMERA_CODE,LEVEL_SENSITIVE);
IRQUnmask(IRQ_CAMERA_CODE);
#if (!defined(MT6219))
cam_preview_cb = NULL;
cam_focus_cb = NULL;
/* default dsc_status setting */
dsc_status.dscmode = CAM_AUTO_DSC;
dsc_status.ae.metering = CAM_AE_METER_AUTO;
dsc_status.ae.flash = CAM_FLASH_AUTO;
dsc_status.af.trigger = CAM_AF_RELEASE;
dsc_status.af.mode = CAM_AF_AUTO_MODE;
dsc_status.af.metering = CAM_AF_SINGLE_ZONE;
dsc_status.af.mfdir = CAM_FOCUS_STOP;
#endif
/* default camera_oper_data setting */
camera_oper_data.ae_high_banding_target_enable = KAL_TRUE;
camera_oper_data.flare_camera_enable=KAL_FALSE;
camera_oper_data.flare_video_enable=KAL_FALSE;
camera_oper_data.ae_setting_sensor_gain_delay_frame=100;
camera_oper_data.preview_defect_table_enable=KAL_FALSE;
camera_oper_data.capture_defect_table_enable=KAL_FALSE;
camera_oper_data.shading_table_mode_set = CAMERA_SHADING_NORMAL_SET;/* select shading table mode */
#if (defined(YUV_SENSOR_SUPPORT)&&defined(AF_SUPPORT))
camera_oper_data.yuv_af_timeout_frame=20;
#endif
camera_oper_data.extreme_CT_fixWB_enable = KAL_FALSE;
camera_oper_data.outdoor_fixWB_enable = KAL_FALSE;
init_camera_operation_para(&camera_oper_data);
#if (!defined(YUV_SENSOR_SUPPORT))
if( (camera_oper_data.isp_pregain_max<BASEGAIN) || (camera_oper_data.sensor_pregain_max<BASEGAIN) ||
(camera_oper_data.shutter_compensate_max<BASEGAIN) || (camera_oper_data.pregain_compensate_max<BASEGAIN) )
ASSERT(0);
if((camera_oper_data.ae_smooth_upper_bound<camera_para.AE.TargetLum)||
(camera_oper_data.ae_smooth_lower_bound>camera_para.AE.TargetLum))
ASSERT(0);
if( (camera_oper_data.ae_awb_cal_period<=camera_oper_data.ae_setting_gain_delay_frame) ||
(camera_oper_data.ae_awb_cal_period<=camera_oper_data.ae_setting_shut_delay_frame) ||
(camera_oper_data.ae_awb_cal_period<=camera_oper_data.ae_setting_cal_delay_frame) )
ASSERT(0);
/* To prevent wait much long time */
if(camera_oper_data.preview_display_wait_frame>5)
camera_oper_data.preview_display_wait_frame=5;
/* To protect invalide value */
if(camera_oper_data.capture_delay_frame>3)
camera_oper_data.capture_delay_frame=1;
/* To protect invalide value */
if((camera_oper_data.preview_delay_frame>3)||(camera_oper_data.preview_delay_frame==0))
camera_oper_data.preview_delay_frame=1;
#else
/* To protect invalide value */
if(camera_oper_data.capture_delay_frame>3)
camera_oper_data.capture_delay_frame=1;
/* To protect invalide value */
if((camera_oper_data.preview_delay_frame>16)||(camera_oper_data.preview_delay_frame==0))
camera_oper_data.preview_delay_frame=1;
#endif /* YUV_SENSOR_SUPPORT */
#if (!defined(YUV_SENSOR_SUPPORT))
camera_oper_data.isp_pregain_min=BASEGAIN;
camera_oper_data.sensor_pregain_min=BASEGAIN;
if(camera_oper_data.pregain_mode==ISP_ONLY)
{
camera_oper_data.pregain_max = camera_oper_data.isp_pregain_max;
camera_oper_data.pregain_min = camera_oper_data.isp_pregain_min;
}
else if(camera_oper_data.pregain_mode==SENSOR_ONLY)
{
camera_oper_data.pregain_max = camera_oper_data.sensor_pregain_max;
camera_oper_data.pregain_min = camera_oper_data.sensor_pregain_min;
}
else
{
camera_oper_data.pregain_max = (camera_oper_data.isp_pregain_max)*(camera_oper_data.sensor_pregain_max)/BASEGAIN;
camera_oper_data.pregain_min = (camera_oper_data.isp_pregain_min)*(camera_oper_data.sensor_pregain_min)/BASEGAIN;
}
if(camera_oper_data.pregain_compensate_max > camera_oper_data.pregain_max)
ASSERT(0);
if(camera_oper_data.ae_setting_sensor_gain_delay_frame==100)
camera_oper_data.ae_setting_sensor_gain_delay_frame=camera_oper_data.ae_setting_gain_delay_frame;
#endif /* YUV_SENSOR_SUPPORT */
image_sensor_func_config();
init_ae_awb();
#if (!defined(MT6219))
if(dsc_support_info.dsccomp.flashlight==KAL_TRUE)
init_flashlight();
#endif
load_camera_para();
init_histogram_setting();
sensor_err_check=image_sensor_func->sensor_init();
image_sensor_func->get_sensor_size(&image_sensor_width,&image_sensor_height);
image_sensor_func->set_sensor_eshutter((kal_uint16)eShutter);
#if (!defined(YUV_SENSOR_SUPPORT))
#if (defined(AF_SUPPORT)&&(!defined(MT6219)))
if(dsc_support_info.dsccomp.autofocus==KAL_TRUE)
{
init_af();
lens_func_config();
lens_err_check=lens_func->lens_init();
lens_func->lens_power_on();
lens_func->lens_af_move_to((kal_int32)camera_lens.AF[camera_lens.INFO.af_home_idx].pos);
AF_step_move_log((kal_int16)camera_lens.AF[camera_lens.INFO.af_home_idx].pos);
dsc_status.af.index=camera_lens.INFO.af_home_idx;
af_operation_state=AF_STANDBY_STATE;
}
else
ASSERT(0);
init_af_operation_para(&af_oper_data);
#endif
#endif /* YUV_SENSOR_SUPPORT */
#if (defined(YUV_SENSOR_SUPPORT))
REG_ISP_LPF_CTRL|=0x00100000; //speed up isp date rate (enable isp internal buffer)
/* Clean OB and RAW gain */
SET_RAW_DATA_R_OFFSET_ADJ(0);
SET_RAW_DATA_GR_OFFSET_ADJ(0);
SET_RAW_DATA_B_OFFSET_ADJ(0);
SET_RAW_DATA_GB_OFFSET_ADJ(0);
#if(defined(MT6227)||defined(MT6229)||defined(MT6230))
REG_ISP_RAW_GAIN_CTRL1 = 0x00800080;
REG_ISP_RAW_GAIN_CTRL2 = 0x00800080;
#endif
#endif
#endif
} /* init_isp_if() */
void set_isp_interrupt_trigger_delay_lines(kal_uint16 lines)
{
isp_tg_delay_lines=lines;
if(isp_tg_delay_lines==0)
{
#if (defined(MT6219))
ENABLE_CAMERA_FRAME_READY_INT;
#elif (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230))
DISABLE_CAMERA_FLASH_DONE_INT;
ENABLE_CAMERA_VD_DONE_INT;
#elif (defined(MT6228))
DISABLE_CAMERA_TG_DONE_INT;
ENABLE_CAMERA_VD_DONE_INT;
tg_interrupt_flag=KAL_FALSE;
#endif
}
else
{
#if (defined(MT6219))
ENABLE_CAMERA_FRAME_READY_INT;
#elif (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230))
DISABLE_CAMERA_VD_DONE_INT;
ENABLE_CAMERA_FLASH_DONE_INT;
SET_CAMERA_FLASH_START_LINENO(isp_tg_delay_lines);
#elif (defined(MT6228))
DISABLE_CAMERA_VD_DONE_INT;
ENABLE_CAMERA_TG_DONE_INT;
if(isp_tg_delay_lines<8)
isp_tg_delay_lines=8;
SET_CAMERA_TG_START_LINENO(isp_tg_delay_lines>>3);
tg_interrupt_flag=KAL_TRUE;
#endif
}
}
void set_vd_blanking_lines(kal_uint32 lines)
{
vd_blanking_lines = lines;
}
kal_uint32 get_vd_blanking_lines(void)
{
return vd_blanking_lines;
}
kal_uint16 get_camera_frame_period(void)
{
kal_uint16 pixel_number, line_number;
kal_uint32 temp_period;
image_sensor_func->get_sensor_period(&pixel_number, &line_number);
temp_period=((kal_uint32) (pixel_number*isp_grab_height*(((DRV_Reg32(ISP_TG_PHASE_COUNTER_REG)&0xF0)>>4)+1)));
#if (defined(MCU_104M)||defined(MCU_52M))
isp_frame_period=(kal_uint16)(temp_period/52000);
#elif (defined(MCU_26M))
isp_frame_period=(kal_uint16)(temp_period/26000);
#endif
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
if((REG_ISP_TG_PHASE_COUNTER & REG_TGPC_PIXEL_CLK_SELECT_BIT)!= 0)
isp_frame_period=(kal_uint16)(temp_period/48000);
#endif
return isp_frame_period;
}
/*************************************************************************
* FUNCTION
* power_off_isp
*
* DESCRIPTION
* Turn off the ISP interface
*
* PARAMETERS
* None
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void power_off_isp(void)
{
#if (defined(ISP_SUPPORT))
kal_uint32 save_irq_mask;
if (isp_operation_state!=ISP_STANDBY_STATE)
ASSERT(0);
POWER_OFF_CMOS_SENSOR;
DISABLE_CMOS_SESNOR;
REG_ISP_VIEW_FINDER_MODE_CTRL=0; /* Clear ISP Pre/Cap Mode and disable view finder mode */
IRQMask(IRQ_CAMERA_CODE);
isp_operation_state=ISP_IDLE_STATE;
IRQMask(IRQ_SCCB_CODE);
isp_first_preview_frame=KAL_TRUE;
/* Set Low to MCLK */
SET_CMOS_FALLING_EDGE(0);
DISABLE_CAMERA_TG_PHASE_COUNTER;
DISABLE_CAMERA_CLOCK_OUTPUT_TO_CMOS;
save_irq_mask=SaveAndSetIRQMask();
DRV_Reg(DRVPDN_CON3) |= DRVPDN_CON3_ISP; /* Power off ISP */
DRV_Reg(DRVPDN_CON2) |= DRVPDN_CON2_SCCB; /* Power off SCCB */
if(image_sensor_func->sensor_power_off!=0)
{
image_sensor_func->sensor_power_off(); /* Power off Sensor */
}
RestoreIRQMask(save_irq_mask);
L1SM_SleepEnable(isp_sleep_mode_handler);
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227))
#ifndef __CUST_NEW__
if(dsc_support_info.dsccomp.flashlight==KAL_TRUE)
GPIO_ModeSetup(6,0); /* Flash Triger Pin Mux to GPIO Mode */
#endif /* __CUST_NEW__ */
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
#ifndef __CUST_NEW__
if(dsc_support_info.dsccomp.flashlight==KAL_TRUE)
GPIO_ModeSetup(0,0); /* Flash Triger Pin Mux to GPIO Mode */
#endif /* __CUST_NEW__ */
#endif
#if (defined(AF_SUPPORT)&&(!defined(MT6219)))
#if (defined(YUV_SENSOR_SUPPORT))
camera_operation_setting(CAM_AF_KEY, CAM_AF_RELEASE);
af_operation_state=AF_IDLE_STATE;
#else /* !(YUV_SENSOR_SUPPORT) */
if(dsc_support_info.dsccomp.autofocus==KAL_TRUE)
{
lens_func->lens_af_move_to((kal_int32)camera_lens.AF[camera_lens.INFO.af_home_idx].pos);
dsc_status.af.index=camera_lens.INFO.af_home_idx;
lens_func->lens_power_off();
af_operation_state=AF_IDLE_STATE;
}
#endif
#endif
#endif
} /* power_off_isp() */
void get_image_sensor_exposure_window(kal_uint16 *exposure_pixel, kal_uint16 *exposure_line)
{
*exposure_pixel=exposure_window.exposure_pixel;
*exposure_line=exposure_window.exposure_line;
} /* get_image_sensor_exposure_window() */
/*************************************************************************
* FUNCTION
* isp_contrast_setting
*
* DESCRIPTION
* This function is for setting the image contrast
*
* PARAMETERS
* contrast_level : ISP contrast gain level (0~127)
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void isp_contrast_setting(kal_uint8 contrast_level)
{
#if (defined(ISP_SUPPORT))
SET_Y_CONTRAST_GAIN((contrast_level>>1));
#endif
}
/*************************************************************************
* FUNCTION
* isp_bright_setting
*
* DESCRIPTION
* This function is for setting the image brightness
*
* PARAMETERS
* bright_level : ISP brightness value level
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*********************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -