📄 isp_comm.c
字号:
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®_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®_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)®_SHADING_CENTERY_MASK);
/* set center X */
temp2 = temp1®_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®_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®_SHADING_RADIUS_FACTOR_MASK)>>12;
temp2 += 1;
temp1 &= ~REG_SHADING_RADIUS_FACTOR_MASK;
temp1 |= ((temp2<<12)®_SHADING_RADIUS_FACTOR_MASK);
/* set center Y */
temp2 = (temp1®_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)®_SHADING_CENTERY_MASK);
/* set center X */
temp2 = temp1®_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®_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®_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)®_SHADING_CENTERY_MASK);
/* set center X */
temp2 = temp1®_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®_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®_SHADING_RADIUS_FACTOR_MASK)>>12;
temp2 -= 1;
temp1 &= ~REG_SHADING_RADIUS_FACTOR_MASK;
temp1 |= ((temp2<<12)®_SHADING_RADIUS_FACTOR_MASK);
/* set center Y */
temp2 = (temp1®_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)®_SHADING_CENTERY_MASK);
/* set center X */
temp2 = temp1®_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®_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®_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)®_SHADING_CENTERY_MASK);
/* set center X */
temp2 = temp1®_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®_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®_SHADING_RADIUS_FACTOR_MASK)>>12;
temp2 -= 1;
temp1 &= ~REG_SHADING_RADIUS_FACTOR_MASK;
temp1 |= ((temp2<<12)®_SHADING_RADIUS_FACTOR_MASK);
/* set center Y */
temp2 = (temp1®_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)®_SHADING_CENTERY_MASK);
/* set center X */
temp2 = temp1®_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®_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®_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)®_SHADING_CENTERY_MASK);
/* set center X */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -