xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/include/algos/awb/rk_aiq_types_awb_stat_v201.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2 * rk_aiq_types_awb_stat_v201.h
3 
4 * for rockchip v2.0.0
5 *
6 *  Copyright (c) 2019 Rockchip Corporation
7 *
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
11 *
12 *      http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 *
20 */
21 /* for rockchip v2.0.0*/
22 
23 #ifndef __RK_AIQ_TYPE_AWB_STAT_V201_H__
24 #define __RK_AIQ_TYPE_AWB_STAT_V201_H__
25 
26 #include "rk_aiq_types_awb_stat_v2xx.h"
27 
28 #ifdef ISP_HW_V30 //for rk3588
29 #define AWB_MULTI_WINDOW_EN
30 #define AWB_EXCWP_RANGE_STAT_EN
31 #define AWB_WPNUM2_EN
32 #define RK_AIQ_AWB_WP_WEIGHT_BIS_V201 5
33 #define RK_AIQ_WP_GAIN_FRAC_BIS 9
34 #else
35 #define RK_AIQ_AWB_WP_WEIGHT_BIS_V201 6
36 #define RK_AIQ_WP_GAIN_FRAC_BIS 10
37 #endif
38 #define RK_AIQ_AWB_WIDTH 5120
39 #define RK_AIQ_AWB_HEIGHT 2880
40 #define RK_AIQ_AWB_STAT_MAX_AREA (RK_AIQ_AWB_WIDTH * RK_AIQ_AWB_HEIGHT)
41 #define RK_AIQ_AWB_STAT_WP_RANGE_NUM_V201 4
42 #define RK_AIQ_AWB_MULTIWINDOW_NUM_V201 4
43 #define RK_AIQ_AWB_WP_HIST_BIN_NUM 8
44 #define RK_AIQ_WP_GAIN_FRAC_BIS_INTERNAL 8
45 #define RK_AIQ_AWBWP_WEIGHT_CURVE_DOT_NUM (RK_AIQ_AWB_WP_HIST_BIN_NUM+1)
46 #define RK_AIQ_AWB_YUV2_THCURVE_DOT_NUM 6
47 #define RK_AIQ_AWB_YUV2_MATRIX_FRAC_BIT 9
48 #define RK_AIQ_AWB_YUV2_OFFSET_FRAC_BIT 4
49 #define RK_AIQ_AWB_YUV2_OUT_FRAC_BIT 4
50 #define RK_AIQ_AWB_YUV2_OUT_INTEGER_BIT 8
51 
52 #define RK_AIQ_AWB_PRE_WBGAIN_FRAC_BIT 8
53 
54 typedef enum rk_aiq_awb_xy_type_v201_e {
55     RK_AIQ_AWB_XY_TYPE_NORMAL_V201 = 0,
56     RK_AIQ_AWB_XY_TYPE_BIG_V201 = 1,
57     RK_AIQ_AWB_XY_TYPE_MAX_V201
58 } rk_aiq_awb_xy_type_v201_t;
59 
60 typedef enum rk_aiq_awb_blk_stat_mode_v201_e {
61     RK_AIQ_AWB_BLK_STAT_MODE_MIN_V201 = -1,
62     RK_AIQ_AWB_BLK_STAT_MODE_ALL_V201 = 0,
63     RK_AIQ_AWB_BLK_STAT_MODE_REALWP_V201 = 1,
64     RK_AIQ_AWB_BLK_STAT_MODE_MAX_V201
65 } rk_aiq_awb_blk_stat_mode_v201_t;
66 
67 typedef struct rk_aiq_awb_exc_range_v201_s {
68     rk_aiq_awb_exc_range_domain_t domain;//1 uv domain,2 xy domain;
69     bool excludeEnable[RK_AIQ_AWB_XY_TYPE_MAX_V201];// 0 disable,1 eanble;
70     bool measureEnable;//1 calculate sum r g b value in the range,0 not meausre
71     int xu[2];//left right
72     int yv[2];//top bottom
73 } rk_aiq_awb_exc_range_v201_t;
74 
75 typedef enum RK_AIQ_AWB_BLK_STAT_REALWP_ILL_S {
76     RK_AIQ_AWB_BLK_STAT_REALWP_ILL0 = 0,
77     RK_AIQ_AWB_BLK_STAT_REALWP_ILL1 = 1,
78     RK_AIQ_AWB_BLK_STAT_REALWP_ILL2 = 2,
79     RK_AIQ_AWB_BLK_STAT_REALWP_ILL3 = 3,
80     RK_AIQ_AWB_BLK_STAT_REALWP_ILL4 = 4,
81     RK_AIQ_AWB_BLK_STAT_REALWP_ILL5 = 5,
82     RK_AIQ_AWB_BLK_STAT_REALWP_ILL6 = 6,
83     RK_AIQ_AWB_BLK_STAT_REALWP_ALL = 7,
84     RK_AIQ_AWB_BLK_STAT_REALWP_MAX
85 } rk_aiq_awb_blk_stat_realwp_ill_e;
86 
87 typedef enum rk_aiq_awb_stat_cfg_mode_s {
88     RK_AIQ_AWB_STAT_WP_MODE = 0,
89     RK_AIQ_AWB_STAT_GW_MODE = 1,
90 } rk_aiq_awb_stat_cfg_mode_e;
91 
92 typedef struct rk_aiq_awb_stat_cfg_v201_s {
93     bool awbEnable;
94     bool lscBypEnable;
95     bool uvDetectionEnable[RK_AIQ_AWB_XY_TYPE_MAX_V201];
96     bool xyDetectionEnable[RK_AIQ_AWB_XY_TYPE_MAX_V201];
97     bool threeDyuvEnable[RK_AIQ_AWB_XY_TYPE_MAX_V201];
98     unsigned short threeDyuvIllu[RK_AIQ_AWB_YUV_LS_PARA_NUM];
99     bool wpDiffWeiEnable[RK_AIQ_AWB_XY_TYPE_MAX_V201];
100     bool blkWeightEnable[RK_AIQ_AWB_XY_TYPE_MAX_V201];//the different weight in WP sum
101     bool blkStatisticsEnable;
102     rk_aiq_down_scale_mode_t dsMode;
103     rk_aiq_awb_blk_stat_mode_v201_t blkMeasureMode;
104     bool blk_rtdw_measure_en;//right and down measure eanble
105 #ifdef AWB_MULTI_WINDOW_EN
106     bool multiwindow_en;
107     //several window in pixel domain
108     unsigned short multiwindow[RK_AIQ_AWB_MULTIWINDOW_NUM_V201][4];//8  windows in pixel domain ,hOffset,vOffser,hSize,vSize;
109 #endif
110     uint8_t frameChoose;//default value is 0,support to choose long frame ,middle frame or short frame when hdr is on
111     unsigned short windowSet[4];//hOffset,vOffser,hSiz,vSize;
112     unsigned char lightNum;
113     unsigned short maxR;
114     unsigned short minR;
115     unsigned short maxG;
116     unsigned short minG;
117     unsigned short maxB;
118     unsigned short minB;
119     unsigned short maxY;
120     unsigned short minY;
121     uint16_t pre_wbgain_inv_r;//3i+f8;
122     uint16_t pre_wbgain_inv_g;
123     uint16_t pre_wbgain_inv_b;
124     short          icrgb2RYuv_matrix[12];//3*3 matrix 9bit fracitional +0bit integer+1s
125     //  3*1 off    4bit fractional +8bit integer+1s
126     rk_aiq_awb_rt3dyuv_range_para_t     ic3Dyuv2Range_param[RK_AIQ_AWB_YUV_LS_PARA_NUM];
127     rk_aiq_awb_uv_range_para_t            uvRange_param[RK_AIQ_AWB_MAX_WHITEREGIONS_NUM];//A CWF D50 D65 D75 HZ TL84
128     rk_aiq_rgb2xy_para_t      rgb2xy_param;
129     rk_aiq_awb_xy_range_para_t    xyRange_param[RK_AIQ_AWB_MAX_WHITEREGIONS_NUM];
130     //several winow in uv or xy domain
131     rk_aiq_awb_exc_range_v201_t excludeWpRange[RK_AIQ_AWB_EXCLUDE_WP_RANGE_NUM];
132     //with differernt luma ,the different weight in WP sum
133     unsigned char wpDiffwei_y[RK_AIQ_AWBWP_WEIGHT_CURVE_DOT_NUM];//8bit
134     unsigned char wpDiffwei_w[RK_AIQ_AWBWP_WEIGHT_CURVE_DOT_NUM];//8bit fix point ,and wpDiffwei_w[4]=wpDiffwei_w[5]=255;
135     rk_aiq_awb_xy_type_v201_t xyRangeTypeForWpHist; //for xyRangeT
136     unsigned char blkWeight[RK_AIQ_AWB_GRID_NUM_TOTAL];
137     rk_aiq_awb_xy_type_v201_t xyRangeTypeForBlkStatistics; //used when blkMeasureMode>BLK_MEASURE_MODE_ALL
138     rk_aiq_awb_blk_stat_realwp_ill_e illIdxForBlkStatistics; //blkMeasureMode used when blkMeasureMode>BLK_MEASURE_MODE_ALL
139     bool blkStatisticsWithLumaWeightEn;
140     int  groupIllIndxCurrent;//not register, for time share
141     int  IllIndxSetCurrent[RK_AIQ_AWB_MAX_WHITEREGIONS_NUM];//not register,for time share
142     char timeSign[64];//not register,for time share
143     rk_aiq_awb_stat_cfg_mode_e statCfgMode; //not register,for blc1 used case
144 
145 } rk_aiq_awb_stat_cfg_v201_t;
146 
147 //typedef struct stat3a_lightType_s
148 typedef struct rk_aiq_awb_stat_wp_res_v201_s {
149     long long WpNo;
150     long long RgainValue;
151     long long BgainValue;
152 } rk_aiq_awb_stat_wp_res_v201_t;
153 
154 typedef struct rk_aiq_awb_stat_blk_res_v201_s {
155     long long WpNo;
156     long long Rvalue;
157     long long Gvalue;
158     long long Bvalue;
159 } rk_aiq_awb_stat_blk_res_v201_t;
160 
161 typedef struct rk_aiq_awb_stat_wp_res_light_v201_s {
162     rk_aiq_awb_stat_wp_res_v201_t xYType[RK_AIQ_AWB_XY_TYPE_MAX_V201];
163 } rk_aiq_awb_stat_wp_res_light_v201_t;
164 
165 typedef struct rk_aiq_awb_stat_res_v201_s {
166     //method1
167     rk_aiq_awb_stat_wp_res_light_v201_t light[RK_AIQ_AWB_MAX_WHITEREGIONS_NUM];
168 #ifdef AWB_WPNUM2_EN
169     int WpNo2[RK_AIQ_AWB_MAX_WHITEREGIONS_NUM];
170 #endif
171     //method2
172     rk_aiq_awb_stat_blk_res_v201_t   blockResult[RK_AIQ_AWB_GRID_NUM_TOTAL];
173 #ifdef AWB_MULTI_WINDOW_EN
174     //window in pixel domain
175     rk_aiq_awb_stat_wp_res_light_v201_t multiwindowLightResult[RK_AIQ_AWB_MAX_WHITEREGIONS_NUM];
176 #endif
177 #ifdef AWB_EXCWP_RANGE_STAT_EN
178     //window in xy or uv domain
179     rk_aiq_awb_stat_wp_res_v201_t excWpRangeResult[RK_AIQ_AWB_STAT_WP_RANGE_NUM_V201];
180 #endif
181     //wpno histogram
182     unsigned int WpNoHist[RK_AIQ_AWB_WP_HIST_BIN_NUM];
183 
184     rk_aiq_awb_stat_cfg_v201_t  awb_cfg_effect_v201;
185 } rk_aiq_awb_stat_res_v201_t;
186 
187 
188 typedef struct rk_aiq_awb_stat_res2_v201_s {
189     //method1
190     rk_aiq_awb_stat_wp_res_light_v201_t light[RK_AIQ_AWB_MAX_WHITEREGIONS_NUM];
191     //method2
192     rk_aiq_awb_stat_blk_res_v201_t   blockResult[RK_AIQ_AWB_GRID_NUM_TOTAL];
193     //wpno histogram
194     unsigned int WpNoHist[RK_AIQ_AWB_WP_HIST_BIN_NUM];
195 } rk_aiq_awb_stat_res2_v201_t;
196 
197 
198 typedef struct rk_aiq_awb_stat_res2_v30_s {
199     //method1
200     rk_aiq_awb_stat_wp_res_light_v201_t light[RK_AIQ_AWB_MAX_WHITEREGIONS_NUM];
201     int WpNo2[RK_AIQ_AWB_MAX_WHITEREGIONS_NUM];
202     //method2
203     rk_aiq_awb_stat_blk_res_v201_t   blockResult[RK_AIQ_AWB_GRID_NUM_TOTAL];
204     //window in pixel domain
205     rk_aiq_awb_stat_wp_res_light_v201_t multiwindowLightResult[4];
206     //window in xy or uv domain
207     rk_aiq_awb_stat_wp_res_v201_t excWpRangeResult[RK_AIQ_AWB_STAT_WP_RANGE_NUM_V201];
208     //wpno histogram
209     unsigned int WpNoHist[RK_AIQ_AWB_WP_HIST_BIN_NUM];
210 } rk_aiq_awb_stat_res2_v30_t;
211 
212 
213 
214 #endif
215