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

📄 camera_para.c

📁 OV2640.rar
💻 C
📖 第 1 页 / 共 2 页
字号:
}

#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 + -