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

📄 isp_cct_if.c

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