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

📄 isp_cct_if.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 5 页
字号:
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 + -