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