📄 isp_cct_if.c
字号:
extmem_init((kal_uint32 *) isp_preview_config_data.extmem_start_address,
isp_preview_config_data.extmem_size);
#endif
lcd_data.module_id=LCD_UPDATE_MODULE_MEDIA;
lcd_data.lcd_id=isp_preview_config_data.lcd_id;
lcd_data.fb_update_mode=LCD_HW_TRIGGER_MODE;
lcd_data.lcm_start_x=isp_preview_config_data.lcm_start_x;
lcd_data.lcm_start_y=isp_preview_config_data.lcm_start_y;
lcd_data.lcm_end_x=isp_preview_config_data.lcm_end_x;
lcd_data.lcm_end_y=isp_preview_config_data.lcm_end_y;
lcd_data.roi_offset_x=isp_preview_config_data.roi_offset_x;
lcd_data.roi_offset_y=isp_preview_config_data.roi_offset_y;
lcd_data.update_layer=isp_preview_config_data.update_layer;
lcd_data.hw_update_layer=isp_preview_config_data.hw_update_layer;
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
isp_preview_config_data.ae_metering_mode = isp_cct_data->ae_metering_mode;
isp_preview_config_data.iso_setting = isp_cct_data->iso_setting;
/* Prepare IPP Data */
ipp_cct_preview_data.intmem_start_address = isp_cct_data->intmem_start_address;
ipp_cct_preview_data.intmem_size = isp_cct_data->intmem_size;
ipp_cct_preview_data.extmem_start_address = isp_cct_data->extmem_start_address;
ipp_cct_preview_data.extmem_size = isp_cct_data->extmem_size;
ipp_cct_preview_data.image_src_width = isp_preview_config_data.source_width;
ipp_cct_preview_data.image_src_height = isp_preview_config_data.source_height;
ipp_cct_preview_data.preview_width = isp_preview_config_data.target_width;
ipp_cct_preview_data.preview_height = isp_preview_config_data.target_height;
ipp_cct_preview_data.image_pitch_mode = isp_cct_data->image_pitch_mode;
ipp_cct_preview_data.image_data_format = isp_cct_data->image_data_format;
ipp_cct_preview_data.image_pitch_bytes = isp_cct_data->image_pitch_bytes;
ipp_cct_preview_data.overlay_frame_mode = KAL_FALSE;
ipp_cct_preview_data.frame_buffer_address = isp_cct_data->frame_buffer_address;
ipp_cct_preview_data.frame_buffer_size = isp_cct_data->frame_buffer_size;
ipp_cct_preview_data.frame_buffer_address1 = isp_cct_data->frame_buffer_address;
ipp_cct_preview_data.frame_buffer_size1 = isp_cct_data->frame_buffer_size;
ipp_cct_preview_data.tv_output = KAL_FALSE;
/* Prepare LCD Data */
lcd_data.roi_background_color = isp_cct_data->roi_background_color;
lcd_data.hw_trigger_src = LCD_HW_TRIGGER_IBW2;
lcd_data.tv_output = KAL_FALSE;
lcd_data.memory_output = KAL_FALSE;
lcd_data.block_mode_flag = KAL_TRUE;
#endif
lcd_fb_update(&lcd_data);
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
config_image_dma(scenerio_id,isp_cct_data->target_width,isp_cct_data->target_height);
config_image_processor(scenerio_id);
config_pixel_resizer(scenerio_id);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
open_image_data_path(scenerio_id);
config_camera_preview_data_path(scenerio_id,&ipp_cct_preview_data);
#endif
isp_operation_state=ISP_PREVIEW_STATE;
#if (!defined(MT6219))
/* camera operation setting */
camera_operation_setting(CAM_DSC_MODE,isp_preview_config_data.dsc_mode);
camera_operation_setting(CAM_AE_METERING,isp_preview_config_data.ae_metering_mode);
camera_operation_setting(CAM_AF_MODE,isp_preview_config_data.af_mode);
camera_operation_setting(CAM_AF_METERING,isp_preview_config_data.af_metering_mode);
camera_operation_setting(CAM_SHUTTER_PRIORITY,isp_preview_config_data.tv_setting);
camera_operation_setting(CAM_APERTURE_PRIORITY,isp_preview_config_data.av_setting);
camera_operation_setting(CAM_ISO,isp_preview_config_data.iso_setting);
camera_operation_setting(CAM_FLASH_MODE,isp_preview_config_data.flash_mode);
#endif
/* disable gamma 1024 */
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230))
DISABLE_1024_GAMMA_TABLE
#endif
kal_set_eg_events(camera_isp_event_id,0,KAL_AND);
wait_first_frame_flag=KAL_TRUE;
isp_preview_frame=0;
SET_CAMERA_PREVIEW_MODE;
SET_CAMERA_FRAME_RATE(0);
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230)||defined(MT6228))
// Enable AE Count before Start Preview
REG_ISP_PREPROCESS_CTRL2 &= ~REG_PREPROCESS2_AE_COUNT_CLEAR_BIT;
ENABLE_AE_COUNT;
#endif
#if (defined(MT6228))
RESET_ISP;
CLEAR_RESET_ISP;
#endif
ENABLE_VIEW_FINDER_MODE;
/* wait sensor first frame coming */
#if (defined(MT6219))
kal_retrieve_eg_events(camera_isp_event_id,CAMERA_ISP_FRAME_READY_EVENT,KAL_OR_CONSUME,
&event_group,KAL_SUSPEND);
#else
kal_retrieve_eg_events(camera_isp_event_id,CAMERA_ISP_VD_READY_EVENT,KAL_OR_CONSUME,
&event_group,KAL_SUSPEND);
#endif
isp_first_preview_frame=KAL_FALSE;
switch_cap_en = KAL_TRUE;
}
kal_uint8 camera_capture_cct(camera_capture_cct_struct *isp_cct_data)
{
kal_uint32 event_group;
kal_int16 isp_grab_start_x,isp_grab_start_y;
kal_uint32 isp_capture_shutter;
kal_uint16 isp_capture_pregain;
kal_uint32 i;
kal_uint8 ret_code = KAL_TRUE;
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
kal_uint8 sub_sample=0;
#endif
if (isp_operation_state!=ISP_STANDBY_STATE)
ASSERT(0);
ENABLE_CMOS_SESNOR;
exposure_window.image_target_width=isp_cct_data->grab_width;
exposure_window.image_target_height=isp_cct_data->grab_height;
exposure_window.digital_zoom_factor=10;
if(switch_cap_en == KAL_TRUE)
{
if(camera_oper_data.enable_cap_shutter_compensate==KAL_TRUE)
{
if((pregain>=camera_oper_data.shutter_compensate_max)&&
(eShutter<MAX_EXPOSURE_LINES))
{
sensor_config_data.enable_shutter_tansfer=KAL_TRUE;
isp_capture_shutter=eShutter*pregain/camera_oper_data.shutter_compensate_max;
if(isp_capture_shutter>MAX_EXPOSURE_LINES)
isp_capture_shutter=MAX_EXPOSURE_LINES;
if(isp_capture_shutter>BaseShutter)
isp_capture_shutter=(isp_capture_shutter/BaseShutter)*BaseShutter;
isp_capture_pregain=eShutter*pregain/isp_capture_shutter;
if(isp_capture_pregain>camera_oper_data.pregain_max)
isp_capture_pregain=camera_oper_data.pregain_max;
ae_set_pregain(isp_capture_pregain);
sensor_config_data.capture_shutter=isp_capture_shutter;
}
else
sensor_config_data.enable_shutter_tansfer=KAL_FALSE;
}
else
sensor_config_data.enable_shutter_tansfer=KAL_FALSE;
// meta mode capture
if((isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RAW_8BIT)|| // EXT Capture
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RAW_10BIT)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_YUV)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RGB888)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RGB565))
sensor_config_data.meta_mode = CAPTURE_MODE_META_EXT;
else
sensor_config_data.meta_mode = CAPTURE_MODE_META;
#if (!defined(MT6219))
if(isp_cct_data->flash_mode == CAM_FLASH_ON)
{
ret_code = adjust_flashlight_param(isp_cct_data->curr_lum, isp_cct_data->target_lum);
AWB_Rgain = device_support_info.autoflash.fwb_rgain;
AWB_GRgain = AWB_GBgain = device_support_info.autoflash.fwb_ggain;
AWB_Bgain = device_support_info.autoflash.fwb_bgain;
awb_set_gain();
sensor_config_data.capture_shutter=device_support_info.autoflash.shutter;
sensor_config_data.enable_shutter_tansfer=KAL_TRUE;
}
#endif
image_sensor_func->sensor_capture_setting(&exposure_window,&sensor_config_data);
}
isp_grab_start_x=exposure_window.grab_start_x;
isp_grab_start_y=exposure_window.grab_start_y;
#if (defined(MT6219))
SET_TG_GRAB_PIXEL(isp_grab_start_x+(isp_cct_data->grab_start_x),isp_cct_data->grab_width);
SET_TG_GRAB_LINE(isp_grab_start_y+(isp_cct_data->grab_start_y),isp_cct_data->grab_height);
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
if((isp_cct_data->debug_mode == CAPTRUE_MODE_YUV)|| // YUV Capture
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_YUV))
{
SET_TG_GRAB_PIXEL(isp_grab_start_x+(isp_cct_data->grab_start_x),isp_cct_data->grab_width);
SET_TG_GRAB_LINE(isp_grab_start_y+(isp_cct_data->grab_start_y),isp_cct_data->grab_height);
}
else if((isp_cct_data->debug_mode == CAPTRUE_MODE_RAW_8BIT)|| // RAW/RGB output
(isp_cct_data->debug_mode == CAPTRUE_MODE_RAW_10BIT)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RAW_8BIT)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RAW_10BIT)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_RGB888)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_RGB565)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RGB888)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RGB565))
{
SET_TG_GRAB_PIXEL(isp_grab_start_x+(isp_cct_data->grab_start_x),(isp_cct_data->grab_width)+4-6);
SET_TG_GRAB_LINE(isp_grab_start_y+(isp_cct_data->grab_start_y),(isp_cct_data->grab_height)+2-6);
}
#elif (defined(MT6227)||defined(MT6226M)||defined(MT6226))
if((isp_cct_data->debug_mode == CAPTRUE_MODE_YUV)|| // YUV Capture
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_YUV))
{
/* set grab window with full size for shading work around */
SET_TG_GRAB_PIXEL(isp_grab_start_x,exposure_window.exposure_window_width);
SET_TG_GRAB_LINE(isp_grab_start_y,exposure_window.exposure_window_height);
}
else if((isp_cct_data->debug_mode == CAPTRUE_MODE_RAW_8BIT)|| // RAW/RGB output
(isp_cct_data->debug_mode == CAPTRUE_MODE_RAW_10BIT)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RAW_8BIT)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RAW_10BIT)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_RGB888)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_RGB565)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RGB888)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RGB565))
{
SET_TG_GRAB_PIXEL(isp_grab_start_x+(isp_cct_data->grab_start_x),isp_cct_data->grab_width);
SET_TG_GRAB_LINE(isp_grab_start_y+(isp_cct_data->grab_start_y),isp_cct_data->grab_height+2-4);
}
#endif
/* set gamma 1024 */
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230))
apply_take_image_with_gamma_1024_by_flag();
#endif
#if (defined(MT6219))
SET_SUB_SAMPLE_MODE(isp_cct_data->sub_sample_mode);
if((isp_cct_data->debug_mode == CAPTRUE_MODE_YUV)|| // YUV Capture
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_YUV))
{
/* YUV ouput */
SET_GMC_RGB565_MODE;
}
else if((isp_cct_data->debug_mode == CAPTRUE_MODE_RAW_8BIT)|| // RAW/RGB output
(isp_cct_data->debug_mode == CAPTRUE_MODE_RAW_10BIT)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RAW_8BIT)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RAW_10BIT)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_RGB888)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_RGB565)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RGB888)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RGB565))
{
/* Bayer output */
SET_GMC_RAW_RGB_MODE;
}
REG_ISP_DEBUG_WRITE_OUT_ADDR=(kal_uint32) (isp_cct_data->isp_debug_buffer);
#elif (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))
ENABLE_REZ_DISCONN;
DISABLE_REZ_LPF;
if((isp_cct_data->debug_mode == CAPTRUE_MODE_YUV)|| // YUV Capture
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_YUV))
{
/* YUV ouput */
SET_OUTPUT_PATH_TYPE(1); /* 0:bayer, 1:ISP output, 2:RGB888, 3:RGB565 */
}
else if((isp_cct_data->debug_mode == CAPTRUE_MODE_RAW_8BIT)|| // RAW/RGB output
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RAW_8BIT)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_RAW_10BIT)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RAW_10BIT))
{
/* Bayer output */
SET_OUTPUT_PATH_TYPE(0); /* 0:bayer, 1:ISP output, 2:RGB888, 3:RGB565 */
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230))
if( (isp_cct_data->debug_mode == CAPTRUE_MODE_RAW_10BIT)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RAW_10BIT))
{
ENABLE_BAYER10_OUT; /* Bayer 10bit output */
}
else
{
DISABLE_BAYER10_OUT;
}
#endif
}
else if((isp_cct_data->debug_mode == CAPTRUE_MODE_RGB888)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RGB888))
{
SET_OUTPUT_PATH_TYPE(2); /* 0:bayer, 1:ISP output, 2:RGB888, 3:RGB565 */
}
else if((isp_cct_data->debug_mode == CAPTRUE_MODE_RGB565)||
(isp_cct_data->debug_mode == CAPTRUE_MODE_EXT_RGB565))
{
SET_OUTPUT_PATH_TYPE(3); /* 0:bayer, 1:ISP output, 2:RGB888, 3:RGB565 */
}
REG_ISP_OUTPUT_ADDR=(kal_uint32)(isp_cct_data->isp_debug_buffer);
if( (isp_cct_data->debug_mode != CAPTRUE_MODE_RAW_8BIT)&& // RAW/RGB output
(isp_cct_data->debug_mode != CAPTRUE_MODE_EXT_RAW_8BIT)&&
(isp_cct_data->debug_mode != CAPTRUE_MODE_RAW_10BIT)&&
(isp_cct_data->debug_mode != CAPTRUE_MODE_EXT_RAW_10BIT))
{
if(isp_cct_data->sub_sample_mode==4)
sub_sample=3;
else
sub_sample=isp_cct_data->sub_sample_mode;
ENABLE_VERTICAL_SUB_SAMPLE;
ENABLE_HORIZONTAL_SUB_SAMPLE;
SET_HSUB_SRC_SIZE(isp_cct_data->grab_width);
SET_VSUB_SRC_SIZE(isp_cct_data->grab_height);
SET_HSUB_DST_SIZE((isp_cct_data->grab_width)>>sub_sample);
SET_VSUB_DST_SIZE((isp_cct_data->grab_height)>>sub_sample);
#if (defined(MT6227)||defined(MT6226M)||defined(MT6226))
/* enable result window for shading work around */
SET_RESULT_WINDOW_VERTICAL_SIZE((kal_uint16)((isp_cct_data->grab_start_y)>>sub_sample),
(kal_uint16)((isp_cct_data->grab_height)>>sub_sample));
SET_RESULT_WINDOW_HORIZONTAL_SIZE((kal_uint16)((isp_cct_data->grab_start_x)>>sub_sample),
(kal_uint16)((isp_cct_data->grab_width)>>sub_sample));
ENABLE_RESULT_WINDOW;
#endif
}
#endif
// skip unstable frames
ENABLE_CAMERA_IDLE_INT;
SET_CAMERA_CAPTURE_MODE;
SET_CAMERA_FRAME_RATE(0);
if(switch_cap_en == KAL_TRUE)
{
for(i=0;i<camera_oper_data.capture_delay_frame;i++)
{
DISABLE_VIEW_FINDER_MODE;
kal_set_eg_events(camera_isp_event_id,0,KAL_AND);
ENABLE_VIEW_FINDER_MODE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -