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