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