1 /*
2  *  Copyright (c) 2021 Rockchip Corporation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17 
18 #ifndef _RK_AIQ_USER_API_CUSTOM_AWB_TYPE_V32_H_
19 #define _RK_AIQ_USER_API_CUSTOM_AWB_TYPE_V32_H_
20 
21 #include "rk_aiq_types.h" /* common structs */
22 #include "awb/rk_aiq_types_awb_stat_v32.h" /* include awb structs*/
23 
24 RKAIQ_BEGIN_DECLARE
25 
26 /* all awb stats */
27 typedef struct rk_aiq_customAwb_stats_s
28 {
29     rk_aiq_awb_stat_wp_res_light_v201_t light[RK_AIQ_AWB_MAX_WHITEREGIONS_NUM_V32];
30     int WpNo2[RK_AIQ_AWB_MAX_WHITEREGIONS_NUM_V32];
31     rk_aiq_awb_stat_blk_res_v201_t   blockResult[RK_AIQ_AWB_GRID_NUM_TOTAL];
32     rk_aiq_awb_stat_wp_res_v201_t excWpRangeResult[RK_AIQ_AWB_STAT_WP_RANGE_NUM_V201];
33     unsigned int WpNoHist[RK_AIQ_AWB_WP_HIST_BIN_NUM];
34     struct rk_aiq_customAwb_stats_s* next;
35 } rk_aiq_customAwb_stats_t;
36 
37 typedef enum rk_aiq_customAwb_Select_Mode_s {
38     CUSTOM_AWB_INPUT_RAW_SHORT = 0,
39     CUSTOM_AWB_INPUT_RAW_LONG = 1,
40     CUSTOM_AWB_INPUT_BAYERNR = 3,
41     CUSTOM_AWB_INPUT_DRC = 4,
42 }rk_aiq_customAwb_Raw_Select_Mode_e;
43 
44 typedef struct rk_aiq_customAwb_hw_cfg_s {
45     bool awbEnable;
46     rk_aiq_customAwb_Raw_Select_Mode_e frameChoose;
47     unsigned short windowSet[4];
48     unsigned char lightNum;
49     unsigned short maxR;
50     unsigned short minR;
51     unsigned short maxG;
52     unsigned short minG;
53     unsigned short maxB;
54     unsigned short minB;
55     unsigned short maxY;
56     unsigned short minY;
57     bool multiwindow_en;
58     unsigned short multiwindow[RK_AIQ_AWB_MULTIWINDOW_NUM_V201][4];
59 } rk_aiq_customAwb_hw_cfg_t;
60 
61 typedef struct rk_aiq_customAwb_single_hw_cfg_t {
62     unsigned short windowSet[4];
63     bool multiwindow_en;
64     unsigned short multiwindow[RK_AIQ_AWB_MULTIWINDOW_NUM_V201][4];
65 } rk_aiq_customAwb_single_hw_cfg_t;
66 
67 
68 /* different awb result for each camera */
69 typedef struct rk_aiq_customeAwb_single_results_s
70 {
71     rk_aiq_wb_gain_t awb_gain_algo;//for each camera
72     rk_aiq_customAwb_single_hw_cfg_t  awbHwConfig;//for each camera
73     struct rk_aiq_customeAwb_single_results_s *next;
74 } rk_aiq_customeAwb_single_results_t;
75 
76 
77 /* full awb results */
78 typedef struct rk_aiq_customeAwb_results_s
79 {
80     bool  IsConverged; //true: converged; false: not converged
81     rk_aiq_wb_gain_t awb_gain_algo;
82     float awb_smooth_factor;
83     rk_aiq_customAwb_hw_cfg_t  awbHwConfig;
84     rk_aiq_customeAwb_single_results_t *next;//defalut vaue is nullptr,which means all cameras with the same cfg;
85 } rk_aiq_customeAwb_results_t;
86 
87 
88 
89 RKAIQ_END_DECLARE
90 
91 #endif
92 
93