📄 isp_comm.c
字号:
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.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.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];
}
}
}
}
/* 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®_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®_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®_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®_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®_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 + -