📄 isp_cct_if.c
字号:
extern ISP_OPERATION_STATE_ENUM isp_operation_state;
extern image_sensor_exposure_window_struct exposure_window;
extern kal_uint16 image_sensor_width,image_sensor_height;
extern kal_bool wait_first_frame_flag;
extern kal_bool isp_first_preview_frame;
extern kal_uint8 isp_preview_frame;
extern kal_uint8 camera_system_operation_mode;
#if (!defined(MT6219))
extern void (*cam_preview_cb) (kal_uint8 return_code);
extern void (*cam_focus_cb) (kal_uint8 return_code);
#endif
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
camera_preview_data_path_struct ipp_cct_preview_data;
#endif
#if (defined(MT6227))
kal_uint32 test_loop=0x500000;//6227 loop count for memory output delay
#else
kal_uint32 test_loop=0x0;
#endif
kal_uint16 cct_auto_defect_count;
kal_bool switch_cap_en = 0;
/* camera_horizontal_flag for CCT */
#if (defined(HORIZONTAL_CAMERA))
kal_uint8 camera_horizontal_flag=1;
#else
kal_uint8 camera_horizontal_flag=0;
#endif
/* backup pre_adjust before defect table calibration */
#if (!defined(MT6219))
kal_uint32 cct_ob_backup;
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230))
kal_uint32 cct_raw_backup1;
kal_uint32 cct_raw_backup2;
#endif
kal_uint32 cct_pregain_backup;
kal_uint32 cct_shading_backup;
kal_uint32 cct_sensor_gamma_backup;
#endif
/* end backup pre_adjust before defect table calibration */
// preview rotation flag
#if defined(SENSOR_ON_COVER)
// if sensor is on cover
#if defined(SENSOR_ROTATE_0)
// normal
kal_uint8 g_CCT_PreviewImageMirror=IMAGE_NORMAL;
#elif defined(SENSOR_ROTATE_180)
// rotate 180
kal_uint8 g_CCT_PreviewImageMirror=IMAGE_HV_MIRROR;
#else
// rotate 90, 270 not used yet
kal_uint8 g_CCT_PreviewImageMirror=IMAGE_NORMAL;
#endif
#else
// if sensor is on body
#if defined(SENSOR_ROTATE_0)
// normal
kal_uint8 g_CCT_PreviewImageMirror=IMAGE_NORMAL;
#elif defined(SENSOR_ROTATE_180)
// rotate 180
kal_uint8 g_CCT_PreviewImageMirror=IMAGE_HV_MIRROR;
#else
// rotate 90, 270 not used yet
kal_uint8 g_CCT_PreviewImageMirror=IMAGE_NORMAL;
#endif
#endif
kal_uint8 cct_af_loop_state_flag=0;
//0:not start, 1:check & set, 2:AF lut(HISR), 3: AF:lut algorithm, 4: AF:detail search, 5: AF detail algorithm, 6: final check, 7: end
void init_camera_cct(kal_uint32 cct_lcd_layer0_buffer)
{
lcd_layer_struct layer_data;
kal_uint16 lcd_width,lcd_height;
/* exchange order for HORIZONTAL_CAMERA */
camera_system_operation_mode=CAMERA_SYSTEM_META_MODE;
init_isp_if();
// lcd_init(MAIN_LCD,0xFFFF);
layer_data.source_key=0xFFFF;
layer_data.source_key_enable=KAL_FALSE;
layer_data.color_palette_enable=KAL_FALSE;
layer_data.color_palette_select=0;
layer_data.source_color_format=1;//6228 new config
layer_data.opacity_enable=KAL_FALSE;
layer_data.opacity_value=20;
layer_data.rotate_value=LCD_LAYER_ROTATE_NORMAL;
layer_data.x_offset=0;
layer_data.y_offset=0;
layer_data.frame_buffer_address=(kal_uint32)cct_lcd_layer0_buffer;
lcd_get_size(MAIN_LCD, &lcd_width, &lcd_height);
if (camera_horizontal_flag==1)
{
layer_data.rotate_value=LCD_LAYER_ROTATE_270;
layer_data.row_number=lcd_width;
layer_data.column_number=lcd_height;
}
else
{
layer_data.rotate_value=LCD_LAYER_ROTATE_NORMAL;
layer_data.row_number=lcd_height;
layer_data.column_number=lcd_width;
}
config_lcd_layer_window(0,&layer_data);
/* PLEASE CALL read_camera_para_from_nvram() AFTER init_isp_if() to load calibration data */
/* following list with related setting for CCT */
#if (defined(AF_SUPPORT)&&(!defined(YUV_SENSOR_SUPPORT)))// save step for normal search
AF_Backup_Normal_Step();
#endif
#if (!defined(MT6219))
Set_camera_shading_mode(CAMERA_SHADING_NORMAL_SET);//set shading LUT to default
#endif
}
void camera_preview_cct(camera_preview_process_struct *isp_cct_data)
{
MMDI_SCENERIO_ID scenerio_id=SCENARIO_CAMERA_PREVIEW_ID;
kal_uint16 grab_width,grab_height;
kal_uint16 grab_start_x,grab_start_y;
lcd_frame_update_struct lcd_data;
kal_uint32 event_group;
#if (defined(MT6219))
kal_uint8 sub_sample_mode=0;
#endif
if (isp_operation_state!=ISP_STANDBY_STATE)
ASSERT(0);
#if (defined(AF_SUPPORT)&&(!defined(YUV_SENSOR_SUPPORT)))
if (af_operation_state != AF_STANDBY_STATE)//prevent scenario error
{
cct_camera_operation_setting(CAM_AF_KEY, CAM_AF_RELEASE);
}
else
{
lens_func->lens_af_move_to((kal_int32)camera_lens.INFO.af_hyper_pos);
dsc_status.af.index=0xFF;
}
#endif
ENABLE_CMOS_SESNOR;
DISABLE_VIEW_FINDER_MODE;
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230))
// Disable AE Count before Start Preview
DISABLE_AE_COUNT;
REG_ISP_PREPROCESS_CTRL2 |= REG_PREPROCESS2_AE_COUNT_CLEAR_BIT;
#endif
#if (defined(MT6219))
DISABLE_GMC_DEBUG_OUTPUT;
#elif (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))//Prevent error when back to preview
DISABLE_CAMERA_OUTPUT_TO_MEM;
ENABLE_REZ_LPF;
DISABLE_REZ_DISCONN;
#endif
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227))/* disable result window */
DISABLE_RESULT_WINDOW;
#endif
sensor_config_data.image_mirror=isp_cct_data->image_mirror;
sensor_config_data.frame_rate=0xFF;
exposure_window.digital_zoom_factor=10;
/* LCM rotation */
if (camera_horizontal_flag==1)
{
isp_preview_config_data.target_width=isp_cct_data->target_height;
isp_preview_config_data.target_height=isp_cct_data->target_width;
}
else
{
isp_preview_config_data.target_width=isp_cct_data->target_width;
isp_preview_config_data.target_height=isp_cct_data->target_height;
}
/* change order */
isp_cct_data->target_width=isp_preview_config_data.target_width;
isp_cct_data->target_height=isp_preview_config_data.target_height;
/* set to prevent seneor check error */
exposure_window.image_target_width=isp_cct_data->target_width;
exposure_window.image_target_height=isp_cct_data->target_height;
/* set sensor preview */
image_sensor_func->sensor_preview_setting(&exposure_window,&sensor_config_data);
grab_width= exposure_window.exposure_window_width &0xFFFC ;
grab_height= exposure_window.exposure_window_height &0xFFFC ;
grab_start_x=exposure_window.grab_start_x+ (((exposure_window.exposure_window_width-grab_width)>>1)&0xFFFE);
grab_start_y=exposure_window.grab_start_y+ (((exposure_window.exposure_window_height-grab_height)>>1)&0xFFFE);
/* accorind the zoom factor to calculate the grab window area */
isp_grab_width = grab_width;
isp_grab_height = grab_height;
SET_TG_GRAB_PIXEL(grab_start_x,grab_width);
SET_TG_GRAB_LINE(grab_start_y,grab_height);
ae_config(grab_width,grab_height);
#if (!(defined(MT6219)||defined(MT6228)))
DISABLE_1024_GAMMA_TABLE;
#endif
isp_preview_config_data.lcd_id=isp_cct_data->lcd_id;
isp_preview_config_data.lcm_start_x=isp_cct_data->lcm_start_x;
isp_preview_config_data.lcm_start_y=isp_cct_data->lcm_start_y;
isp_preview_config_data.lcm_end_x=isp_cct_data->lcm_end_x;
isp_preview_config_data.lcm_end_y=isp_cct_data->lcm_end_y;
isp_preview_config_data.roi_offset_x=isp_cct_data->roi_offset_x;
isp_preview_config_data.roi_offset_y=isp_cct_data->roi_offset_y;
isp_preview_config_data.update_layer=isp_cct_data->update_layer;
isp_preview_config_data.hw_update_layer=isp_cct_data->hw_update_layer;
isp_preview_config_data.intmem_start_address=isp_cct_data->intmem_start_address;
isp_preview_config_data.intmem_size=isp_cct_data->intmem_size;
isp_preview_config_data.extmem_start_address=isp_cct_data->extmem_start_address;
isp_preview_config_data.extmem_size=isp_cct_data->extmem_size;
isp_preview_config_data.zoom_factor=isp_cct_data->zoom_factor;
isp_preview_config_data.frame_buffer_address=isp_cct_data->frame_buffer_address;
isp_preview_config_data.frame_buffer_size=isp_cct_data->frame_buffer_size;
isp_preview_config_data.frame_buffer_address1=isp_cct_data->frame_buffer_address1;
isp_preview_config_data.frame_buffer_size1=isp_cct_data->frame_buffer_size1;
isp_preview_config_data.cam_preview_cb=isp_cct_data->cam_preview_cb;
#if (!defined(MT6219))
cam_preview_cb=isp_cct_data->cam_preview_cb;
#endif
isp_preview_config_data.preview_offset_x=isp_cct_data->preview_offset_x;
isp_preview_config_data.preview_offset_y=isp_cct_data->preview_offset_y;
isp_preview_config_data.camera_offset_x=isp_cct_data->camera_offset_x;
isp_preview_config_data.camera_offset_y=isp_cct_data->camera_offset_y;
isp_preview_config_data.contrast_level=isp_cct_data->contrast_level;
isp_preview_config_data.brightness_level=isp_cct_data->brightness_level;
isp_preview_config_data.hue_value=isp_cct_data->hue_value;
isp_preview_config_data.saturation_value=isp_cct_data->saturation_value;
isp_preview_config_data.wb_mode=isp_cct_data->wb_mode;
isp_preview_config_data.ev_value=isp_cct_data->ev_value;
isp_preview_config_data.banding_freq=isp_cct_data->banding_freq;
isp_preview_config_data.image_effect=isp_cct_data->image_effect;
isp_preview_config_data.night_mode=isp_cct_data->night_mode;
#if (!defined(MT6219))
/* ISP Setting */
isp_preview_config_data.dsc_mode = isp_cct_data->dsc_mode;
isp_preview_config_data.ae_metering_mode = isp_cct_data->ae_metering_mode;
isp_preview_config_data.af_mode = isp_cct_data->af_mode;
isp_preview_config_data.af_metering_mode = isp_cct_data->af_metering_mode;
isp_preview_config_data.tv_setting = isp_cct_data->tv_setting;
isp_preview_config_data.av_setting = isp_cct_data->av_setting;
isp_preview_config_data.iso_setting = isp_cct_data->iso_setting;
isp_preview_config_data.flash_mode = isp_cct_data->flash_mode;
if (camera_horizontal_flag==1)
{
isp_preview_config_data.af_zone0_x = isp_cct_data->af_zone0_y;
isp_preview_config_data.af_zone0_y = isp_cct_data->af_zone0_x;
isp_preview_config_data.af_zone1_x = isp_cct_data->af_zone1_y;
isp_preview_config_data.af_zone1_y = isp_cct_data->af_zone1_x;
isp_preview_config_data.af_zone2_x = isp_cct_data->af_zone2_y;
isp_preview_config_data.af_zone2_y = isp_cct_data->af_zone2_x;
isp_preview_config_data.af_zone3_x = isp_cct_data->af_zone3_y;
isp_preview_config_data.af_zone3_y = isp_cct_data->af_zone3_x;
isp_preview_config_data.af_zone4_x = isp_cct_data->af_zone4_y;
isp_preview_config_data.af_zone4_y = isp_cct_data->af_zone4_x;
}
else
{
isp_preview_config_data.af_zone0_x = isp_cct_data->af_zone0_x;
isp_preview_config_data.af_zone0_y = isp_cct_data->af_zone0_y;
isp_preview_config_data.af_zone1_x = isp_cct_data->af_zone1_x;
isp_preview_config_data.af_zone1_y = isp_cct_data->af_zone1_y;
isp_preview_config_data.af_zone2_x = isp_cct_data->af_zone2_x;
isp_preview_config_data.af_zone2_y = isp_cct_data->af_zone2_y;
isp_preview_config_data.af_zone3_x = isp_cct_data->af_zone3_x;
isp_preview_config_data.af_zone3_y = isp_cct_data->af_zone3_y;
isp_preview_config_data.af_zone4_x = isp_cct_data->af_zone4_x;
isp_preview_config_data.af_zone4_y = isp_cct_data->af_zone4_y;
}
isp_preview_config_data.cam_focus_cb = isp_cct_data->cam_focus_cb;
cam_focus_cb= isp_cct_data->cam_focus_cb;
#endif
#if (defined(MT6219))
/* according the maximum size of resizer input we define to calculate the the image size
of resizer input */
if ((grab_width<=MAX_RESIZER_INPUT_WIDTH) && (grab_height<=MAX_RESIZER_INPUT_HEIGHT))
{
sub_sample_mode=CAMERA_SUB_SAMPLE_1_1;
isp_preview_config_data.source_width=grab_width;
isp_preview_config_data.source_height=grab_height;
}
else if ((grab_width<=(MAX_RESIZER_INPUT_WIDTH<<1)) && (grab_height<=(MAX_RESIZER_INPUT_HEIGHT<<1)))
{
sub_sample_mode=CAMERA_SUB_SAMPLE_1_2;
isp_preview_config_data.source_width=grab_width>>1;
isp_preview_config_data.source_height=grab_height>>1;
}
else if ((grab_width<=(MAX_RESIZER_INPUT_WIDTH<<2)) && (grab_height<=(MAX_RESIZER_INPUT_HEIGHT<<2)))
{
sub_sample_mode=CAMERA_SUB_SAMPLE_1_4;
isp_preview_config_data.source_width=grab_width>>2;
isp_preview_config_data.source_height=grab_height>>2;
}
else if ((grab_width<=(MAX_RESIZER_INPUT_WIDTH<<3)) && (grab_height<=(MAX_RESIZER_INPUT_HEIGHT<<3)))
{
sub_sample_mode=CAMERA_SUB_SAMPLE_1_8;
isp_preview_config_data.source_width=grab_width>>3;
isp_preview_config_data.source_height=grab_height>>3;
}
SET_SUB_SAMPLE_MODE(sub_sample_mode);
#else
ENABLE_VERTICAL_SUB_SAMPLE;
ENABLE_HORIZONTAL_SUB_SAMPLE;
SET_HSUB_SRC_SIZE(grab_width);
SET_VSUB_SRC_SIZE(grab_height);
if((grab_width>=(isp_preview_config_data.target_width<<2)) ||
(grab_height>=(isp_preview_config_data.target_height<<2)))
{
SET_HSUB_DST_SIZE(isp_preview_config_data.target_width<<1);
SET_VSUB_DST_SIZE(isp_preview_config_data.target_height<<1);
isp_preview_config_data.source_width=isp_preview_config_data.target_width<<1;
isp_preview_config_data.source_height=isp_preview_config_data.target_height<<1;
}
else
{
SET_HSUB_DST_SIZE(grab_width);
SET_VSUB_DST_SIZE(grab_height);
isp_preview_config_data.source_width=grab_width;
isp_preview_config_data.source_height=grab_height;
}
#endif
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
intmem_init((kal_uint32 *) isp_preview_config_data.intmem_start_address,
isp_preview_config_data.intmem_size);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -