📄 ae_awb.c
字号:
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* ae_awb.c
*
* Project:
* --------
* MT6219,MT6226,MT6227,MT6228,MT6229
*
* Description:
* ------------
* Auto Exposure and Auto White Balance Algorithm
*
* Author:
* -------
* -------
*
*============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
#if ((defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))&&defined(ISP_SUPPORT))
#include "drv_comm.h"
#include "IntrCtrl.h"
#include "ae_awb.h"
#include "af.h"
#include "isp_if.h"
#include "image_sensor.h"
#include "sccb.h"
#include "camera_para.h"
#include "med_api.h"
#include "gpio_sw.h"
#if (defined(WEBCAM_SUPPORT))
#include "usbvideo_cam_if.h"
#endif
#if (!defined(MT6219))
#include "isp_flashlight.h"
#endif
kal_bool ae_enable_flag,awb_enable_flag;
kal_bool ae_bypass_enable_flag = KAL_FALSE; // AE byapss mode: bypass ae cal
kal_uint8 AE_BYPASS_INDEX = 0;
camera_operation_para_struct camera_oper_data;
kal_uint8 ae_awb_cal_complete=1;
#if (!defined(MT6219))
dsc_operation_struct dsc_status;
/* SHUTTER APERTURE PRIORITY ARRAY */
kal_bool shutter_pri_60hz_info[TV_NO];
kal_bool shutter_pri_50hz_info[TV_NO];
kal_bool aperture_pri_info[AV_NO];
kal_bool iso_pri_info[ISO_NO];
kal_uint16 iso_gain_info[ISO_NO];
const tv_av_info_struct tv_av_info={
/* Shutter Priority Info */
{ {50000,20},{40000,25},{33000,30},{28000,35},{25000,40},{22000,45},{20000,50},{18000,55},
{16000,60},{14000,70},{12000,80},{11000,90},{10000,100},{9000,110},{8300,120},{8000,130},
{7000,140},{6700,150},{6000,170},{5000,200},{4200,240},{4000,250},{3300,300},{3000,330},
{2500,400},{2000,500},{1700,600},{1000,1000},{833,1200},{800,1250},{710,1400},{630,1600},
{570,1750},{500,2000},{400,2500},{310,3200},{250,4000},{200,5000},{160,6400},{130,8000},
{100,10000},{83,12000},{71,14000},{63,16000},{56,18000},{50,20000}},
/* Aperture Priority Info */
{ {20,20},{28,28},{40,40},{56,56},{80,80},{110,110},{160,160}}};
#endif
/************** AE DECLARATION ****************************************/
kal_int8 ev_level=0;
kal_uint8 expo_level=110,high_expo_level,low_expo_level;
kal_uint8 totalevstep=9;
kal_uint8 light_band;
kal_uint32 lum[9],eShutter=300;
kal_uint8 isp_pregain=0x40;
kal_uint16 sensor_pregain=0x40;
kal_uint8 ae_range=8;
kal_uint32 histogram[5],Rhist[5],Ghist[5],Bhist[5];
kal_uint8 histogram_b1=3,histogram_b2=7,histogram_b3=11,histogram_b4=248,histogram_b5=255;
#if (!defined(MT6219))
const exposure_lut_struct *AE_LUT;
const kal_uint8 *IRIS_LUT;
ae_lut_info_struct lut_info={CAM_BANDING_60HZ,KAL_FALSE,CAM_AUTO_DSC};
kal_uint8 iris_no;
#endif
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))
#if (defined(__MTK_TARGET__))
#pragma arm section rwdata = "INTERNRW1", zidata = "INTERNZI1"
#endif
kal_uint32 ae_result[7][9]; /* recommand to set in SRAM */
#if (defined(__MTK_TARGET__))
#pragma arm section rwdata , zidata
#endif
#endif
/************** AWB DECLARATION ***************************************/
#if (defined(MT6219))
kal_uint16 AWB_Rgain=128,AWB_Ggain=128,AWB_Bgain=128;
kal_uint16 tmp_Rgain=128,tmp_Ggain=128,tmp_Bgain=128;
#else
kal_uint16 AWB_Rgain=128,AWB_GRgain=128,AWB_Bgain=128,AWB_GBgain=128;
kal_uint16 tmp_Rgain=128,tmp_GRgain=128,tmp_Bgain=128,tmp_GBgain=128;
kal_uint16 Manual_AWB_Rgain=128,Manual_AWB_GRgain=128,Manual_AWB_Bgain=128,Manual_AWB_GBgain=128;
#endif
kal_uint16 Rgain_max=128,Ggain_max=128,Bgain_max=128;
kal_uint16 Rgain_min=128,Ggain_min=128,Bgain_min=128;
kal_uint32 Acc_R,Acc_G,Acc_B;
kal_uint32 Acc_Cnt;
kal_uint8 fstAwbInitFlag=0;
kal_bool awbFastFlag;
/****************************************************************************
* AE / AWB Main
****************************************************************************/
void init_ae_awb(void)
{
/* AE initial */
DISABLE_ATF_EDGE;
DISABLE_ATF_AREA_ALL;
DISABLE_AE_AREA_ALL;
ENABLE_AE_COUNT;
SET_AE_GM_SEL(0);
SET_AE_PATH_SEL_HIGH;
DISABLE_AE_ONLY_G_COLOR;
ae_enable_flag=ISP_ON;
ae_select_band(CAM_BANDING_60HZ);
#if (!defined(MT6219))
AE_LUT=get_ae_lut(lut_info);
#endif
/* AWB initial */
ENABLE_AWB_AREA_ALL;
ENABLE_OPD_COUNTER;
DISABLE_BYPASS_INTERPOLATION_MOD;
SEL_COLOR_SUP_MODE(4);
SET_OPD_MOD_Y_LIMIT(4);
awb_enable_flag=ISP_ON;
awb_config(640,480);
awb_gain_max_min();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -