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

📄 isp_comm.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 3 页
字号:
		SET_GAMMA_B10(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][9]);
		SET_GAMMA_B11(camera_para.PREDGAMMA.gamma[camera_para.PREDGAMMA.gamma_select-1][10]);
	}
#endif	
}

void isp_to_camera_para(void)
{
#if (defined(MT6228))
	kal_uint32	i;
	camera_para.ISP.reg[5]=REG_ISP_RGB_OFFSET_ADJUS;//0014h
	for(i=12;i<53;i++)//0030h~00D0h
		camera_para.ISP.reg[i] = *((volatile unsigned int *)(CAMERA_base + i*4));
	for(i=71;i<87;i++)//011Ch~0158h
		camera_para.ISP.reg[i] = *((volatile unsigned int *)(CAMERA_base + i*4));
	for(i=88;i<99;i++)//01A0h~01C8
		camera_para.ISP.reg[i]=*((volatile unsigned int *) (CAMERA_base + i*4 + 64));
	camera_para.ISP.reg[AutoDefect_Reg1_ID+2]=REG_ISP_FLASH_CTRL;//01D4h
	/* copy ISP_FRAME_COUNT 0x1D8[15:8] but reserve other control bits */	
	camera_para.ISP.reg[AutoDefect_Reg1_ID+3] &= ~REG_CAM_RESET_ISP_FRAME_COUNT_MASK;//0x01D8
	camera_para.ISP.reg[AutoDefect_Reg1_ID+3] |= REG_ISP_RESET&REG_CAM_RESET_ISP_FRAME_COUNT_MASK;
	camera_para.ISP.reg[AutoDefect_Reg1_ID+5]=REG_ISP_HISTOGRAM_BOUNDARY_CTRL3;//01E0h
	camera_para.ISP.reg[AutoDefect_Reg1_ID+6]=REG_ISP_HISTOGRAM_BOUNDARY_CTRL4;//01E4h
	camera_para.ISP.reg[AutoDefect_Reg1_ID+7]=REG_ISP_HISTOGRAM_BOUNDARY_CTRL5;//01E8h
	/* disable copy 0214h~023Ch shading reg to global variable */	
	camera_para.ISP.reg[128]=REG_ISP_IMGPROC_HUE0;//0240h
	camera_para.ISP.reg[129]=REG_ISP_IMGPROC_HUE1;//0244h
#elif (defined(MT6229)||defined(MT6230))
	kal_uint32	i;
	kal_uint32 temp1, temp2;
	
	camera_para.ISP.reg[5]=REG_ISP_RGB_OFFSET_ADJUS;//0014h
	for(i=12;i<52;i++)//0030h~00D0h
		camera_para.ISP.reg[i] = *((volatile unsigned int *)(CAMERA_base + i*4));
	camera_para.ISP.reg[gamma_global_1024_no] &= REG_GAMMA_OPERATION_1024_ENABLE_BIT;
	camera_para.ISP.reg[gamma_global_1024_no] |= (*((volatile unsigned int *)(CAMERA_base + gamma_global_1024_no*4)) &
		(~REG_GAMMA_OPERATION_1024_ENABLE_BIT));
	for(i=71;i<87;i++)//011Ch~0158h
		camera_para.ISP.reg[i]=*((volatile unsigned int *) (CAMERA_base + i*4));
	for(i=88;i<95;i++)//0160h~0178h
		camera_para.ISP.reg[i]=*((volatile unsigned int *) (CAMERA_base + i*4));
	camera_para.ISP.reg[AutoDefect_Reg1_ID+2]=REG_ISP_FLASH_CTRL;//01D4h
	camera_para.ISP.reg[AutoDefect_Reg1_ID+5]=REG_ISP_HISTOGRAM_BOUNDARY_CTRL3;//01E0h
	camera_para.ISP.reg[AutoDefect_Reg1_ID+6]=REG_ISP_HISTOGRAM_BOUNDARY_CTRL4;//01E4h
	camera_para.ISP.reg[AutoDefect_Reg1_ID+7]=REG_ISP_HISTOGRAM_BOUNDARY_CTRL5;//01E8h
	/* disable copy 0214h~023Ch shading reg to global variable */
	for(i=147;i<152;i++)//024Ch~025Ch
		camera_para.ISP.reg[i]=*((volatile unsigned int *) (CAMERA_base + i*4));
	//bypass gamma	
	temp1 = REG_ISP_COLOR_PROCESS_STAGE_CTRL2;//by gamma
	temp2 = REG_ISP_GAMMA_OPERATION3;//output to memory
	ENABLE_GAMMA_FUNCTION_BYPASS;//disable gamma
	DISABLE_1024_GAMMA_TABLE;//disable output to memory
	for(i=0;i<256;i++)//1000h~13FCh gamma table 1024
		camera_gamma.gamma[i]=INTMEM_GAMMA_1024(i);
	REG_ISP_COLOR_PROCESS_STAGE_CTRL2 = temp1;//recover gamma
	REG_ISP_GAMMA_OPERATION3 = temp2;//recover output to memory
	//restore gamma enable	
#elif (defined(MT6226)||defined(MT6226M)||defined(MT6227))
	kal_uint32	i;
	kal_uint32 temp1, temp2;
	
	camera_para.ISP.reg[5]=REG_ISP_RGB_OFFSET_ADJUS;//0014h
	for(i=12;i<52;i++)//0030h~00D0h
		camera_para.ISP.reg[i] = *((volatile unsigned int *)(CAMERA_base + i*4));
	camera_para.ISP.reg[gamma_global_1024_no] &= REG_GAMMA_OPERATION_1024_ENABLE_BIT;
	camera_para.ISP.reg[gamma_global_1024_no] |= (*((volatile unsigned int *)(CAMERA_base + gamma_global_1024_no*4)) &
		(~REG_GAMMA_OPERATION_1024_ENABLE_BIT));
	for(i=71;i<87;i++)//011Ch~0158h
		camera_para.ISP.reg[i]=*((volatile unsigned int *) (CAMERA_base + i*4));
	for(i=88;i<95;i++)//0160h~0178h
		camera_para.ISP.reg[i]=*((volatile unsigned int *) (CAMERA_base + i*4));
	camera_para.ISP.reg[AutoDefect_Reg1_ID+2]=REG_ISP_FLASH_CTRL;//01D4h
	camera_para.ISP.reg[AutoDefect_Reg1_ID+5]=REG_ISP_HISTOGRAM_BOUNDARY_CTRL3;//01E0h
	camera_para.ISP.reg[AutoDefect_Reg1_ID+6]=REG_ISP_HISTOGRAM_BOUNDARY_CTRL4;//01E4h
	camera_para.ISP.reg[AutoDefect_Reg1_ID+7]=REG_ISP_HISTOGRAM_BOUNDARY_CTRL5;//01E8h
	/* disable copy 0214h~023Ch shading reg to global variable */
	for(i=139;i<144;i++)//024Ch~025Ch
		camera_para.ISP.reg[i]=*((volatile unsigned int *) (CAMERA_base + i*4 + 32));
	//bypass gamma	
	temp1 = REG_ISP_COLOR_PROCESS_STAGE_CTRL2;//by gamma
	temp2 = REG_ISP_GAMMA_OPERATION3;//output to memory
	ENABLE_GAMMA_FUNCTION_BYPASS;//disable gamma
	DISABLE_1024_GAMMA_TABLE;//disable output to memory
	for(i=0;i<256;i++)//1000h~13FCh gamma table 1024
		camera_gamma.gamma[i]=INTMEM_GAMMA_1024(i);
	REG_ISP_COLOR_PROCESS_STAGE_CTRL2 = temp1;//recover gamma
	REG_ISP_GAMMA_OPERATION3 = temp2;//recover output to memory
	//restore gamma enable	
#elif (defined(MT6219))
	kal_uint32	i;
	
	camera_para.ISP.reg[5] = *((volatile unsigned int *)(CAMERA_base+20));
	for(i=13;i<53;i++)//0034h~00D0h
	{
		camera_para.ISP.reg[i] = *((volatile unsigned int *)(CAMERA_base + i*4));
	}
#endif
}

void camera_para_to_ae(void)
{
	ae_set_expovalue(camera_para.AE.TargetLum);
	ae_select_stepperev(camera_para.AE.StepperEV);
	eShutter=camera_para.AE.iniShutter;
#if (!defined(MT6219))
//	AE_INDEX=camera_para.AE.iniExpoIdx;
#else   // MT6219
	image_sensor_func->set_sensor_eshutter(eShutter);
#endif
}

#if (!defined(MT6219))
/* different register setting for shading & autodefect */
/* apply global variable to reg */
void apply_camera_shading_to_reg(camera_comp_set_num p_set_mode)
{
	kal_uint32 i;
	kal_uint16 sensor_width,sensor_height;	
	kal_uint32 temp1, temp2;
	image_sensor_func->get_sensor_size(&sensor_width,&sensor_height);	
	if (shading_apply_mode == CAMERA_SHADING_PREVIEW_COPY2_TAKE)
	{	
		if ((p_set_mode == CAMERA_COMP_PREVIEW_NORMAL_SET)||(p_set_mode == CAMERA_COMP_PREVIEW_LOWLIGHT_SET))
		{		
			/* 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];
		}
		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.ISP.reg[Shading_Reg1_ID];
				temp2 = (temp1&REG_SHADING_RADIUS_FACTOR_MASK)>>12;
				temp2 += 1;
				temp1 &= ~REG_SHADING_RADIUS_FACTOR_MASK;
				temp1 |= ((temp2<<12)&REG_SHADING_RADIUS_FACTOR_MASK);
				/* set center Y */
				temp2 = (temp1&REG_SHADING_CENTERY_MASK)>>16;
				temp2 = temp2*2;
				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;
				temp2 = temp2*2;
				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.ISP.reg[Shading_Reg1_ID+i];
			}
			else//Preview size
			{
				/* 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];
	}
		}
	}
	else if (shading_apply_mode == CAMERA_SHADING_TAKE_COPY2_PREVIEW)
	{	
		if ((p_set_mode == CAMERA_COMP_PREVIEW_NORMAL_SET)||(p_set_mode == CAMERA_COMP_PREVIEW_LOWLIGHT_SET))
		{		
			/* set radius factor */
			temp1 = camera_para.COMP.shading_cap[0];
			temp2 = (temp1&REG_SHADING_RADIUS_FACTOR_MASK)>>12;
			temp2 -= 1;
			temp1 &= ~REG_SHADING_RADIUS_FACTOR_MASK;
			temp1 |= ((temp2<<12)&REG_SHADING_RADIUS_FACTOR_MASK);
			/* set center Y */
			temp2 = (temp1&REG_SHADING_CENTERY_MASK)>>16;
			temp2 = (temp2+1)>>1;
			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;
			temp2 = (temp2+1)>>1;
			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.COMP.shading_cap[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.COMP.shading_cap[0];
				temp2 = (temp1&REG_SHADING_RADIUS_FACTOR_MASK)>>12;
				temp2 -= 1;
				temp1 &= ~REG_SHADING_RADIUS_FACTOR_MASK;
				temp1 |= ((temp2<<12)&REG_SHADING_RADIUS_FACTOR_MASK);
				/* set center Y */
				temp2 = (temp1&REG_SHADING_CENTERY_MASK)>>16;
				temp2 = (temp2+1)>>1;
				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;
				temp2 = (temp2+1)>>1;
				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.COMP.shading_cap[i];
			}
		}
	}	
	else//other or normal mode
	{	
		if ((p_set_mode == CAMERA_COMP_PREVIEW_NORMAL_SET)||(p_set_mode == CAMERA_COMP_PREVIEW_LOWLIGHT_SET))
		{		
			/* 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 */

⌨️ 快捷键说明

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