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

📄 isp_flashlight.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************************
*  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:
 * ---------
 *   isp_flashlight.c
 *
 * Project:
 * --------
 *   MT6219,MT6226,MT6227,MT6228,MT6229,MT6230
 *
 * Description:
 * ------------
 *   flash light control
 *
 * Author:
 * -------
 * -------
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/
#if ((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"
#include "isp_flashlight.h"

/**************   FLASH LIGHT DECLARATION    ***************************************/
extern kal_eventgrpid camera_isp_event_id;
extern kal_bool ae_counting_flag;
extern kal_uint32	window_pixel_num;
extern kal_uint32  avgall_lum;

FLASHLIGHT_OPERATION_STATE_ENUM flashlight_operation_state=FLASHLIGHT_STANDBY_STATE;
kal_uint16	AWB_Rgain_Backup,AWB_GRgain_Backup,AWB_Bgain_Backup,AWB_GBgain_Backup;
kal_uint8 AE_INDEX_Backup;
kal_bool fake_main_flash_frame_flag, fake_sub_flash_frame_flag;
kal_int32  flashlight_idx, flashlight_main_idx; 
kal_uint32 flashlight_lum, flashlight_main_lum;
kal_uint16  flashlight_sensor_gain, flashlight_isp_gain;

#define FLASHLIGHT_MAX_AE_RANGE 42
#define FLASHLIGHT_MAX_AE_NUM 40
#define FLASHLIGHT_CENTER_AE_NUM 25
#define FLASHLIGHT_MIN_AE_NUM 0
const kal_uint16 EVSTEP_FLASH_01[FLASHLIGHT_MAX_AE_RANGE+1]={    
    23, 24, 26, 27, 29, 32, 34, 37, 40, 42, 45, 49, 52, 56, 59, 
    65, 70, 73, 80, 85, 91, 98, 104, 112, 120, 128,
    137, 148, 158, 169, 181, 195, 208, 223, 240, 257, 274, 294, 315, 337, 361, 387, 414};

/****************************************************************************
 *          Flash Light	Control 											 *
 ****************************************************************************/
/*************************************************************************
* FUNCTION
*	flash_config
*
* DESCRIPTION
*	Config flash light offset and duty
*
* PARAMETERS
*	None
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void flash_config(kal_uint16 delay_line,kal_uint16 duty_line)
{
	/* Delay time setting since Vsync occured */
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))	
	if( delay_line >= 2048)
		delay_line = 2047;
	REG_ISP_INT_ENABLE &= ~0xFF0000;
	REG_ISP_INT_ENABLE |= ((delay_line>>3)<<16);
#elif (defined(MT6226)||defined(MT6226M)||defined(MT6227))
	REG_ISP_INT_ENABLE &= ~0xFFF0000;
	REG_ISP_INT_ENABLE |= ((delay_line&0xFFF)<<16);
#endif	
	/* Flash turn on time setting */
	SET_FLASH_LINE_UNIT(duty_line>>8);
	SET_FLASH_LINE_NUMBER(duty_line/((duty_line>>8)+1));
}


/*************************************************************************
* FUNCTION
*	init_flashlight
*
* DESCRIPTION
*	Initial flash light GPIO and state machine
*
* PARAMETERS
*	None
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void init_flashlight(void)
{
    flashlight_operation_state = FLASHLIGHT_STANDBY_STATE;
	if(dsc_support_info.dsccomp.flashlight==KAL_TRUE)
	{	
      if(camera_oper_data.flashlight_mode == FLASHLIGHT_NONE)  	    
        camera_oper_data.flashlight_mode = FLASHLIGHT_LED_PEAK;
      if((camera_oper_data.flashlight_mode==FLASHLIGHT_LED_ONOFF) || 
         (camera_oper_data.flashlight_mode==FLASHLIGHT_LED_CONSTANT) )
      {
         DISABLE_FLASH_LIGHT;	        
      }
      else if(camera_oper_data.flashlight_mode==FLASHLIGHT_LED_PEAK)
      {
#if (defined(MT6226)||defined(MT6226M)||defined(MT6227))
        #ifndef __CUST_NEW__
         GPIO_ModeSetup(6,3);	/* Flash Triger Pin */
        #endif /* __CUST_NEW__ */
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
        #ifndef __CUST_NEW__
         GPIO_ModeSetup(0,1);	/* Flash Triger Pin */
        #endif /* __CUST_NEW__ */
#endif
         DISABLE_FLASH_LIGHT;
         SET_FLASH_STARTPNT_LOW;
         SET_FLASH_FRAME_DELAY(1);
         flash_config(device_support_info.autoflash.offset,device_support_info.autoflash.duty);
         if(device_support_info.autoflash.strobe_pol==1)
         {
            SET_FLASH_POL_HIGH;
         }
         else
         {
            SET_FLASH_POL_LOW;
         }
      }
   }	    	       
}

/*************************************************************************
* FUNCTION
*	flashlight_prestrobe
*
* DESCRIPTION
*	Pre strobe AE/AWB control
*
* PARAMETERS
*	None
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void flashlight_prestrobe(void)
{  
    kal_uint32  event_group;
    
    /* Turn on LED */
    if(image_sensor_func->set_flashlight!=0)
        image_sensor_func->set_flashlight(KAL_TRUE);         

    /* Wait 1 AE AWB HW CAL Stable */            
    DISABLE_VIEW_FINDER_MODE;            
    kal_set_eg_events(camera_isp_event_id,0,KAL_AND);                        	    
    fake_main_flash_frame_flag = fake_sub_flash_frame_flag = KAL_TRUE;    		    
    flashlight_main_lum = flashlight_main_idx = 0;
    flashlight_lum = flashlight_idx = 0;                            
    ENABLE_VIEW_FINDER_MODE;            
    kal_retrieve_eg_events(camera_isp_event_id,CAMERA_ISP_VD_READY_EVENT,KAL_OR_CONSUME,
            &event_group,KAL_SUSPEND);

    /* Set FLASHLIGHT_PRE_STROBE_STATE to trigger flashlight HISR */ 
    DISABLE_VIEW_FINDER_MODE;         
    kal_set_eg_events(camera_isp_event_id,0,KAL_AND);
    IRQMask(IRQ_CAMERA_CODE);    	    
    flashlight_operation_state = FLASHLIGHT_PRE_STROBE_STATE;
    IRQUnmask(IRQ_CAMERA_CODE);            
    ENABLE_VIEW_FINDER_MODE;            
    kal_retrieve_eg_events(camera_isp_event_id,CAMERA_ISP_VD_READY_EVENT,KAL_OR_CONSUME,
            &event_group,KAL_SUSPEND);
    DISABLE_VIEW_FINDER_MODE;      
    /* Check frame end */               
    kal_retrieve_eg_events(camera_isp_event_id,CAMERA_ISP_IDLE_EVENT,KAL_OR_CONSUME,
                          &event_group,KAL_SUSPEND);        
}

/*************************************************************************
* FUNCTION
*	flashlight_pre_process
*
* DESCRIPTION
*	Pre strobe Entry point
*
* PARAMETERS
*	None
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void flashlight_pre_process(void)
{
	/* store AWB setting */
	AWB_Rgain_Backup = AWB_Rgain;			
	AWB_GRgain_Backup = AWB_GRgain;			
	AWB_Bgain_Backup = AWB_Bgain;			
	AWB_GBgain_Backup = AWB_GBgain;		        
    AE_INDEX_Backup = AE_INDEX; 	
    awb_fast_method(KAL_TRUE);    
    sensor_config_data.enable_flashlight_tansfer = KAL_FALSE;
    /* FlashLight Shutter Config */	
    if((dsc_support_info.dsccomp.flashlight==KAL_TRUE)&&(dsc_status.ae.flash!=CAM_FLASH_OFF))
    {    
        if( (camera_oper_data.flashlight_mode==FLASHLIGHT_LED_CONSTANT) ||           
            (camera_oper_data.flashlight_mode==FLASHLIGHT_LED_PEAK) )           
        {
            if( (dsc_status.ae.flash==CAM_FLASH_ON) ||
                ((dsc_status.ae.flash==CAM_FLASH_AUTO||dsc_status.ae.flash==CAM_FLASH_REDEYE)&&
                (AE_INDEX<=device_support_info.autoflash.lutidx)))    
            {
                flashlight_prestrobe();                                         
                if(fake_sub_flash_frame_flag==KAL_FALSE) 
            	    image_sensor_func->set_sensor_gain(sensor_pregain);                 
                if(fake_main_flash_frame_flag == KAL_FALSE)
                    sensor_config_data.enable_flashlight_tansfer = KAL_TRUE;                            
                flashlight_operation_state = FLASHLIGHT_MAIN_STROBE_STATE;                     
            }   
            else
            {
                sensor_config_data.enable_flashlight_tansfer = KAL_FALSE;                                           
                flashlight_operation_state = FLASHLIGHT_STANDBY_STATE;
            }       
        } 
   }
   else
   {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -