xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/include/iq_parser_v2/ccm_head.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * ccm_head.h
3  *
4  *  Copyright (c) 2021 Rockchip Corporation
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19 
20 #ifndef __CALIBDBV2_CCM_HEADER_H__
21 #define __CALIBDBV2_CCM_HEADER_H__
22 
23 #include "rk_aiq_comm.h"
24 
25 RKAIQ_BEGIN_DECLARE
26 
27 #define CCM_ILLUMINATION_MAX    7
28 #define CCM_PROFILE_NAME        ( 25U )
29 #define CCM_ILLUMINATION_NAME   ( 20U )
30 #define CCM_PROFILES_NUM_MAX    ( 5 )
31 #define CCM_RESOLUTIONS_NUM_MAX ( 4 )
32 #define CALIBDB_ISO_NUM         ( 9 )
33 
34 /*****************************************************************************/
35 /**
36  * @brief   Global ACCM calibration structure of isp2.0
37  */
38 /*****************************************************************************/
39 
40 typedef struct CalibDbV2_Ccm_Gain_Sat_Curve_s {
41     // M4_ARRAY_DESC("gains", "f32", M4_SIZE(1,4), M4_RANGE(0,256), "[4,8,16,32]", M4_DIGIT(0), M4_DYNAMIC(0))
42     float gains[4];
43     // M4_ARRAY_DESC("sat", "f32", M4_SIZE(1,4), M4_RANGE(0,100), "[100,100,90,50]", M4_DIGIT(1), M4_DYNAMIC(0))
44     float sat[4];
45 } CalibDbV2_Ccm_Gain_Sat_Curve_t;
46 
47 typedef struct CalibDbV2_Ccm_Gain_Scale_s {
48     // M4_ARRAY_DESC("gain", "f32", M4_SIZE(1,9), M4_RANGE(0,256), "[1,2,4,8,16,32,64,128,256]", M4_DIGIT(0), M4_DYNAMIC(0))
49     float gain[CALIBDB_ISO_NUM];
50     // M4_ARRAY_DESC("scale", "f32", M4_SIZE(1,9), M4_RANGE(0,1), "[1.00,0.80,0.80,0.90,1.00,1.00,1.00,1.00,1.00]", M4_DIGIT(2), M4_DYNAMIC(0))
51     float scale[CALIBDB_ISO_NUM];
52 } CalibDbV2_Ccm_Gain_Scale_t;
53 
54 typedef struct CalibDbV2_Ccm_Matrix_Para_s {
55     // M4_STRING_DESC("name", M4_SIZE(1,1), M4_RANGE(0, 25), "A_100",M4_DYNAMIC(0))
56     char* name;
57     // M4_STRING_DESC("illumination", M4_SIZE(1,1), M4_RANGE(0, 20), "A",M4_DYNAMIC(0))
58     char* illumination;
59     // M4_NUMBER_DESC("saturation", "f32", M4_RANGE(0.0, 100.0), "100.0", M4_DIGIT(1))
60     float saturation;
61     // M4_ARRAY_DESC("ccMatrix", "f32", M4_SIZE(3,3), M4_RANGE(-8,7.992), "[1.0000,0.0000,0.0000,0.0000,1.0000,0.0000,0.0000,0.0000,1.0000]", M4_DIGIT(4), M4_DYNAMIC(0))
62     float ccMatrix[9];
63     // M4_ARRAY_DESC("ccOffsets", "f32", M4_SIZE(1,3), M4_RANGE(-4095,4095), "[0.0,0.0,0.0]", M4_DIGIT(1), M4_DYNAMIC(0))
64     float ccOffsets[3];
65 } CalibDbV2_Ccm_Matrix_Para_t;
66 
67 typedef struct CalibDbV2_Ccm_Accm_Cof_Para_s {
68     // M4_STRING_DESC("name", M4_SIZE(1,1), M4_RANGE(0, 20), "A",M4_DYNAMIC(0))
69     char* name;
70     // M4_ARRAY_DESC("awbGain", "f32", M4_SIZE(1,2), M4_RANGE(0,5), "[1.0000,1.0000]", M4_DIGIT(4), M4_DYNAMIC(0))
71     float awbGain[2];
72     // M4_NUMBER_DESC("minDist", "f32", M4_RANGE(0.0, 4), "0", M4_DIGIT(4))
73     float minDist;
74     // M4_STRING_DESC("matrixUsed", M4_SIZE(1,2), M4_RANGE(0, 25), "A_100",M4_DYNAMIC(1))
75     char** matrixUsed;
76     int matrixUsed_len;
77     // M4_ARRAY_TABLE_DESC("gain sat curve", "array_table_ui", M4_INDEX_DEFAULT)
78     CalibDbV2_Ccm_Gain_Sat_Curve_t gain_sat_curve;
79 } CalibDbV2_Ccm_Accm_Cof_Para_t;
80 
81 typedef struct CalibDbV2_Ccm_Luma_Ccm_s {
82     // M4_ARRAY_DESC("RGB2Y para", "f32", M4_SIZE(1,3), M4_RANGE(0,128), "[38 75 15]", M4_DIGIT(0), M4_DYNAMIC(0))
83     float rgb2y_para[3];
84     // M4_NUMBER_DESC("bound pos bit", "f32", M4_RANGE(4, 10), "8", M4_DIGIT(0))
85     float low_bound_pos_bit;  // low & high y alpha adjust
86     // M4_ARRAY_DESC("y alpha curve", "f32", M4_SIZE(1,17), M4_RANGE(0,1024), "[0,64,128,192,256,320,384,448,512,576,640,704,768,832,896,960,1024]", M4_DIGIT(0), M4_DYNAMIC(0))
87     float y_alpha_curve[17];
88     // M4_ARRAY_TABLE_DESC("gain alphaScale curve", "array_table_ui", M4_INDEX_DEFAULT)
89     CalibDbV2_Ccm_Gain_Scale_t gain_alphaScale_curve;
90 } CalibDbV2_Ccm_Luma_Ccm_t;
91 
92 typedef struct CalibDbV2_Ccm_Alp_Sym_Para_s {
93     // M4_BOOL_DESC("high Y adjust enable", "1")
94     bool highy_adj_en;
95     // M4_NUMBER_DESC("bound pos bit", "f32", M4_RANGE(4, 10), "10", M4_DIGIT(0))
96     float bound_pos_bit;  // y alpha adjust
97     // M4_ARRAY_DESC("y alpha curve", "f32", M4_SIZE(1,17), M4_RANGE(0,1024), "1024", M4_DIGIT(0), M4_DYNAMIC(0))
98     float y_alpha_curve[17];
99 } CalibDbV2_Ccm_Alp_Sym_Para_t;
100 
101 typedef struct CalibDbV2_Ccm_Alp_Asym_Para_s {
102     // M4_NUMBER_DESC("left bound pos bit", "f32", M4_RANGE(3, 11), "10", M4_DIGIT(0))
103     float bound_pos_bit;  // low y alpha adjust
104     // M4_NUMBER_DESC("right bound pos bit", "f32", M4_RANGE(3, 11), "10", M4_DIGIT(0))
105     float right_pos_bit;  // high y alpha adjust
106     // M4_ARRAY_DESC("left y alpha curve", "f32", M4_SIZE(1,9), M4_RANGE(0,1024), "1024", M4_DIGIT(0), M4_DYNAMIC(0))
107     float y_alpha_left_curve[9];
108     // M4_ARRAY_DESC("right y alpha curve", "f32", M4_SIZE(1,9), M4_RANGE(0,1024), "1024", M4_DIGIT(0), M4_DYNAMIC(0))
109     float y_alpha_right_curve[9];
110 } CalibDbV2_Ccm_Alp_Asym_Para_t;
111 
112 typedef struct CalibDbV2_Ccm_Luma_Ccm_V2_s {
113     // M4_ARRAY_DESC("RGB2Y para", "f32", M4_SIZE(1,3), M4_RANGE(0,128), "[38 75 15]", M4_DIGIT(0), M4_DYNAMIC(0))
114     float rgb2y_para[3];
115     // M4_BOOL_DESC("asym enable", "0")
116     bool asym_enable;
117     // M4_STRUCT_DESC("y alp sym config", "normal_ui_style")
118     CalibDbV2_Ccm_Alp_Sym_Para_t y_alp_sym;
119     // M4_STRUCT_DESC("y alp asym config", "normal_ui_style")
120     CalibDbV2_Ccm_Alp_Asym_Para_t y_alp_asym;
121     // M4_ARRAY_TABLE_DESC("gain alphaScale curve", "array_table_ui", M4_INDEX_DEFAULT)
122     CalibDbV2_Ccm_Gain_Scale_t gain_alphaScale_curve;
123 } CalibDbV2_Ccm_Luma_Ccm_V2_t;
124 
125 typedef struct CalibDbV2_Ccm_illu_est_Para_s {
126     // M4_BOOL_DESC("interp enable", "0")
127     bool interp_enable;
128     // M4_STRING_DESC("default illu", M4_SIZE(1,1), M4_RANGE(0, 20), "D65",M4_DYNAMIC(0))
129     char* default_illu;
130     // M4_ARRAY_DESC("weightRB", "f32", M4_SIZE(1,2), M4_RANGE(0,3), "[1,1]", M4_DIGIT(4), M4_DYNAMIC(0))
131     float weightRB[2];
132     // M4_NUMBER_DESC("prob limit", "f32", M4_RANGE(0.0, 1), "0.2", M4_DIGIT(6))
133     float prob_limit;
134     // M4_NUMBER_DESC("frame num", "u8", M4_RANGE(1, 128), "8", M4_DIGIT(0))
135     int frame_no;
136 } CalibDbV2_Ccm_illu_est_Para_t;
137 
138 typedef struct CalibDbV2_Ccm_Tuning_Para_s {
139     // M4_BOOL_DESC("damp enable", "0")
140     bool damp_enable;
141     // M4_STRUCT_DESC("illuminant estimation", "normal_ui_style")
142     CalibDbV2_Ccm_illu_est_Para_t illu_estim;
143     // M4_STRUCT_LIST_DESC("aCcmCof", M4_SIZE_DYNAMIC, "normal_ui_style")
144     CalibDbV2_Ccm_Accm_Cof_Para_t* aCcmCof;
145     int aCcmCof_len;
146     // M4_STRUCT_LIST_DESC("matrixAll",  M4_SIZE_DYNAMIC, "normal_ui_style")
147     CalibDbV2_Ccm_Matrix_Para_t* matrixAll;
148     int matrixAll_len;
149 } CalibDbV2_Ccm_Tuning_Para_t;
150 
151 typedef struct CalibDbV2_Ccm_Manual_Para_s {
152     // M4_ARRAY_DESC("ccMatrix", "f32", M4_SIZE(3,3), M4_RANGE(-8,7.992), "[1.0000,0.0000,0.0000,0.0000,1.0000,0.0000,0.0000,0.0000,1.0000]", M4_DIGIT(4), M4_DYNAMIC(0))
153     float ccMatrix[9];
154     // M4_ARRAY_DESC("ccOffsets", "f32", M4_SIZE(1,3), M4_RANGE(-4095,4095), "[0.0,0.0,0.0]", M4_DIGIT(1), M4_DYNAMIC(0))
155     float ccOffsets[3];
156 } CalibDbV2_Ccm_Manual_Para_t;
157 
158 typedef struct CalibDbV2_Ccm_Control_Para_s {
159     // M4_BOOL_DESC("enable", "0")
160     bool enable;
161     // M4_NUMBER_DESC("wbgain tolerance", "f32", M4_RANGE(0.0, 1), "0.1", M4_DIGIT(4))
162     float wbgain_tolerance;
163     // M4_NUMBER_DESC("gain tolerance", "f32", M4_RANGE(0.0, 1), "0.2", M4_DIGIT(4))
164     float gain_tolerance;
165 } CalibDbV2_Ccm_Control_Para_t;
166 
167 typedef struct CalibDbV2_Ccm_Enh_para_s {
168     // M4_ARRAY_DESC("gains", "f32", M4_SIZE(1,9), M4_RANGE(0,256), "1", M4_DIGIT(0), M4_DYNAMIC(0))
169     float gains[9];
170     // M4_ARRAY_DESC("enable", "u8", M4_SIZE(1,9),  M4_RANGE(0, 1), "0", M4_DIGIT(0), M4_DYNAMIC(0))
171     unsigned short enh_adj_en[9];
172     // M4_ARRAY_DESC("Enhance ratio max", "f32", M4_SIZE(1,9), M4_RANGE(0, 8), "0", M4_DIGIT(1), M4_DYNAMIC(0))
173     float enh_rat_max[9];
174 } CalibDbV2_Ccm_Enh_para_t;
175 
176 typedef struct CalibDbV2_Ccm_Enhance_Para_s {
177     // M4_ARRAY_TABLE_DESC("Enhance ctrl", "array_table_ui", M4_INDEX_DEFAULT)
178     CalibDbV2_Ccm_Enh_para_t enh_ctl;
179     // M4_ARRAY_DESC("Enhance RGB2Y para", "u8", M4_SIZE(1,3), M4_RANGE(0,128), "[38 75 15]", M4_DIGIT(0), M4_DYNAMIC(0))
180     unsigned char enh_rgb2y_para[3];
181 } CalibDbV2_Ccm_Enhance_Para_t;
182 
183 typedef struct CalibDbV2_Ccm_Para_V2_s {
184     // M4_STRUCT_DESC("control", "normal_ui_style")
185     CalibDbV2_Ccm_Control_Para_t control;
186     // M4_STRUCT_DESC("lumaCCM", "normal_ui_style")
187     CalibDbV2_Ccm_Luma_Ccm_t lumaCCM;
188     // M4_STRUCT_DESC("autoCCM", "normal_ui_style")
189     CalibDbV2_Ccm_Tuning_Para_t TuningPara;
190 } CalibDbV2_Ccm_Para_V2_t;
191 
192 typedef struct CalibDbV2_Ccm_Para_V32_s {
193     // M4_STRUCT_DESC("control", "normal_ui_style")
194     CalibDbV2_Ccm_Control_Para_t control;
195     // M4_STRUCT_DESC("lumaCCM", "normal_ui_style")
196     CalibDbV2_Ccm_Luma_Ccm_V2_t lumaCCM;
197     // M4_STRUCT_DESC("enhanceCCM", "normal_ui_style")
198     CalibDbV2_Ccm_Enhance_Para_t enhCCM;
199     // M4_STRUCT_DESC("autoCCM", "normal_ui_style")
200     CalibDbV2_Ccm_Tuning_Para_t TuningPara;
201 } CalibDbV2_Ccm_Para_V32_t;
202 
203 RKAIQ_END_DECLARE
204 
205 #endif
206