11bd4fe43Sopenharmony_ci/* 21bd4fe43Sopenharmony_ci * Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED. 31bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 41bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License. 51bd4fe43Sopenharmony_ci * You may obtain a copy of the License at 61bd4fe43Sopenharmony_ci * 71bd4fe43Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 81bd4fe43Sopenharmony_ci * 91bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 101bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 111bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and 131bd4fe43Sopenharmony_ci * limitations under the License. 141bd4fe43Sopenharmony_ci */ 151bd4fe43Sopenharmony_ci 161bd4fe43Sopenharmony_ci#ifndef __HI_COMM_3A_H__ 171bd4fe43Sopenharmony_ci#define __HI_COMM_3A_H__ 181bd4fe43Sopenharmony_ci 191bd4fe43Sopenharmony_ci#include "hi_common.h" 201bd4fe43Sopenharmony_ci#include "hi_comm_isp.h" 211bd4fe43Sopenharmony_ci#include "hi_comm_sns.h" 221bd4fe43Sopenharmony_ci 231bd4fe43Sopenharmony_ci#ifdef __cplusplus 241bd4fe43Sopenharmony_ci#if __cplusplus 251bd4fe43Sopenharmony_ciextern "C" { 261bd4fe43Sopenharmony_ci#endif 271bd4fe43Sopenharmony_ci#endif /* End of #ifdef __cplusplus */ 281bd4fe43Sopenharmony_ci 291bd4fe43Sopenharmony_ci#define IS_LINEAR_MODE(mode) ((mode) == WDR_MODE_NONE) 301bd4fe43Sopenharmony_ci#define IS_WDR_MODE(mode) ((!IS_LINEAR_MODE(mode)) && ((mode) < WDR_MODE_BUTT)) 311bd4fe43Sopenharmony_ci#define IS_HDR_MODE(mode) (((mode) > DYNAMIC_RANGE_SDR10) && ((mode) < DYNAMIC_RANGE_BUTT)) 321bd4fe43Sopenharmony_ci#define IS_BUILT_IN_WDR_MODE(mode) ((mode) == WDR_MODE_BUILT_IN) 331bd4fe43Sopenharmony_ci#define IS_FS_WDR_MODE(mode) ((!IS_LINEAR_MODE(mode))&& (!IS_BUILT_IN_WDR_MODE(mode)) && ((mode) < WDR_MODE_BUTT)) 341bd4fe43Sopenharmony_ci#define IS_2to1_WDR_MODE(mode) (((mode) == WDR_MODE_2To1_FRAME) || ((mode) == WDR_MODE_2To1_FRAME_FULL_RATE) || \ 351bd4fe43Sopenharmony_ci ((mode) == WDR_MODE_2To1_LINE) || ((mode) == WDR_MODE_QUDRA)) 361bd4fe43Sopenharmony_ci#define IS_3to1_WDR_MODE(mode) (((mode) == WDR_MODE_3To1_FRAME) || ((mode) == WDR_MODE_3To1_FRAME_FULL_RATE) || \ 371bd4fe43Sopenharmony_ci ((mode) == WDR_MODE_3To1_LINE)) 381bd4fe43Sopenharmony_ci#define IS_4to1_WDR_MODE(mode) (((mode) == WDR_MODE_4To1_FRAME) || ((mode) == WDR_MODE_4To1_FRAME_FULL_RATE) || \ 391bd4fe43Sopenharmony_ci ((mode) == WDR_MODE_4To1_LINE)) 401bd4fe43Sopenharmony_ci#define IS_FULL_WDR_MODE(mode) (((mode) == WDR_MODE_2To1_FRAME_FULL_RATE) || \ 411bd4fe43Sopenharmony_ci ((mode) == WDR_MODE_3To1_FRAME_FULL_RATE) || \ 421bd4fe43Sopenharmony_ci ((mode) == WDR_MODE_4To1_FRAME_FULL_RATE)) 431bd4fe43Sopenharmony_ci#define IS_HALF_WDR_MODE(mode) (((mode) == WDR_MODE_2To1_FRAME) || ((mode) == WDR_MODE_3To1_FRAME) || \ 441bd4fe43Sopenharmony_ci ((mode) == WDR_MODE_4To1_FRAME)) 451bd4fe43Sopenharmony_ci#define IS_LINE_WDR_MODE(mode) (((mode) == WDR_MODE_2To1_LINE) || ((mode) == WDR_MODE_3To1_LINE) || \ 461bd4fe43Sopenharmony_ci ((mode) == WDR_MODE_4To1_LINE) || ((mode) == WDR_MODE_QUDRA)) 471bd4fe43Sopenharmony_ci 481bd4fe43Sopenharmony_ci#define MAX_REGISTER_ALG_LIB_NUM 2 491bd4fe43Sopenharmony_ci 501bd4fe43Sopenharmony_citypedef enum hiISP_ALG_MOD_E { 511bd4fe43Sopenharmony_ci ISP_ALG_AE = 0, 521bd4fe43Sopenharmony_ci ISP_ALG_AF, 531bd4fe43Sopenharmony_ci ISP_ALG_AWB, 541bd4fe43Sopenharmony_ci ISP_ALG_BLC, 551bd4fe43Sopenharmony_ci ISP_ALG_FELOGLUT, 561bd4fe43Sopenharmony_ci ISP_ALG_LOGLUT, 571bd4fe43Sopenharmony_ci ISP_ALG_DP, 581bd4fe43Sopenharmony_ci ISP_ALG_PREGAMMA, 591bd4fe43Sopenharmony_ci ISP_ALG_DRC, 601bd4fe43Sopenharmony_ci ISP_ALG_DEMOSAIC, 611bd4fe43Sopenharmony_ci ISP_ALG_ANTIFALSECOLOR, 621bd4fe43Sopenharmony_ci ISP_ALG_GAMMA, 631bd4fe43Sopenharmony_ci ISP_ALG_GE, 641bd4fe43Sopenharmony_ci ISP_ALG_SHARPEN, 651bd4fe43Sopenharmony_ci ISP_ALG_EDGEAMRK, 661bd4fe43Sopenharmony_ci ISP_ALG_FrameWDR, 671bd4fe43Sopenharmony_ci ISP_ALG_FPN, 681bd4fe43Sopenharmony_ci ISP_ALG_DEHAZE, 691bd4fe43Sopenharmony_ci ISP_ALG_ACM, 701bd4fe43Sopenharmony_ci ISP_ALG_LCAC, 711bd4fe43Sopenharmony_ci ISP_ALG_GCAC, 721bd4fe43Sopenharmony_ci ISP_ALG_CSC, 731bd4fe43Sopenharmony_ci ISP_ALG_EXPANDER, 741bd4fe43Sopenharmony_ci ISP_ALG_MCDS, 751bd4fe43Sopenharmony_ci ISP_ALG_ACS, 761bd4fe43Sopenharmony_ci ISP_ALG_LSC, 771bd4fe43Sopenharmony_ci ISP_ALG_RLSC, 781bd4fe43Sopenharmony_ci ISP_ALG_FeLSC, 791bd4fe43Sopenharmony_ci ISP_ALG_RC, 801bd4fe43Sopenharmony_ci ISP_ALG_RGBIR, 811bd4fe43Sopenharmony_ci ISP_ALG_HRS, 821bd4fe43Sopenharmony_ci ISP_ALG_DG, 831bd4fe43Sopenharmony_ci ISP_ALG_BAYERNR, 841bd4fe43Sopenharmony_ci ISP_ALG_FLICKER, 851bd4fe43Sopenharmony_ci ISP_ALG_SPLIT, 861bd4fe43Sopenharmony_ci ISP_ALG_LDCI, 871bd4fe43Sopenharmony_ci ISP_ALG_CA, 881bd4fe43Sopenharmony_ci ISP_ALG_CLUT, 891bd4fe43Sopenharmony_ci ISP_ALG_DETAIL, 901bd4fe43Sopenharmony_ci ISP_ALG_CCM, 911bd4fe43Sopenharmony_ci ISP_ALG_AI, 921bd4fe43Sopenharmony_ci ISP_ALG_BUTT, 931bd4fe43Sopenharmony_ci} ISP_ALG_MOD_E; 941bd4fe43Sopenharmony_ci 951bd4fe43Sopenharmony_citypedef enum hiISP_CTRL_CMD_E { 961bd4fe43Sopenharmony_ci ISP_WDR_MODE_SET = 8000, 971bd4fe43Sopenharmony_ci ISP_PROC_WRITE, 981bd4fe43Sopenharmony_ci 991bd4fe43Sopenharmony_ci ISP_AE_FPS_BASE_SET, 1001bd4fe43Sopenharmony_ci ISP_AE_BLC_SET, 1011bd4fe43Sopenharmony_ci ISP_AE_RC_SET, 1021bd4fe43Sopenharmony_ci ISP_AE_BAYER_FORMAT_SET, 1031bd4fe43Sopenharmony_ci ISP_AE_INIT_INFO_GET, 1041bd4fe43Sopenharmony_ci 1051bd4fe43Sopenharmony_ci ISP_AWB_ISO_SET, /* set iso, change saturation when iso change */ 1061bd4fe43Sopenharmony_ci ISP_CHANGE_IMAGE_MODE_SET, 1071bd4fe43Sopenharmony_ci ISP_UPDATE_INFO_GET, 1081bd4fe43Sopenharmony_ci ISP_FRAMEINFO_GET, 1091bd4fe43Sopenharmony_ci ISP_ATTACHINFO_GET, 1101bd4fe43Sopenharmony_ci ISP_COLORGAMUTINFO_GET, 1111bd4fe43Sopenharmony_ci ISP_AWB_INTTIME_SET, 1121bd4fe43Sopenharmony_ci ISP_BAS_MODE_SET, 1131bd4fe43Sopenharmony_ci ISP_PROTRIGGER_SET, 1141bd4fe43Sopenharmony_ci ISP_AWB_PIRIS_SET, 1151bd4fe43Sopenharmony_ci ISP_AWB_SNAP_MODE_SET, 1161bd4fe43Sopenharmony_ci ISP_AWB_ZONE_ROW_SET, 1171bd4fe43Sopenharmony_ci ISP_AWB_ZONE_COL_SET, 1181bd4fe43Sopenharmony_ci ISP_AWB_ZONE_BIN_SET, 1191bd4fe43Sopenharmony_ci ISP_AWB_ERR_GET, 1201bd4fe43Sopenharmony_ci ISP_CTRL_CMD_BUTT, 1211bd4fe43Sopenharmony_ci} ISP_CTRL_CMD_E; 1221bd4fe43Sopenharmony_ci 1231bd4fe43Sopenharmony_citypedef struct hiISP_CTRL_PROC_WRITE_S { 1241bd4fe43Sopenharmony_ci HI_CHAR *pcProcBuff; 1251bd4fe43Sopenharmony_ci HI_U32 u32BuffLen; 1261bd4fe43Sopenharmony_ci HI_U32 u32WriteLen; /* The len count should contain '\0'. */ 1271bd4fe43Sopenharmony_ci} ISP_CTRL_PROC_WRITE_S; 1281bd4fe43Sopenharmony_ci 1291bd4fe43Sopenharmony_citypedef struct hiISP_STITCH_ATTR_S { 1301bd4fe43Sopenharmony_ci HI_BOOL bStitchEnable; 1311bd4fe43Sopenharmony_ci HI_BOOL bMainPipe; 1321bd4fe43Sopenharmony_ci HI_U8 u8StitchPipeNum; 1331bd4fe43Sopenharmony_ci HI_S8 as8StitchBindId[VI_MAX_PIPE_NUM]; 1341bd4fe43Sopenharmony_ci} ISP_STITCH_ATTR_S; 1351bd4fe43Sopenharmony_ci/* AE */ 1361bd4fe43Sopenharmony_ci/* the init param of ae alg */ 1371bd4fe43Sopenharmony_citypedef struct hiISP_AE_PARAM_S { 1381bd4fe43Sopenharmony_ci SENSOR_ID SensorId; 1391bd4fe43Sopenharmony_ci HI_U8 u8WDRMode; 1401bd4fe43Sopenharmony_ci HI_U8 u8HDRMode; 1411bd4fe43Sopenharmony_ci HI_U16 u16BlackLevel; 1421bd4fe43Sopenharmony_ci HI_FLOAT f32Fps; 1431bd4fe43Sopenharmony_ci ISP_BAYER_FORMAT_E enBayer; 1441bd4fe43Sopenharmony_ci ISP_STITCH_ATTR_S stStitchAttr; 1451bd4fe43Sopenharmony_ci 1461bd4fe43Sopenharmony_ci HI_S32 s32Rsv; 1471bd4fe43Sopenharmony_ci} ISP_AE_PARAM_S; 1481bd4fe43Sopenharmony_ci 1491bd4fe43Sopenharmony_ci/* the statistics of ae alg */ 1501bd4fe43Sopenharmony_citypedef struct hiISP_FE_AE_STAT_1_S { 1511bd4fe43Sopenharmony_ci HI_U32 u32PixelCount[ISP_CHN_MAX_NUM]; 1521bd4fe43Sopenharmony_ci HI_U32 u32PixelWeight[ISP_CHN_MAX_NUM]; 1531bd4fe43Sopenharmony_ci HI_U32 au32HistogramMemArray[ISP_CHN_MAX_NUM][HIST_NUM]; 1541bd4fe43Sopenharmony_ci} ISP_FE_AE_STAT_1_S; 1551bd4fe43Sopenharmony_ci 1561bd4fe43Sopenharmony_citypedef struct hiISP_FE_AE_STAT_2_S { 1571bd4fe43Sopenharmony_ci HI_U16 u16GlobalAvgR[ISP_CHN_MAX_NUM]; 1581bd4fe43Sopenharmony_ci HI_U16 u16GlobalAvgGr[ISP_CHN_MAX_NUM]; 1591bd4fe43Sopenharmony_ci HI_U16 u16GlobalAvgGb[ISP_CHN_MAX_NUM]; 1601bd4fe43Sopenharmony_ci HI_U16 u16GlobalAvgB[ISP_CHN_MAX_NUM]; 1611bd4fe43Sopenharmony_ci} ISP_FE_AE_STAT_2_S; 1621bd4fe43Sopenharmony_ci 1631bd4fe43Sopenharmony_citypedef struct hiISP_FE_AE_STAT_3_S { 1641bd4fe43Sopenharmony_ci HI_U16 au16ZoneAvg[ISP_CHN_MAX_NUM][AE_ZONE_ROW][AE_ZONE_COLUMN][ISP_BAYER_CHN_NUM]; 1651bd4fe43Sopenharmony_ci} ISP_FE_AE_STAT_3_S; 1661bd4fe43Sopenharmony_ci 1671bd4fe43Sopenharmony_citypedef struct hiISP_FE_AE_STITCH_STAT_3_S { 1681bd4fe43Sopenharmony_ci HI_U16 au16ZoneAvg[VI_MAX_PIPE_NUM][ISP_CHN_MAX_NUM][AE_ZONE_ROW][AE_ZONE_COLUMN][ISP_BAYER_CHN_NUM]; 1691bd4fe43Sopenharmony_ci} ISP_FE_AE_STITCH_STAT_3_S; 1701bd4fe43Sopenharmony_ci 1711bd4fe43Sopenharmony_citypedef struct hiISP_BE_AE_STAT_1_S { 1721bd4fe43Sopenharmony_ci HI_U32 u32PixelCount; 1731bd4fe43Sopenharmony_ci HI_U32 u32PixelWeight; 1741bd4fe43Sopenharmony_ci HI_U32 au32HistogramMemArray[HIST_NUM]; 1751bd4fe43Sopenharmony_ci} ISP_BE_AE_STAT_1_S; 1761bd4fe43Sopenharmony_ci 1771bd4fe43Sopenharmony_citypedef struct hiISP_BE_AE_STAT_2_S { 1781bd4fe43Sopenharmony_ci HI_U16 u16GlobalAvgR; 1791bd4fe43Sopenharmony_ci HI_U16 u16GlobalAvgGr; 1801bd4fe43Sopenharmony_ci HI_U16 u16GlobalAvgGb; 1811bd4fe43Sopenharmony_ci HI_U16 u16GlobalAvgB; 1821bd4fe43Sopenharmony_ci} ISP_BE_AE_STAT_2_S; 1831bd4fe43Sopenharmony_ci 1841bd4fe43Sopenharmony_citypedef struct hiISP_BE_AE_STAT_3_S { 1851bd4fe43Sopenharmony_ci HI_U16 au16ZoneAvg[AE_ZONE_ROW][AE_ZONE_COLUMN][ISP_BAYER_CHN_NUM]; 1861bd4fe43Sopenharmony_ci} ISP_BE_AE_STAT_3_S; 1871bd4fe43Sopenharmony_ci 1881bd4fe43Sopenharmony_citypedef struct hiISP_BE_AE_STITCH_STAT_3_S { 1891bd4fe43Sopenharmony_ci HI_U16 au16ZoneAvg[VI_MAX_PIPE_NUM][AE_ZONE_ROW][AE_ZONE_COLUMN][ISP_BAYER_CHN_NUM]; 1901bd4fe43Sopenharmony_ci} ISP_BE_AE_STITCH_STAT_3_S; 1911bd4fe43Sopenharmony_ci 1921bd4fe43Sopenharmony_citypedef struct hiISP_AE_INFO_S { 1931bd4fe43Sopenharmony_ci HI_U32 u32FrameCnt; /* the counting of frame */ 1941bd4fe43Sopenharmony_ci ISP_SMART_INFO_S stSmartInfo; 1951bd4fe43Sopenharmony_ci 1961bd4fe43Sopenharmony_ci ISP_FE_AE_STAT_1_S *pstFEAeStat1; 1971bd4fe43Sopenharmony_ci ISP_FE_AE_STAT_2_S *pstFEAeStat2; 1981bd4fe43Sopenharmony_ci ISP_FE_AE_STAT_3_S *pstFEAeStat3; 1991bd4fe43Sopenharmony_ci ISP_FE_AE_STITCH_STAT_3_S *pstFEAeStiStat; 2001bd4fe43Sopenharmony_ci ISP_BE_AE_STAT_1_S *pstBEAeStat1; 2011bd4fe43Sopenharmony_ci ISP_BE_AE_STAT_2_S *pstBEAeStat2; 2021bd4fe43Sopenharmony_ci ISP_BE_AE_STAT_3_S *pstBEAeStat3; 2031bd4fe43Sopenharmony_ci ISP_BE_AE_STITCH_STAT_3_S *pstBEAeStiStat; 2041bd4fe43Sopenharmony_ci} ISP_AE_INFO_S; 2051bd4fe43Sopenharmony_ci 2061bd4fe43Sopenharmony_citypedef struct hiISP_AE_STAT_ATTR_S { 2071bd4fe43Sopenharmony_ci HI_BOOL bChange; 2081bd4fe43Sopenharmony_ci 2091bd4fe43Sopenharmony_ci HI_BOOL bHistAdjust; 2101bd4fe43Sopenharmony_ci HI_U8 u8AEBESel; 2111bd4fe43Sopenharmony_ci HI_U8 u8FourPlaneMode; 2121bd4fe43Sopenharmony_ci HI_U8 u8HistOffsetX; 2131bd4fe43Sopenharmony_ci HI_U8 u8HistOffsetY; 2141bd4fe43Sopenharmony_ci HI_U8 u8HistSkipX; 2151bd4fe43Sopenharmony_ci HI_U8 u8HistSkipY; 2161bd4fe43Sopenharmony_ci 2171bd4fe43Sopenharmony_ci HI_BOOL bModeUpdate; 2181bd4fe43Sopenharmony_ci HI_U8 u8HistMode; 2191bd4fe43Sopenharmony_ci HI_U8 u8AverMode; 2201bd4fe43Sopenharmony_ci HI_U8 u8MaxGainMode; 2211bd4fe43Sopenharmony_ci 2221bd4fe43Sopenharmony_ci HI_BOOL bWightTableUpdate; 2231bd4fe43Sopenharmony_ci HI_U8 au8WeightTable[VI_MAX_PIPE_NUM][AE_ZONE_ROW][AE_ZONE_COLUMN]; 2241bd4fe43Sopenharmony_ci} ISP_AE_STAT_ATTR_S; 2251bd4fe43Sopenharmony_ci 2261bd4fe43Sopenharmony_ci/* the final calculate of ae alg */ 2271bd4fe43Sopenharmony_ci#define AE_INT_TIME_NUM 4 2281bd4fe43Sopenharmony_citypedef struct hiISP_AE_RESULT_S { 2291bd4fe43Sopenharmony_ci HI_U32 u32IntTime[AE_INT_TIME_NUM]; 2301bd4fe43Sopenharmony_ci HI_U32 u32IspDgain; 2311bd4fe43Sopenharmony_ci HI_U32 u32Again; 2321bd4fe43Sopenharmony_ci HI_U32 u32Dgain; 2331bd4fe43Sopenharmony_ci HI_U32 u32Iso; 2341bd4fe43Sopenharmony_ci HI_U32 u32IspDgainSF; 2351bd4fe43Sopenharmony_ci HI_U32 u32AgainSF; 2361bd4fe43Sopenharmony_ci HI_U32 u32DgainSF; 2371bd4fe43Sopenharmony_ci HI_U32 u32IsoSF; 2381bd4fe43Sopenharmony_ci HI_U8 u8AERunInterval; 2391bd4fe43Sopenharmony_ci 2401bd4fe43Sopenharmony_ci HI_BOOL bPirisValid; 2411bd4fe43Sopenharmony_ci HI_S32 s32PirisPos; 2421bd4fe43Sopenharmony_ci HI_U32 u32PirisGain; 2431bd4fe43Sopenharmony_ci HI_U32 u32SnsLhcgExpRatio; 2441bd4fe43Sopenharmony_ci 2451bd4fe43Sopenharmony_ci ISP_FSWDR_MODE_E enFSWDRMode; 2461bd4fe43Sopenharmony_ci HI_U32 au32WDRGain[WDR_MAX_FRAME_NUM]; 2471bd4fe43Sopenharmony_ci HI_U32 u32HmaxTimes; /* unit is ns */ 2481bd4fe43Sopenharmony_ci HI_U32 u32Vmax; /* unit is line */ 2491bd4fe43Sopenharmony_ci 2501bd4fe43Sopenharmony_ci ISP_AE_STAT_ATTR_S stStatAttr; 2511bd4fe43Sopenharmony_ci ISP_DCF_UPDATE_INFO_S stUpdateInfo; 2521bd4fe43Sopenharmony_ci} ISP_AE_RESULT_S; 2531bd4fe43Sopenharmony_ci 2541bd4fe43Sopenharmony_citypedef struct hiISP_AE_INIT_INFO_S { 2551bd4fe43Sopenharmony_ci HI_U32 u32IspDgain; 2561bd4fe43Sopenharmony_ci HI_U32 u32Iso; 2571bd4fe43Sopenharmony_ci} ISP_AE_INIT_INFO_S; 2581bd4fe43Sopenharmony_ci 2591bd4fe43Sopenharmony_citypedef struct hiISP_AE_EXP_FUNC_S { 2601bd4fe43Sopenharmony_ci HI_S32 (*pfn_ae_init)(HI_S32 s32Handle, const ISP_AE_PARAM_S *pstAeParam); 2611bd4fe43Sopenharmony_ci HI_S32 (*pfn_ae_run)(HI_S32 s32Handle, 2621bd4fe43Sopenharmony_ci const ISP_AE_INFO_S *pstAeInfo, 2631bd4fe43Sopenharmony_ci ISP_AE_RESULT_S *pstAeResult, 2641bd4fe43Sopenharmony_ci HI_S32 s32Rsv); 2651bd4fe43Sopenharmony_ci HI_S32 (*pfn_ae_ctrl)(HI_S32 s32Handle, HI_U32 u32Cmd, HI_VOID *pValue); 2661bd4fe43Sopenharmony_ci HI_S32 (*pfn_ae_exit)(HI_S32 s32Handle); 2671bd4fe43Sopenharmony_ci} ISP_AE_EXP_FUNC_S; 2681bd4fe43Sopenharmony_ci 2691bd4fe43Sopenharmony_citypedef struct hiISP_AE_REGISTER_S { 2701bd4fe43Sopenharmony_ci ISP_AE_EXP_FUNC_S stAeExpFunc; 2711bd4fe43Sopenharmony_ci} ISP_AE_REGISTER_S; 2721bd4fe43Sopenharmony_ci 2731bd4fe43Sopenharmony_ci/* AWB */ 2741bd4fe43Sopenharmony_citypedef enum hiAWB_CTRL_CMD_E { 2751bd4fe43Sopenharmony_ci AWB_CCM_CONFIG_SET, 2761bd4fe43Sopenharmony_ci AWB_CCM_CONFIG_GET, 2771bd4fe43Sopenharmony_ci 2781bd4fe43Sopenharmony_ci AWB_DEBUG_ATTR_SET, 2791bd4fe43Sopenharmony_ci AWB_DEBUG_ATTR_GET, 2801bd4fe43Sopenharmony_ci 2811bd4fe43Sopenharmony_ci AWB_CTRL_BUTT, 2821bd4fe43Sopenharmony_ci} AWB_CTRL_CMD_E; 2831bd4fe43Sopenharmony_ci 2841bd4fe43Sopenharmony_citypedef struct hiAWB_CCM_CONFIG_S { 2851bd4fe43Sopenharmony_ci HI_BOOL bAWBBypassEn; 2861bd4fe43Sopenharmony_ci HI_BOOL bManualSatEn; 2871bd4fe43Sopenharmony_ci HI_BOOL bManualTempEn; 2881bd4fe43Sopenharmony_ci 2891bd4fe43Sopenharmony_ci HI_U32 u32ManualSatValue; 2901bd4fe43Sopenharmony_ci HI_U32 u32ManualTempValue; 2911bd4fe43Sopenharmony_ci HI_U16 u16CCMSpeed; 2921bd4fe43Sopenharmony_ci 2931bd4fe43Sopenharmony_ci HI_U16 au16HighCCM[CCM_MATRIX_SIZE]; 2941bd4fe43Sopenharmony_ci HI_U16 au16LowCCM[CCM_MATRIX_SIZE]; 2951bd4fe43Sopenharmony_ci HI_U16 u16HighColorTemp; 2961bd4fe43Sopenharmony_ci HI_U16 u16LowColorTemp; 2971bd4fe43Sopenharmony_ci} AWB_CCM_CONFIG_S; 2981bd4fe43Sopenharmony_ci 2991bd4fe43Sopenharmony_ci/* the init param of awb alg */ 3001bd4fe43Sopenharmony_citypedef struct hiISP_AWB_PARAM_S { 3011bd4fe43Sopenharmony_ci SENSOR_ID SensorId; 3021bd4fe43Sopenharmony_ci HI_U8 u8WDRMode; 3031bd4fe43Sopenharmony_ci HI_U8 u8AWBZoneRow; 3041bd4fe43Sopenharmony_ci HI_U8 u8AWBZoneCol; 3051bd4fe43Sopenharmony_ci HI_U8 u8AWBZoneBin; 3061bd4fe43Sopenharmony_ci ISP_STITCH_ATTR_S stStitchAttr; 3071bd4fe43Sopenharmony_ci HI_U16 u16AWBWidth; 3081bd4fe43Sopenharmony_ci HI_U16 u16AWBHeight; 3091bd4fe43Sopenharmony_ci HI_U32 u32InitIso; 3101bd4fe43Sopenharmony_ci HI_S8 s8Rsv; 3111bd4fe43Sopenharmony_ci} ISP_AWB_PARAM_S; 3121bd4fe43Sopenharmony_ci 3131bd4fe43Sopenharmony_ci/* the statistics of awb alg */ 3141bd4fe43Sopenharmony_citypedef struct hiISP_AWB_STAT_1_S { 3151bd4fe43Sopenharmony_ci HI_U16 u16MeteringAwbAvgR; 3161bd4fe43Sopenharmony_ci HI_U16 u16MeteringAwbAvgG; 3171bd4fe43Sopenharmony_ci HI_U16 u16MeteringAwbAvgB; 3181bd4fe43Sopenharmony_ci HI_U16 u16MeteringAwbCountAll; 3191bd4fe43Sopenharmony_ci} ISP_AWB_STAT_1_S; 3201bd4fe43Sopenharmony_ci 3211bd4fe43Sopenharmony_citypedef struct hiISP_AWB_STAT_2_S { 3221bd4fe43Sopenharmony_ci HI_U16 au16MeteringMemArrayAvgR[AWB_ZONE_NUM]; 3231bd4fe43Sopenharmony_ci HI_U16 au16MeteringMemArrayAvgG[AWB_ZONE_NUM]; 3241bd4fe43Sopenharmony_ci HI_U16 au16MeteringMemArrayAvgB[AWB_ZONE_NUM]; 3251bd4fe43Sopenharmony_ci HI_U16 au16MeteringMemArrayCountAll[AWB_ZONE_NUM]; 3261bd4fe43Sopenharmony_ci} ISP_AWB_STAT_2_S; 3271bd4fe43Sopenharmony_ci 3281bd4fe43Sopenharmony_citypedef struct hiISP_AWB_STAT_STITCH_S { 3291bd4fe43Sopenharmony_ci HI_U16 u16ZoneCol; 3301bd4fe43Sopenharmony_ci HI_U16 u16ZoneRow; 3311bd4fe43Sopenharmony_ci HI_U16 u16ZoneBin; 3321bd4fe43Sopenharmony_ci HI_U16 au16MeteringMemArrayAvgR[AWB_ZONE_STITCH_MAX]; 3331bd4fe43Sopenharmony_ci HI_U16 au16MeteringMemArrayAvgG[AWB_ZONE_STITCH_MAX]; 3341bd4fe43Sopenharmony_ci HI_U16 au16MeteringMemArrayAvgB[AWB_ZONE_STITCH_MAX]; 3351bd4fe43Sopenharmony_ci HI_U16 au16MeteringMemArrayCountAll[AWB_ZONE_STITCH_MAX]; 3361bd4fe43Sopenharmony_ci} ISP_AWB_STAT_STITCH_S; 3371bd4fe43Sopenharmony_ci 3381bd4fe43Sopenharmony_citypedef struct hiISP_AWB_STAT_RESULT_S { 3391bd4fe43Sopenharmony_ci HI_U16 *pau16ZoneAvgR; 3401bd4fe43Sopenharmony_ci HI_U16 *pau16ZoneAvgG; 3411bd4fe43Sopenharmony_ci HI_U16 *pau16ZoneAvgB; 3421bd4fe43Sopenharmony_ci HI_U16 *pau16ZoneCount; 3431bd4fe43Sopenharmony_ci} ISP_AWB_STAT_RESULT_S; 3441bd4fe43Sopenharmony_ci 3451bd4fe43Sopenharmony_citypedef struct hiISP_AWB_INFO_S { 3461bd4fe43Sopenharmony_ci HI_U32 u32FrameCnt; 3471bd4fe43Sopenharmony_ci 3481bd4fe43Sopenharmony_ci ISP_AWB_STAT_1_S *pstAwbStat1; 3491bd4fe43Sopenharmony_ci ISP_AWB_STAT_RESULT_S stAwbStat2; 3501bd4fe43Sopenharmony_ci HI_U8 u8AwbGainSwitch; 3511bd4fe43Sopenharmony_ci HI_U8 u8AwbStatSwitch; 3521bd4fe43Sopenharmony_ci HI_BOOL bWbGainInSensor; 3531bd4fe43Sopenharmony_ci HI_U32 au32WDRWBGain[ISP_BAYER_CHN_NUM]; 3541bd4fe43Sopenharmony_ci} ISP_AWB_INFO_S; 3551bd4fe43Sopenharmony_ci 3561bd4fe43Sopenharmony_ci/* the statistics's attr of awb alg */ 3571bd4fe43Sopenharmony_citypedef struct hiISP_AWB_RAW_STAT_ATTR_S { 3581bd4fe43Sopenharmony_ci HI_BOOL bStatCfgUpdate; 3591bd4fe43Sopenharmony_ci 3601bd4fe43Sopenharmony_ci HI_U16 u16MeteringWhiteLevelAwb; 3611bd4fe43Sopenharmony_ci HI_U16 u16MeteringBlackLevelAwb; 3621bd4fe43Sopenharmony_ci HI_U16 u16MeteringCrRefMaxAwb; 3631bd4fe43Sopenharmony_ci HI_U16 u16MeteringCbRefMaxAwb; 3641bd4fe43Sopenharmony_ci HI_U16 u16MeteringCrRefMinAwb; 3651bd4fe43Sopenharmony_ci HI_U16 u16MeteringCbRefMinAwb; 3661bd4fe43Sopenharmony_ci} ISP_AWB_RAW_STAT_ATTR_S; 3671bd4fe43Sopenharmony_ci 3681bd4fe43Sopenharmony_ci/* the final calculate of awb alg */ 3691bd4fe43Sopenharmony_citypedef struct hiISP_AWB_RESULT_S { 3701bd4fe43Sopenharmony_ci HI_U32 au32WhiteBalanceGain[ISP_BAYER_CHN_NUM]; 3711bd4fe43Sopenharmony_ci HI_U16 au16ColorMatrix[CCM_MATRIX_SIZE]; 3721bd4fe43Sopenharmony_ci HI_U32 u32ColorTemp; 3731bd4fe43Sopenharmony_ci HI_U8 u8Saturation; 3741bd4fe43Sopenharmony_ci ISP_AWB_RAW_STAT_ATTR_S stRawStatAttr; 3751bd4fe43Sopenharmony_ci} ISP_AWB_RESULT_S; 3761bd4fe43Sopenharmony_ci 3771bd4fe43Sopenharmony_citypedef struct hiISP_AWB_EXP_FUNC_S { 3781bd4fe43Sopenharmony_ci HI_S32 (*pfn_awb_init)(HI_S32 s32Handle, const ISP_AWB_PARAM_S *pstAwbParam, ISP_AWB_RESULT_S *pstAwbResult); 3791bd4fe43Sopenharmony_ci HI_S32 (*pfn_awb_run)(HI_S32 s32Handle, 3801bd4fe43Sopenharmony_ci const ISP_AWB_INFO_S *pstAwbInfo, 3811bd4fe43Sopenharmony_ci ISP_AWB_RESULT_S *pstAwbResult, 3821bd4fe43Sopenharmony_ci HI_S32 s32Rsv); 3831bd4fe43Sopenharmony_ci HI_S32 (*pfn_awb_ctrl)(HI_S32 s32Handle, HI_U32 u32Cmd, HI_VOID *pValue); 3841bd4fe43Sopenharmony_ci HI_S32 (*pfn_awb_exit)(HI_S32 s32Handle); 3851bd4fe43Sopenharmony_ci} ISP_AWB_EXP_FUNC_S; 3861bd4fe43Sopenharmony_ci 3871bd4fe43Sopenharmony_citypedef struct hiISP_AWB_REGISTER_S { 3881bd4fe43Sopenharmony_ci ISP_AWB_EXP_FUNC_S stAwbExpFunc; 3891bd4fe43Sopenharmony_ci} ISP_AWB_REGISTER_S; 3901bd4fe43Sopenharmony_ci 3911bd4fe43Sopenharmony_ci/* AF */ 3921bd4fe43Sopenharmony_ci/* the statistics of af alg */ 3931bd4fe43Sopenharmony_citypedef struct hiISP_AF_ZONE_S { 3941bd4fe43Sopenharmony_ci HI_U16 u16v1; 3951bd4fe43Sopenharmony_ci HI_U16 u16h1; 3961bd4fe43Sopenharmony_ci HI_U16 u16v2; 3971bd4fe43Sopenharmony_ci HI_U16 u16h2; 3981bd4fe43Sopenharmony_ci HI_U16 u16y; 3991bd4fe43Sopenharmony_ci HI_U16 u16HlCnt; 4001bd4fe43Sopenharmony_ci} ISP_AF_ZONE_S; 4011bd4fe43Sopenharmony_ci 4021bd4fe43Sopenharmony_citypedef struct hiISP_FE_AF_STAT_S { 4031bd4fe43Sopenharmony_ci ISP_AF_ZONE_S stZoneMetrics[WDR_CHN_MAX][AF_ZONE_ROW][AF_ZONE_COLUMN]; /* R; The zoned measure of contrast */ 4041bd4fe43Sopenharmony_ci} ISP_FE_AF_STAT_S; 4051bd4fe43Sopenharmony_ci 4061bd4fe43Sopenharmony_citypedef struct hiISP_BE_AF_STAT_S { 4071bd4fe43Sopenharmony_ci ISP_AF_ZONE_S stZoneMetrics[AF_ZONE_ROW][AF_ZONE_COLUMN]; /* R; The zoned measure of contrast */ 4081bd4fe43Sopenharmony_ci} ISP_BE_AF_STAT_S; 4091bd4fe43Sopenharmony_ci 4101bd4fe43Sopenharmony_ci#define ALG_LIB_NAME_SIZE_MAX 20 4111bd4fe43Sopenharmony_citypedef struct hiALG_LIB_S { 4121bd4fe43Sopenharmony_ci HI_S32 s32Id; 4131bd4fe43Sopenharmony_ci HI_CHAR acLibName[ALG_LIB_NAME_SIZE_MAX]; 4141bd4fe43Sopenharmony_ci} ALG_LIB_S; 4151bd4fe43Sopenharmony_ci 4161bd4fe43Sopenharmony_citypedef struct hiISP_BIND_ATTR_S { 4171bd4fe43Sopenharmony_ci SENSOR_ID SensorId; 4181bd4fe43Sopenharmony_ci ALG_LIB_S stAeLib; 4191bd4fe43Sopenharmony_ci ALG_LIB_S stAfLib; 4201bd4fe43Sopenharmony_ci ALG_LIB_S stAwbLib; 4211bd4fe43Sopenharmony_ci} ISP_BIND_ATTR_S; 4221bd4fe43Sopenharmony_ci 4231bd4fe43Sopenharmony_ci#ifdef __cplusplus 4241bd4fe43Sopenharmony_ci#if __cplusplus 4251bd4fe43Sopenharmony_ci} 4261bd4fe43Sopenharmony_ci#endif 4271bd4fe43Sopenharmony_ci#endif /* End of #ifdef __cplusplus */ 4281bd4fe43Sopenharmony_ci 4291bd4fe43Sopenharmony_ci#endif /* __HI_COMM_SNS_H__ */ 430