1/*
2 * Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef __HI_AWB_COMM_H__
17#define __HI_AWB_COMM_H__
18
19#include "hi_type.h"
20#include "hi_comm_isp.h"
21
22#ifdef __cplusplus
23#if __cplusplus
24extern "C" {
25#endif
26#endif /* End of #ifdef __cplusplus */
27
28#define HI_AWB_LIB_NAME "hisi_awb_lib"
29
30typedef struct hiAWB_DBG_ATTR_S {
31    HI_U16 u16WhiteLevel;
32    HI_U16 u16BlackLevel;
33    HI_U16 u16CrMax;
34    HI_U16 u16CrMin;
35    HI_U16 u16CbMax;
36    HI_U16 u16CbMin;
37    HI_U16 u16CrHigh;
38    HI_U16 u16CrLow;
39    HI_U16 u16CbHigh;
40    HI_U16 u16CbLow;
41    HI_U16 u16RawWhiteLevel;
42    HI_U16 u16RawBlackLevel;
43    HI_U16 u16RawCrMax;
44    HI_U16 u16RawCrMin;
45    HI_U16 u16RawCbMax;
46    HI_U16 u16RawCbMin;
47    HI_U16 u16RawCrHigh;
48    HI_U16 u16RawCrLow;
49    HI_U16 u16RawCbHigh;
50    HI_U16 u16RawCbLow;
51
52    HI_U16 u16WDRMode;
53    HI_U16 u16Enable;
54    HI_U16 u16ManualEnable;
55    HI_U16 u16Zone;
56    HI_U16 u16HighTemp;
57    HI_U16 u16LowTemp;
58    HI_U16 u16RefTemp;
59    HI_U16 u16RgainBase;
60    HI_U16 u16GgainBase;
61    HI_U16 u16BgainBase;
62    HI_S32 s32p1;
63    HI_S32 s32p2;
64    HI_S32 s32q;
65    HI_S32 s32a;
66    HI_S32 s32c;
67
68    HI_U16 u16ManSatEnable;
69    HI_U16 u16SatTarget;
70} AWB_DBG_ATTR_S;
71
72typedef struct hiAWB_ZONE_DBG_S {
73    HI_U16 u16Sum;
74    HI_U16 u16Rg;
75    HI_U16 u16Bg;
76    HI_U16 u16CountAll;
77    HI_U16 u16CountMin;
78    HI_U16 u16CountMax;
79    HI_U16 u16RawRAvg;
80    HI_U16 u16RawGAvg;
81    HI_U16 u16RawBAvg;
82    HI_U16 u16TK;
83    HI_U16 u16Weight;
84    HI_S16 s16Shift;
85} AWB_ZONE_DBG_S;
86
87typedef struct hiAWB_DBG_STATUS_S {
88    HI_U32 u32FrmNumBgn;
89    HI_U32 u32GlobalSum;
90    HI_U16 u16GlobalRgSta;
91    HI_U16 u16GlobalBgSta;
92    HI_U16 u16GlobalCountAll;
93    HI_U16 u16GlobalCountMin;
94    HI_U16 u16GlobalCountMax;
95    HI_U16 u16GlobalRAvg;
96    HI_U16 u16GlobalGAvg;
97    HI_U16 u16GlobalBAvg;
98    HI_U16 u16TK;
99    HI_U16 u16Rgain;
100    HI_U16 u16Ggain;
101    HI_U16 u16Bgain;
102    HI_U16 au16CCM[CCM_MATRIX_SIZE];
103
104    HI_U32 au32HistInfo[256];   /* 256 is size of hist info */
105    AWB_ZONE_DBG_S astZoneDebug[AWB_ZONE_NUM];
106
107    HI_U32 u32FrmNumEnd;
108} AWB_DBG_STATUS_S;
109
110/* sensor's interface to awb */
111typedef struct hiAWB_CCM_TAB_S {
112    HI_U16 u16ColorTemp;                   /* RW;  Range:[2000,10000]; Format:16.0; the current color temperature */
113    HI_U16 au16CCM[CCM_MATRIX_SIZE];       /* RW;  Range: [0x0, 0xFFFF]; Format:8.8;
114                                              CCM matrixes for different color temperature */
115} AWB_CCM_TAB_S;
116
117typedef struct hiAWB_CCM_S {
118    HI_U16  u16CCMTabNum;                   /* RW;  Range: [0x3, 0x7]; Format:16.0; The number of CCM matrixes */
119    AWB_CCM_TAB_S astCCMTab[CCM_MATRIX_NUM];
120} AWB_CCM_S;
121
122typedef struct hiAWB_AGC_TABLE_S {
123    HI_BOOL bValid;
124
125    HI_U8   au8Saturation[ISP_AUTO_ISO_STRENGTH_NUM];   /* RW;adjust saturation, different iso with different
126                                                           saturation */
127} AWB_AGC_TABLE_S;
128
129typedef struct hiAWB_SENSOR_DEFAULT_S {
130    HI_U16  u16WbRefTemp;       /* RW;reference color temperature for WB  */
131    HI_U16  au16GainOffset[ISP_BAYER_CHN_NUM];  /* RW; gain offset for white balance */
132    HI_S32  as32WbPara[AWB_CURVE_PARA_NUM];      /* RW; parameter for wb curve,p1,p2,q1,a1,b1,c1 */
133
134    HI_U16  u16GoldenRgain;      /* Rgain for the golden sample */
135    HI_U16  u16GoldenBgain;      /* Bgain for the golden sample */
136    HI_U16  u16SampleRgain;      /* Rgain for the current sample */
137    HI_U16  u16SampleBgain;      /* Bgain for the current sample */
138    AWB_AGC_TABLE_S stAgcTbl;
139    AWB_CCM_S stCcm;
140    HI_U16    u16InitRgain;           /* Init WB gain */
141    HI_U16    u16InitGgain;
142    HI_U16    u16InitBgain;
143    HI_U8     u8AWBRunInterval;       /* RW;AWB Run Interval */
144    HI_U16    au16InitCCM[CCM_MATRIX_SIZE];
145} AWB_SENSOR_DEFAULT_S;
146
147typedef struct hiAWB_SPEC_SENSOR_DEFAULT_S {
148    ISP_SPECAWB_ATTR_S  stSpecAwbAttrs;
149    ISP_SPECAWB_CAA_CONTROl_S stCaaControl;
150} AWB_SPEC_SENSOR_DEFAULT_S;
151
152typedef struct hiAWB_SENSOR_EXP_FUNC_S {
153    HI_S32 (*pfn_cmos_get_awb_default)(VI_PIPE ViPipe, AWB_SENSOR_DEFAULT_S *pstAwbSnsDft);
154    HI_S32 (*pfn_cmos_get_awb_spec_default)(VI_PIPE ViPipe, AWB_SPEC_SENSOR_DEFAULT_S *pstAwbSpecSnsDft);
155} AWB_SENSOR_EXP_FUNC_S;
156
157typedef struct hiAWB_SENSOR_REGISTER_S {
158    AWB_SENSOR_EXP_FUNC_S stSnsExp;
159} AWB_SENSOR_REGISTER_S;
160
161#ifdef __cplusplus
162#if __cplusplus
163}
164#endif
165#endif /* End of #ifdef __cplusplus */
166
167#endif
168