📄 isp_engmode.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:
* ---------
* isp_engmode.c
*
* Project:
* --------
* MT6219,MT6226,MT6226M,MT6227,MT6228,MT6229
*
* Description:
* ------------
* This file is intends for ISP eng mode driver.
*
* 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!
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
#include "drv_comm.h"
#include "stdio.h"
#include "string.h"
#if (defined(MT6219)||defined(MT6228)||defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230))
#include "isp_if.h"
#include "med_api.h"
#include "ae_awb.h"
#if (defined(ISP_SUPPORT))
#include "image_sensor.h"
#include "camera_para.h"
#endif
kal_uint8 wbOutFixFlag;
/*************************************************************************
* FUNCTION
* get_isp_engmode_group_count
*
* DESCRIPTION
* This function gets ISP group count in engineering mode.
*
* PARAMETERS
* group_count_ptr : pointer of group count
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void get_isp_engmode_group_count(kal_int32* group_count_ptr)
{
#if (defined(ISP_SUPPORT))
*group_count_ptr=TOTAL_GROUP_NUMBER;
#endif /* ISP_SUPPORT */
}
/*************************************************************************
* FUNCTION
* get_isp_engmode_group_info
*
* DESCRIPTION
* This function gets ISP group information in engineering mode.
*
* PARAMETERS
* group_idx : index of ISP group
* group_name_ptr : name of group
* item_count_ptr : item count of group
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void get_isp_engmode_group_info(kal_uint16 group_idx, kal_uint8* group_name_ptr, kal_int32* item_count_ptr)
{
#if (defined(ISP_SUPPORT))
switch(group_idx)
{
case OUTDOOR_WB:
sprintf((char*)group_name_ptr, "OUTDOOR_WB");
*item_count_ptr=4;
break;
case COMPONENT_OFFSET:
sprintf((char*)group_name_ptr, "COMPONENT_OFFSET");
*item_count_ptr=4;
break;
case INTERPOLATION:
sprintf((char*)group_name_ptr, "INTERPOLATION");
*item_count_ptr=4;
break;
case AWB:
sprintf((char*)group_name_ptr, "AWB");
*item_count_ptr=12;
break;
case COMPONENT_GAIN:
sprintf((char*)group_name_ptr, "COMPONENT_GAIN");
*item_count_ptr=3;
break;
case MANUEL_WB_1:
sprintf((char*)group_name_ptr, "MANUEL_WB_1");
*item_count_ptr=4;
break;
case MANUEL_WB_2:
sprintf((char*)group_name_ptr, "MANUEL_WB_2");
*item_count_ptr=4;
break;
case MANUEL_WB_3:
sprintf((char*)group_name_ptr, "MANUEL_WB_3");
*item_count_ptr=4;
break;
case MANUEL_WB_4:
sprintf((char*)group_name_ptr, "MANUEL_WB_4");
*item_count_ptr=4;
break;
case MANUEL_WB_5:
sprintf((char*)group_name_ptr, "MANUEL_WB_5");
*item_count_ptr=4;
break;
case AE:
sprintf((char*)group_name_ptr, "AE");
*item_count_ptr=1;
break;
case COLOR_MATRIX:
sprintf((char*)group_name_ptr, "COLOR_MATRIX");
*item_count_ptr=9;
break;
case EDGE:
sprintf((char*)group_name_ptr, "EDGE");
*item_count_ptr=14;
break;
case COLOR_SUPPRESSION:
sprintf((char*)group_name_ptr, "COLOR_SUPPRESSION");
*item_count_ptr=1;
break;
case GAMMA_SELECT:
sprintf((char*)group_name_ptr, "GAMMA_SELECT");
*item_count_ptr=1;
break;
case GAMMA_TUNING:
sprintf((char*)group_name_ptr, "GAMMA_TUNING");
*item_count_ptr=11;
break;
case GAMMA_PREDEFINE1:
sprintf((char*)group_name_ptr, "GAMMA1_BALANCE");
*item_count_ptr=11;
break;
case GAMMA_PREDEFINE2:
sprintf((char*)group_name_ptr, "GAMMA2_WEAK");
*item_count_ptr=11;
break;
case GAMMA_PREDEFINE3:
sprintf((char*)group_name_ptr, "GAMMA3_ENHAN_MID");
*item_count_ptr=11;
break;
case GAMMA_PREDEFINE4:
sprintf((char*)group_name_ptr, "GAMMA4_STD_045");
*item_count_ptr=11;
break;
case GAMMA_PREDEFINE5:
sprintf((char*)group_name_ptr, "GAMMA5_SUP_045_LL");
*item_count_ptr=11;
break;
case GAMMA_PREDEFINE6:
sprintf((char*)group_name_ptr, "GAMMA6_SUP_06_LL");
*item_count_ptr=11;
break;
case GAMMA_PREDEFINE7:
sprintf((char*)group_name_ptr, "GAMMA7_ENHAN_LMID");
*item_count_ptr=11;
break;
case GAMMA_PREDEFINE8:
sprintf((char*)group_name_ptr, "GAMMA8_STD_06");
*item_count_ptr=11;
break;
case GAMMA_PREDEFINE9:
sprintf((char*)group_name_ptr, "GAMMA9_STD_10");
*item_count_ptr=11;
break;
case CONTRAST:
sprintf((char*)group_name_ptr, "CONTRAST");
*item_count_ptr=1;
break;
case BRIGHTNESS:
sprintf((char*)group_name_ptr, "BRIGHTNESS");
*item_count_ptr=1;
break;
case SATURATION:
sprintf((char*)group_name_ptr, "SATURATION");
*item_count_ptr=2;
break;
}
#endif /* ISP_SUPPORT */
}
/*************************************************************************
* FUNCTION
* get_isp_engmode_item_info
*
* DESCRIPTION
* This function gets ISP item information in engineering mode.
*
* PARAMETERS
* group_idx : index of ISP group
* item_idx : index of item
* info_ptr : information of item
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void get_isp_engmode_item_info(kal_uint16 group_idx, kal_uint16 item_idx, isp_engmode_item_info_struct* info_ptr)
{
#if (defined(ISP_SUPPORT))
wbOutFixFlag = camera_oper_data.outdoor_fixWB_enable;
switch(group_idx)
{
case OUTDOOR_WB:
camera_oper_data.outdoor_fixWB_enable = 0;
switch(item_idx)
{
case 0:
sprintf((char*)info_ptr->item_name_ptr, "R");
info_ptr->item_value=(REG_ISP_RGB_GAIN_CTRL2&0x01FF0000)>>16;
info_ptr->min=0;
info_ptr->max=511;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
break;
case 1:
sprintf((char*)info_ptr->item_name_ptr, "Gr");
info_ptr->item_value=(REG_ISP_RGB_GAIN_CTRL2&0x000001FF);
info_ptr->min=0;
info_ptr->max=511;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
break;
case 2:
sprintf((char*)info_ptr->item_name_ptr, "B");
info_ptr->item_value=(REG_ISP_RGB_GAIN_CTRL1&0x01FF0000)>>16;
info_ptr->min=0;
info_ptr->max=511;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
break;
case 3:
sprintf((char*)info_ptr->item_name_ptr, "Gb");
info_ptr->item_value=REG_ISP_RGB_GAIN_CTRL2&0x000001FF;
info_ptr->min=0;
info_ptr->max=511;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
break;
}
break;
case COMPONENT_OFFSET:
switch(item_idx)
{
case 0:
sprintf((char*)info_ptr->item_name_ptr, "R");
info_ptr->item_value=(camera_para.ISP.reg[5]&0xFF000000)>>24;
info_ptr->min=0;
info_ptr->max=255;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
break;
case 1:
sprintf((char*)info_ptr->item_name_ptr, "Gr");
info_ptr->item_value=(camera_para.ISP.reg[5]&0x00FF0000)>>16;
info_ptr->min=0;
info_ptr->max=255;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
break;
case 2:
sprintf((char*)info_ptr->item_name_ptr, "B");
info_ptr->item_value=(camera_para.ISP.reg[5]&0x0000FF00)>>8;
info_ptr->min=0;
info_ptr->max=255;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
break;
case 3:
sprintf((char*)info_ptr->item_name_ptr, "Gb");
info_ptr->item_value=camera_para.ISP.reg[5]&0x000000FF;
info_ptr->min=0;
info_ptr->max=255;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
break;
}
break;
case INTERPOLATION:
switch(item_idx)
{
case 0:
sprintf((char*)info_ptr->item_name_ptr, "DISLJ");
info_ptr->item_value=camera_para.ISP.reg[28]®_CPS1_LINE_JUDGE_ENABLE_BIT;
info_ptr->min=0;
info_ptr->max=1;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
break;
case 1:
sprintf((char*)info_ptr->item_name_ptr, "THRE_V");
info_ptr->item_value=(camera_para.ISP.reg[29]®_INTERPOLATION1_THRESHOLD_V_MASK)>>24;
info_ptr->min=0;
info_ptr->max=REG_INTERPOLATION1_THRESHOLD_V_MASK>>24;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
break;
case 2:
sprintf((char*)info_ptr->item_name_ptr, "THRE_SM");
info_ptr->item_value=(camera_para.ISP.reg[29]®_INTERPOLATION1_THRESHOLD_SM_MASK)>>16;
info_ptr->min=0;
info_ptr->max=REG_INTERPOLATION1_THRESHOLD_SM_MASK>>16;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
break;
case 3:
sprintf((char*)info_ptr->item_name_ptr, "THRE_DHV");
info_ptr->item_value=(camera_para.ISP.reg[29]®_INTERPOLATION1_THRESHOLD_DHV_MASK)>>8;
info_ptr->min=0;
info_ptr->max=REG_INTERPOLATION1_THRESHOLD_DHV_MASK>>8;
info_ptr->is_read_only=KAL_FALSE;
info_ptr->is_need_restart=KAL_FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -