📄 camera_para.c
字号:
}
#ifdef AF_SUPPORT
void init_af_operation_para(af_operation_para_struct *oper_data)
{
oper_data->manual_focus_step = 5;
oper_data->af_auto_range_start_idx = 15;//10;
oper_data->af_auto_range_end_idx = 1;
oper_data->af_normal_range_start_idx = 10;
oper_data->af_normal_range_end_idx = 4;
oper_data->af_macro_range_start_idx = 15;
oper_data->af_macro_range_end_idx = 1;
oper_data->af_infinite_range_start_idx = 3;
oper_data->af_infinite_range_end_idx = 0;
oper_data->isp_pregain_max=1.1*BASEGAIN;
oper_data->sensor_pregain_max=4*BASEGAIN;
oper_data->pregain_compensate_max=2*BASEGAIN;
oper_data->preview_display_wait_frame=4;
oper_data->ae_smooth_upper_bound=140;
oper_data->ae_smooth_lower_bound=60;
oper_data->ae_awb_cal_period=4;
oper_data->ae_setting_gain_delay_frame=3;
oper_data->ae_setting_sensor_gain_delay_frame=2;
oper_data->ae_setting_shut_delay_frame=1;
oper_data->ae_setting_cal_delay_frame=0;
oper_data->capture_delay_frame=2; /* Switch Preview to Capture */
oper_data->preview_delay_frame=3; /* Switch Capture to Preview */
oper_data->ae_lowlight_threshold=10; /* low light threshold of luminance for camera */
oper_data->ae_lowlight_off_threshold=15; /* low light turn off threshold of luminance for camera */
oper_data->ae_video_lowlight_threshold=10; /* low light threshold of luminance for video */
oper_data->ae_video_lowlight_off_threshold=15; /* low light turn off threshold of luminance for video */
oper_data->ae_high_banding_target_enable = KAL_FALSE; /* Disable banding taeget */
}
#endif
void set_camera_mode_para(kal_uint8 mode)
{
kal_uint16 sensor_width,sensor_height;
kal_uint16 max_expo_width,max_expo_line;
image_sensor_func->get_sensor_size(&sensor_width,&sensor_height);
image_sensor_func->get_sensor_period(&max_expo_width, &max_expo_line);
switch(mode)
{
case CAMERA_PARA_PREVIEW_MODE:
/* isp preview parameter */
SET_PREPROCESS_PIXEL_LIMIT(0xA0);
SET_INTERPOLATION_THRE_SM(0x0A);
DISABLE_AUTO_DEFECT_ALL;
DISABLE_Y_LPF;//6228 can not enable LPF in ckl/2
DISABLE_C_LPF;
ENABLE_RGB_EDGE_GAIN;
DISABLE_Y_EDGE;
break;
case CAMERA_PARA_CAPTURE_MODE:
/* isp capture parameter */
SET_PREPROCESS_PIXEL_LIMIT(0xA0);
/* Check Night Mode */
if((isp_preview_config_data.night_mode==KAL_TRUE)||
(eShutter>=max_expo_width))
{
SET_INTERPOLATION_THRE_SM(0x10);
DISABLE_AUTO_DEFECT_ALL;
ENABLE_RGB_EDGE_GAIN;
ENABLE_Y_LPF;
ENABLE_C_LPF;
DISABLE_Y_EDGE;
}
else
{
/* Check small size capture */
if ((exposure_window.image_target_width<(IMAGE_SENSOR_PV_WIDTH>>1))&&
(exposure_window.image_target_height<(IMAGE_SENSOR_PV_HEIGHT>>1)))
{
SET_INTERPOLATION_THRE_SM(0x10);
DISABLE_RGB_EDGE_GAIN;
DISABLE_Y_LPF;
DISABLE_C_LPF;
}
else
{
SET_INTERPOLATION_THRE_SM(0x0A);
ENABLE_RGB_EDGE_GAIN;
DISABLE_Y_LPF;
DISABLE_C_LPF;
}
DISABLE_AUTO_DEFECT_ALL;
}
break;
case CAMERA_PARA_NIGHT_MODE:
/* isp night mode parameter */
SET_INTERPOLATION_THRE_SM(0x0F);
DISABLE_AUTO_DEFECT_ALL;
DISABLE_RGB_EDGE_GAIN;
// if(MPEG4_30fps_mode==KAL_FALSE)
// {
// ENABLE_Y_LPF;
// ENABLE_C_LPF;
// }
DISABLE_VSUP;
break;
case CAMERA_PARA_AUTO_LOWLIGHT_MODE:
/* isp auto lowlight parameter */
SET_INTERPOLATION_THRE_SM(0x0F);
DISABLE_AUTO_DEFECT_ALL;
ENABLE_RGB_EDGE_GAIN;
DISABLE_Y_LPF;
DISABLE_C_LPF;
break;
case CAMERA_PARA_VIDEO_MODE:
/* parameter for video */
SET_INTERPOLATION_THRE_SM(0x0F);
DISABLE_AUTO_DEFECT_ALL;
DISABLE_RGB_EDGE_GAIN;
DISABLE_Y_LPF;
DISABLE_C_LPF;
DISABLE_VSUP;
break;
case CAMERA_PARA_AF_NORMAL_MODE:
SET_PREPROCESS_PIXEL_LIMIT(0xFF);
DISABLE_AUTO_DEFECT_ALL;
ENABLE_RGB_EDGE_GAIN;
DISABLE_Y_LPF;
DISABLE_C_LPF;
break;
case CAMERA_PARA_AF_LOWLIGHT_MODE:
SET_PREPROCESS_PIXEL_LIMIT(0xFF);
DISABLE_AUTO_DEFECT_ALL;
ENABLE_RGB_EDGE_GAIN;
DISABLE_Y_LPF;
DISABLE_C_LPF;
break;
}
}
void reduce_color_matrix(kal_uint32 sat_factor)
{
kal_uint32 cm_table[3],m[9];
kal_uint32 i,k,j;
/*******************************
change to read nvram data
********************************/
cm_table[0]=camera_para.ISP.reg[39];//REG_ISP_COLOR_MATRIX1;
cm_table[1]=camera_para.ISP.reg[40];
cm_table[2]=camera_para.ISP.reg[41];
for(i=0;i<9;i++){
k=i/3;
j=(2-(i%3))*8;
m[i]=(cm_table[k]>>j)&0xff;
}
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
for(i=0;i<9;i++){
if(i%4==0){
m[i]=(m[i]-32)*sat_factor/32+32;
}
else{
if(m[i]>=128){
m[i]=(m[i]-128)*sat_factor/32+128;
}
else{
m[i]=m[i]*sat_factor/32;
}
}
}
SET_COLOR_MATRIX1(m[0],m[1],m[2]);
SET_COLOR_MATRIX2(m[3],m[4],m[5]);
SET_COLOR_MATRIX3(m[6],m[7],m[8]);
}
static void CamParaSetAwbSet(kal_uint8 aeidx)
{
kal_uint16 usTmpAvg,usTmpRangeH,usTmpRangeL;
double usTmpRatio,usTmpRatioH,usTmpRatioL;
if(bParaAwb)
{
Rgain_max_Local = Rgain_max;//test
Ggain_max_Local = Rgain_max;
Bgain_max_Local = Bgain_max;
Rgain_PreGain = camera_para.SENSOR.cct[1].para;//camera_para.SENSOR.cct[PRE_GAIN_RB_INDEX].para;
Ggain_PreGain = camera_para.SENSOR.cct[2].para;//camera_para.SENSOR.cct[PRE_GAIN_G_INDEX].para;
Bgain_PreGain = camera_para.SENSOR.cct[1].para;//camera_para.SENSOR.cct[PRE_GAIN_RB_INDEX].para;
if(Rgain_PreGain == 0)
Rgain_PreGain = 1;
if(Ggain_PreGain == 0)
Ggain_PreGain = 1;
if(Bgain_PreGain == 0)
Bgain_PreGain = 1;
Rgain_PreGain_Ratio = ((float)Rgain_PreGain/(float)Ggain_PreGain);
Bgain_PreGain_Ratio = ((float)Bgain_PreGain/(float)Ggain_PreGain);
bParaAwb = KAL_FALSE;
}
bParaAwbBitFlagPre = bParaAwbBitFlag;
if(aeidx>AWB_PARA_OUTDOOR_AE_IDX_D65_H)
{
bParaAwbBitFlag |=LIGHT_SOURCE_BIT_NO1;
usTmpAvg = camera_para.AWB.LightSource[2][1];
usTmpRangeH = (camera_para.AWB.LightSource[1][1] - camera_para.AWB.LightSource[2][1])*(AWB_PARA_OUTDOOR_THRES_I_H/Rgain_PreGain_Ratio);
if(AWB_Rgain>(kal_uint16)(usTmpAvg+usTmpRangeH))
{
bParaAwbBitFlag |=LIGHT_SOURCE_BIT_NO1_H;
}
}
else if(aeidx>AWB_PARA_OUTDOOR_AE_IDX_D65)
{
usTmpAvg = camera_para.AWB.LightSource[2][1];
usTmpRangeH = (camera_para.AWB.LightSource[1][1] - camera_para.AWB.LightSource[2][1])*(AWB_PARA_OUTDOOR_THRES_I/Rgain_PreGain_Ratio);
if(AWB_Rgain>(kal_uint16)(usTmpAvg+usTmpRangeH))
{
bParaAwbBitFlag |=LIGHT_SOURCE_BIT_NO1;
}
}
if(aeidx<AWB_PARA_OUTDOOR_AE_IDX_CWF_LOW)
{
bParaAwbBitFlag &=~(LIGHT_SOURCE_BIT_NO1|LIGHT_SOURCE_BIT_NO1_H);
}
else if(aeidx<AWB_PARA_OUTDOOR_AE_IDX_CWF)
{
usTmpAvg = camera_para.AWB.LightSource[2][1];
usTmpRangeL = (camera_para.AWB.LightSource[1][1] - camera_para.AWB.LightSource[2][1])*AWB_PARA_OUTDOOR_THRES_II;
if(AWB_Rgain<=(kal_uint16)((kal_uint16)(usTmpAvg-usTmpRangeL)))
{
bParaAwbBitFlag &=~(LIGHT_SOURCE_BIT_NO1|LIGHT_SOURCE_BIT_NO1_H);
}
}
usTmpRatioH = (double)camera_para.AWB.LightSource[4][3] /(double)camera_para.AWB.LightSource[4][1] ;
usTmpRatio = (double)camera_para.AWB.LightSource[3][3] /(double)camera_para.AWB.LightSource[3][1] ;
usTmpRatioH = usTmpRatio + (usTmpRatioH-usTmpRatio)*LIGHT_SOURCE_BIT_NO4_H;//0.6;
usTmpRatioL = usTmpRatio + (usTmpRatioH-usTmpRatio)*LIGHT_SOURCE_BIT_NO4_L;//0.2;
if( ( (double)AWB_Bgain/(double)AWB_Rgain)>usTmpRatioH )
{
bParaAwbBitFlag |= LIGHT_SOURCE_BIT_NO4 ;
}
else if( ( (double)AWB_Bgain/(double)AWB_Rgain)<usTmpRatioL )
{
bParaAwbBitFlag &= ~LIGHT_SOURCE_BIT_NO4 ;
}
if(bParaAwbBitFlag&LIGHT_SOURCE_BIT_NO1)
{
usTmpRatioH = (double)camera_para.AWB.LightSource[2][3] ;
usTmpRatio = (double)camera_para.AWB.LightSource[1][3];
if(bParaAwbBitFlag&LIGHT_SOURCE_BIT_NO1_H)
usTmpRatioH = usTmpRatio + (usTmpRatioH-usTmpRatio)*(AWB_PARA_OUTDOOR_BLIMIT_I_H/Bgain_PreGain_Ratio);
else
usTmpRatioH = usTmpRatio + (usTmpRatioH-usTmpRatio)*(AWB_PARA_OUTDOOR_BLIMIT_I/Bgain_PreGain_Ratio); //180
Bgain_max =(kal_uint16)(usTmpRatioH);
}
else
{
Bgain_max = Bgain_max_Local;
}
}
void set_anti_low_light_para(kal_uint8 aeidx)
{
CamParaSetAwbSet(aeidx);
if(aeidx>=20){
//normal
reduce_color_matrix(0x20);
SET_INTERPOLATION_THRE_SM(0x0F);
apply_camera_autodefect_to_reg(CAMERA_COMP_PREVIEW_NORMAL_SET);
REG_ISP_EDGE_GAIN2=0x001F001F;
}else if(aeidx >=15){
reduce_color_matrix(0x18);
SET_INTERPOLATION_THRE_SM(0x18);
apply_camera_autodefect_to_reg(CAMERA_COMP_PREVIEW_LOWLIGHT_SET);
REG_ISP_EDGE_GAIN2=0x000F000F;
}else if(aeidx>=10){
reduce_color_matrix(0x10);
SET_INTERPOLATION_THRE_SM(0x1f);
apply_camera_autodefect_to_reg(CAMERA_COMP_PREVIEW_LOWLIGHT_SET);
REG_ISP_EDGE_GAIN2=0x00080008;
}else if(aeidx>=8){
reduce_color_matrix(0x08);
SET_INTERPOLATION_THRE_SM(0x1F);
apply_camera_autodefect_to_reg(CAMERA_COMP_PREVIEW_LOWLIGHT_SET);
REG_ISP_EDGE_GAIN2=0x00000000;
}else{
reduce_color_matrix(0x00);
SET_INTERPOLATION_THRE_SM(0x1F);
apply_camera_autodefect_to_reg(CAMERA_COMP_PREVIEW_LOWLIGHT_SET);\
REG_ISP_EDGE_GAIN2=0x00000000;
}
}
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -