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

📄 isp_comm.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 3 页
字号:
			temp2 = temp1&REG_SHADING_CENTERX_MASK;
			if (2*(isp_grab_start_x - exposure_window.grab_start_x) < temp2)
			{
				temp2 -= 2*(isp_grab_start_x - exposure_window.grab_start_x);
			}
			else
	{		
				temp2 = 0;
			}
			temp1 &= ~REG_SHADING_CENTERX_MASK;
			temp1 |= temp2&REG_SHADING_CENTERX_MASK;
			*((volatile unsigned int *) ISP_SHADING_CTRL1_REG) = temp1;
			for(i=1;i<11;i++)//0214h~023Ch
			*((volatile unsigned int *) (ISP_SHADING_CTRL1_REG + i*4)) = camera_para.ISP.reg[Shading_Reg1_ID+i];
	}
		else if ((p_set_mode == CAMERA_COMP_CAPTURE_NORMAL_SET)||(p_set_mode == CAMERA_COMP_CAPTURE_LOWLIGHT_SET))
	{			
	      if((exposure_window.exposure_window_width >= sensor_width) || 	// FULL Mode
	      	(exposure_window.exposure_window_height >= sensor_height))			
			{
				/* set radius factor */
				temp1 = camera_para.COMP.shading_cap[0];
				/* set center Y */
				temp2 = (temp1&REG_SHADING_CENTERY_MASK)>>16;
				if (2*(isp_grab_start_y - exposure_window.grab_start_y) < temp2)
				{
					temp2 -= 2*(isp_grab_start_y - exposure_window.grab_start_y);
				}
				else
				{
					temp2 = 0;
				}
				temp1 &= ~REG_SHADING_CENTERY_MASK;
				temp1 |= ((temp2<<16)&REG_SHADING_CENTERY_MASK);
				/* set center X */
				temp2 = temp1&REG_SHADING_CENTERX_MASK;
				if (2*(isp_grab_start_x - exposure_window.grab_start_x) < temp2)
				{
					temp2 -= 2*(isp_grab_start_x - exposure_window.grab_start_x);
				}
				else
				{
					temp2 = 0;
				}						
				temp1 &= ~REG_SHADING_CENTERX_MASK;
				temp1 |= temp2&REG_SHADING_CENTERX_MASK;
				*((volatile unsigned int *) ISP_SHADING_CTRL1_REG) = temp1;
				for (i=1;i<11;i++)
			*((volatile unsigned int *) (ISP_SHADING_CTRL1_REG + i*4)) = camera_para.COMP.shading_cap[i];
}
			else
			{
				/* set radius factor */
				temp1 = camera_para.ISP.reg[Shading_Reg1_ID];
				/* set center Y */
				temp2 = (temp1&REG_SHADING_CENTERY_MASK)>>16;
				if (2*(isp_grab_start_y - exposure_window.grab_start_y) < temp2)
				{
					temp2 -= 2*(isp_grab_start_y - exposure_window.grab_start_y);
				}
				else
				{
					temp2 = 0;
				}
				temp1 &= ~REG_SHADING_CENTERY_MASK;
				temp1 |= ((temp2<<16)&REG_SHADING_CENTERY_MASK);
				/* set center X */
				temp2 = temp1&REG_SHADING_CENTERX_MASK;
				if (2*(isp_grab_start_x - exposure_window.grab_start_x) < temp2)
				{
					temp2 -= 2*(isp_grab_start_x - exposure_window.grab_start_x);
				}
				else
				{
					temp2 = 0;
				}
				temp1 &= ~REG_SHADING_CENTERX_MASK;
				temp1 |= temp2&REG_SHADING_CENTERX_MASK;
				*((volatile unsigned int *) ISP_SHADING_CTRL1_REG) = temp1;
				for(i=1;i<11;i++)//0214h~023Ch
					*((volatile unsigned int *) (ISP_SHADING_CTRL1_REG + i*4)) = camera_para.ISP.reg[Shading_Reg1_ID+i];				
			}					
	}
}
}

/* apply reg to global variable */
void update_camera_shading_from_reg(camera_comp_set_num p_set_mode)
{
	kal_uint32 i;
	if ((p_set_mode == CAMERA_COMP_PREVIEW_NORMAL_SET)||
		(p_set_mode == CAMERA_COMP_PREVIEW_LOWLIGHT_SET))
		for(i=0;i<11;i++)//0214h~023Ch
			camera_para.ISP.reg[i+Shading_Reg1_ID] = *((volatile unsigned int *) (ISP_SHADING_CTRL1_REG + i*4));
	else if ((p_set_mode == CAMERA_COMP_CAPTURE_NORMAL_SET)||
			(p_set_mode == CAMERA_COMP_CAPTURE_LOWLIGHT_SET))
		for (i=0;i<11;i++)
			camera_para.COMP.shading_cap[i] = *((volatile unsigned int *) (ISP_SHADING_CTRL1_REG + i*4 ));
}

/* apply global variable to reg */
void apply_camera_autodefect_to_reg(camera_comp_set_num p_set_mode)
{
	REG_ISP_AUTO_DEFECT_CTRL1 &= ~REG_AUTO_DEFECT_CTRL1_BIT31_16_MASK;//reserve AE_interval 0x1CC[15:8]
	if (p_set_mode == CAMERA_COMP_PREVIEW_NORMAL_SET)
	{
		REG_ISP_AUTO_DEFECT_CTRL1 |= REG_AUTO_DEFECT_CTRL1_BIT31_16_MASK&camera_para.ISP.reg[AutoDefect_Reg1_ID]; //0x1CC
		REG_ISP_AUTO_DEFECT_CTRL2 = camera_para.ISP.reg[AutoDefect_Reg1_ID+1]; //0x1D0
	}
	else if (p_set_mode == CAMERA_COMP_PREVIEW_LOWLIGHT_SET)
	{
		REG_ISP_AUTO_DEFECT_CTRL1 |= REG_AUTO_DEFECT_CTRL1_BIT31_16_MASK&camera_para.COMP.autodefect_pre_low[0]; //0x1CC
		REG_ISP_AUTO_DEFECT_CTRL2 = camera_para.COMP.autodefect_pre_low[1]; //0x1D0		
	}	
	else if (p_set_mode == CAMERA_COMP_CAPTURE_NORMAL_SET)
	{
		REG_ISP_AUTO_DEFECT_CTRL1 |= REG_AUTO_DEFECT_CTRL1_BIT31_16_MASK&camera_para.COMP.autodefect_cap_nor[0]; //0x1CC
		REG_ISP_AUTO_DEFECT_CTRL2 = camera_para.COMP.autodefect_cap_nor[1]; //0x1D0		
}
	else if (p_set_mode == CAMERA_COMP_CAPTURE_LOWLIGHT_SET)
	{
		REG_ISP_AUTO_DEFECT_CTRL1 |= REG_AUTO_DEFECT_CTRL1_BIT31_16_MASK&camera_para.COMP.autodefect_cap_low[0]; //0x1CC
		REG_ISP_AUTO_DEFECT_CTRL2 = camera_para.COMP.autodefect_cap_low[1]; //0x1D0		
		
	}
}

/* apply reg to global variable */
void update_camera_autodefect_from_reg(camera_comp_set_num p_set_mode)
{
	if (p_set_mode == CAMERA_COMP_PREVIEW_NORMAL_SET)
	{
		camera_para.ISP.reg[AutoDefect_Reg1_ID] &= ~REG_AUTO_DEFECT_CTRL1_BIT31_16_MASK;//reserve AE_interval 0x1CC[15:8]
		camera_para.ISP.reg[AutoDefect_Reg1_ID] |= REG_ISP_AUTO_DEFECT_CTRL1&REG_AUTO_DEFECT_CTRL1_BIT31_16_MASK; //0x1CC
		camera_para.ISP.reg[AutoDefect_Reg1_ID+1] = REG_ISP_AUTO_DEFECT_CTRL2; //0x1D0
	}
	else if (p_set_mode == CAMERA_COMP_PREVIEW_LOWLIGHT_SET)
	{
		camera_para.COMP.autodefect_pre_low[0] &= ~REG_AUTO_DEFECT_CTRL1_BIT31_16_MASK;//reserve AE_interval 0x1CC[15:8]
		camera_para.COMP.autodefect_pre_low[0] |= REG_ISP_AUTO_DEFECT_CTRL1&REG_AUTO_DEFECT_CTRL1_BIT31_16_MASK; //0x1CC
		camera_para.COMP.autodefect_pre_low[1] = REG_ISP_AUTO_DEFECT_CTRL2; //0x1D0		
	}	
	else if (p_set_mode == CAMERA_COMP_CAPTURE_NORMAL_SET)
	{
		camera_para.COMP.autodefect_cap_nor[0] &= ~REG_AUTO_DEFECT_CTRL1_BIT31_16_MASK;//reserve AE_interval 0x1CC[15:8]
		camera_para.COMP.autodefect_cap_nor[0] |= REG_ISP_AUTO_DEFECT_CTRL1&REG_AUTO_DEFECT_CTRL1_BIT31_16_MASK; //0x1CC
		camera_para.COMP.autodefect_cap_nor[1] = REG_ISP_AUTO_DEFECT_CTRL2; //0x1D0		
	}
	else if (p_set_mode == CAMERA_COMP_CAPTURE_LOWLIGHT_SET)
	{
		camera_para.COMP.autodefect_cap_low[0] &= ~REG_AUTO_DEFECT_CTRL1_BIT31_16_MASK;//reserve AE_interval 0x1CC[15:8]
		camera_para.COMP.autodefect_cap_low[0] |= REG_ISP_AUTO_DEFECT_CTRL1&REG_AUTO_DEFECT_CTRL1_BIT31_16_MASK; //0x1CC
		camera_para.COMP.autodefect_cap_low[1] = REG_ISP_AUTO_DEFECT_CTRL2; //0x1D0		
		
	}
}

kal_uint8 Set_camera_shading_mode(camera_shading_mode_set_num p_shading_set)
{
	kal_uint32 temp1=0, temp2=0;
	kal_uint8 r_shading=CAMERA_SHADING_NORMAL_SET;
	if (p_shading_set == CAMERA_SHADING_PREVIEW_COPY2_TAKE)
	{
		r_shading = CAMERA_SHADING_PREVIEW_COPY2_TAKE;
	}
	else if (p_shading_set == CAMERA_SHADING_TAKE_COPY2_PREVIEW)
	{
		/* check redius factor */
		temp1 = camera_para.COMP.shading_cap[0];
		temp2 = (temp1&REG_SHADING_RADIUS_FACTOR_MASK)>>12;
		if (temp2 < 1)
		{
			r_shading = CAMERA_SHADING_SET_FAIL_KEEP_NORMAL_SET;
		}
		else
		{
			r_shading = CAMERA_SHADING_TAKE_COPY2_PREVIEW;		
		}
	}
	else
	{
		r_shading = CAMERA_SHADING_NORMAL_SET;
	}
	shading_apply_mode = r_shading;
	return r_shading;
}

kal_uint8 Get_camera_shading_mode(void)
{
	return shading_apply_mode;
}

#endif

// interface to get/set camera_para global variable 
nvram_camera_para_struct *get_camera_para(void)
{
	return &camera_para;
}

void set_camera_para(const nvram_camera_para_struct *p_cam_para)
{
	if( NULL != p_cam_para ) {
		camera_para = *p_cam_para;
	}
}

#if (!defined(MT6219))
nvram_camera_defect_struct *get_camera_defect(void)
{
	return &camera_defect;
}
	
void set_camera_defect(const nvram_camera_defect_struct *p_cam_defect)
{
	if( NULL != p_cam_defect ) {
		camera_defect = *p_cam_defect;
	}	
}
	
nvram_camera_lens_struct *get_camera_lens(void)
{
	return &camera_lens;	
}
	
void set_camera_lens(const nvram_camera_lens_struct *p_cam_lens)
{
	if( NULL != p_cam_lens ) {
		camera_lens = *p_cam_lens;
	}	
}	

#if (!(defined(MT6219)||defined(MT6228)))
nvram_camera_gamma_struct *get_camera_gamma(void)
{
	return &camera_gamma;
}
	
void set_camera_gamma(const nvram_camera_gamma_struct *p_cam_gamma)
{
	if( NULL != p_cam_gamma ) {
		camera_gamma = *p_cam_gamma;
	}		
}
#endif

#endif

// interface to get default hardcoded camera_para 
const nvram_camera_para_struct *get_default_camera_para(void)
{
	return &CAMERA_PARA_DEFAULT_VALUE;
}

#if (!defined(MT6219))
const nvram_camera_defect_struct *get_default_camera_defect(void)
{
	return &CAMERA_DEFECT_DEFAULT_VALUE;
}

const nvram_camera_lens_struct *get_default_camera_lens(void)
{
	return &CAMERA_LENS_DEFAULT_VALUE;
}

#if (!(defined(MT6219)||defined(MT6228)))
const nvram_camera_gamma_struct *get_default_camera_gamma(void)
{
   return &CAMERA_GAMMA_DEFAULT_VALUE;
}
#endif
#endif

#if (!defined(MT6219))
// Defect Table Interface START
#if (defined(__MTK_TARGET__))
#pragma arm section rwdata = "INTERNRW1", zidata = "INTERNZI1"
#endif
kal_uint32 isp_defect_table[MAX_DEFECT_NUM];
#if (defined(__MTK_TARGET__))
#pragma arm section rwdata , zidata
#endif
// interface to apply camera_para to defect pixel
void load_defect_table_para(kal_uint8	table_id)
{
	kal_uint32	i=0, start_idx, end_idx, idx;	
	kal_uint16	x, y, x_offset=0, y_offset=0;		

	/* calculate x, y offset */
	if(camera_system_operation_mode==CAMERA_SYSTEM_NORMAL_MODE)		
	{
	x_offset = (DRV_Reg32(ISP_TG_GRAB_RANGE_PIXEL_CONFIG_REG)>>16) - exposure_window.grab_start_x;
	y_offset = (DRV_Reg32(ISP_TG_GRAB_RANGE_LINE_CONFIG_REG)>>16) - exposure_window.grab_start_y;
	}
	/* Load capture/preview defect table */	
	if(table_id==DEFECT_MODE_CAPTURE)	
	{
		start_idx = 0;
		end_idx = MAX_DEFECT_NUM;
	}
	else							
		{
		start_idx = MAX_DEFECT_NUM;
		end_idx = MAX_DEFECT_NUM+MAX_PV_DEFECT_NUM;
		}
	idx  = 0;	
	for(i=start_idx;i<end_idx;i++)
		{
			if(camera_defect.defect[i]==0xFFFFFFFF)
				break;
		/* Check defect pixel pos inside image or not */
		if( ((camera_defect.defect[i]&0xFFFF)>=x_offset) &&
			 (((camera_defect.defect[i]>>16)&0xFFFF)>=y_offset) )
		{
			x = (camera_defect.defect[i]&0xFFFF) - x_offset;		// shift
			y = ((camera_defect.defect[i]>>16)&0xFFFF) - y_offset;
			isp_defect_table[idx] = (y<<16) | x;							
			idx++;
		}		
	}
 	isp_defect_table[idx] = 0xFFFFFFFF;		

	/* set defect table address */ 
	REG_ISP_DEFECT_PIXEL_TABLE_ADDR = (unsigned int)(&isp_defect_table);  
	REG_ISP_DEFECT_PIXEL_CONFIG |= 0x00040000;  // Add Defect Table Line Buffer
}
// Defect Table Interface END
#endif

void apply_take_image_with_gamma_1024_by_flag(void)
{
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230))
	if (camera_para.ISP.reg[gamma_global_1024_no] & REG_GAMMA_OPERATION_1024_ENABLE_BIT)
		ENABLE_1024_GAMMA_TABLE
	else
		DISABLE_1024_GAMMA_TABLE
#endif
}

void recover_preview_with_gamma_1024_disabled(void)
{
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230))
	DISABLE_1024_GAMMA_TABLE
#endif
}

/****************************************************************************
 *          EXIF																	*
 ****************************************************************************/
 #if ((!defined(MT6219))&&defined(EXIF_SUPPORT))
void exif_update_MTK_para_struct(exif_MTK_para_struct* para)
{
	exif_MTK_camera_para_struct* mtk_para_data;
	
	mtk_para_data=(exif_MTK_camera_para_struct*)para->mtk_para;
	
	exif_update_MTK_para_struct_AEAWB(mtk_para_data);
#if (defined(AF_SUPPORT))
	exif_update_MTK_para_struct_AF(mtk_para_data);
#endif
}
#endif
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -