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

📄 isp_if.c

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