/* * ccm_head.h * * Copyright (c) 2021 Rockchip Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #ifndef __CALIBDBV2_CCM_HEADER_H__ #define __CALIBDBV2_CCM_HEADER_H__ #include "rk_aiq_comm.h" RKAIQ_BEGIN_DECLARE #define CCM_ILLUMINATION_MAX 7 #define CCM_PROFILE_NAME ( 25U ) #define CCM_ILLUMINATION_NAME ( 20U ) #define CCM_PROFILES_NUM_MAX ( 5 ) #define CCM_RESOLUTIONS_NUM_MAX ( 4 ) #define CALIBDB_ISO_NUM ( 9 ) /*****************************************************************************/ /** * @brief Global ACCM calibration structure of isp2.0 */ /*****************************************************************************/ typedef struct CalibDbV2_Ccm_Gain_Sat_Curve_s { // M4_ARRAY_DESC("gains", "f32", M4_SIZE(1,4), M4_RANGE(0,256), "[4,8,16,32]", M4_DIGIT(0), M4_DYNAMIC(0)) float gains[4]; // M4_ARRAY_DESC("sat", "f32", M4_SIZE(1,4), M4_RANGE(0,100), "[100,100,90,50]", M4_DIGIT(1), M4_DYNAMIC(0)) float sat[4]; }CalibDbV2_Ccm_Gain_Sat_Curve_t; typedef struct CalibDbV2_Ccm_Gain_Scale_Curve_s { // 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)) float gain[CALIBDB_ISO_NUM]; // 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)) float scale[CALIBDB_ISO_NUM]; } CalibDbV2_Ccm_Gain_Scale_Curve_t; typedef struct CalibDbV2_Ccm_Ccm_Matrix_Para_s { // M4_STRING_DESC("name", M4_SIZE(1,1), M4_RANGE(0, 25), "A_100",M4_DYNAMIC(0)) char* name; // M4_STRING_DESC("illumination", M4_SIZE(1,1), M4_RANGE(0, 20), "A",M4_DYNAMIC(0)) char* illumination; // M4_NUMBER_DESC("saturation", "f32", M4_RANGE(0.0, 100.0), "100.0", M4_DIGIT(1)) float saturation; // 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)) float ccMatrix[9]; // 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)) float ccOffsets[3]; }CalibDbV2_Ccm_Ccm_Matrix_Para_t; typedef struct CalibDbV2_Ccm_Accm_Cof_Para_s { // M4_STRING_DESC("name", M4_SIZE(1,1), M4_RANGE(0, 20), "A",M4_DYNAMIC(0)) char * name; // M4_ARRAY_DESC("awbGain", "f32", M4_SIZE(1,2), M4_RANGE(0,5), "[1.0000,1.0000]", M4_DIGIT(4), M4_DYNAMIC(0)) float awbGain[2]; // M4_NUMBER_DESC("minDist", "f32", M4_RANGE(0.0, 4), "0", M4_DIGIT(4)) float minDist; // M4_STRING_DESC("matrixUsed", M4_SIZE(1,2), M4_RANGE(0, 25), "A_100",M4_DYNAMIC(1)) char** matrixUsed; int matrixUsed_len; // M4_ARRAY_TABLE_DESC("gain sat curve", "array_table_ui", M4_INDEX_DEFAULT) CalibDbV2_Ccm_Gain_Sat_Curve_t gain_sat_curve; } CalibDbV2_Ccm_Accm_Cof_Para_t; typedef struct CalibDbV2_Ccm_Luma_Ccm_Para_s { // M4_ARRAY_DESC("RGB2Y para", "f32", M4_SIZE(1,3), M4_RANGE(0,100), "[38 75 15]", M4_DIGIT(0), M4_DYNAMIC(0), M4_HIDE(1)) float rgb2y_para[3]; // M4_NUMBER_DESC("low bound pos bit", "f32", M4_RANGE(0.0, 10.0), "8.0", M4_DIGIT(0)) float low_bound_pos_bit; // 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(1), M4_DYNAMIC(0)) float y_alpha_curve[17]; // M4_ARRAY_TABLE_DESC("gain alphaScale curve", "array_table_ui", M4_INDEX_DEFAULT) CalibDbV2_Ccm_Gain_Scale_Curve_t gain_alphaScale_curve; } CalibDbV2_Ccm_Luma_Ccm_Para_t; typedef struct CalibDbV2_Ccm_illu_estim_Para_s { // M4_BOOL_DESC("interp enable", "0") bool interp_enable; // M4_STRING_DESC("default illu", M4_SIZE(1,1), M4_RANGE(0, 20), "D65",M4_DYNAMIC(0)) char * default_illu; // M4_ARRAY_DESC("weightRB", "f32", M4_SIZE(1,2), M4_RANGE(0,3), "[1,1]", M4_DIGIT(4), M4_DYNAMIC(0)) float weightRB[2]; // M4_NUMBER_DESC("prob limit", "f32", M4_RANGE(0.0, 1), "0.2", M4_DIGIT(6)) float prob_limit; // M4_NUMBER_DESC("frame num", "u8", M4_RANGE(1, 128), "8", M4_DIGIT(0)) int frame_no; } CalibDbV2_Ccm_illu_estim_Para_t; typedef struct CalibDbV2_Ccm_Tuning_Para_s { // M4_BOOL_DESC("damp enable", "0") bool damp_enable; // M4_STRUCT_DESC("illuminant estimation", "normal_ui_style") CalibDbV2_Ccm_illu_estim_Para_t illu_estim; // M4_STRUCT_LIST_DESC("aCcmCof", M4_SIZE_DYNAMIC, "normal_ui_style") CalibDbV2_Ccm_Accm_Cof_Para_t* aCcmCof; int aCcmCof_len; // M4_STRUCT_LIST_DESC("matrixAll", M4_SIZE_DYNAMIC, "normal_ui_style") CalibDbV2_Ccm_Ccm_Matrix_Para_t* matrixAll; int matrixAll_len; } CalibDbV2_Ccm_Tuning_Para_t; typedef struct CalibDbV2_Ccm_Manual_Para_s { // 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)) float ccMatrix[9]; // 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)) float ccOffsets[3]; } CalibDbV2_Ccm_Manual_Para_t; typedef enum CalibDbV2_Ccm_Op_Mode_t { CALIB_CCM_MODE_MANUAL = 1, /**< run manual lens shading correction */ CALIB_CCM_MODE_AUTO = 2, /**< run auto lens shading correction */ } CalibDbV2_Ccm_Op_Mode_t; typedef struct CalibDbV2_Ccm_Control_Para_t { // M4_BOOL_DESC("enable", "0") bool enable; // M4_ENUM_DESC("mode", "CalibDbV2_Ccm_Op_Mode_t", "CALIB_CCM_MODE_AUTO"); CalibDbV2_Ccm_Op_Mode_t mode; // M4_NUMBER_DESC("wbgain tolerance", "f32", M4_RANGE(0.0, 1), "0.1", M4_DIGIT(4)) float wbgain_tolerance; // M4_NUMBER_DESC("gain tolerance", "f32", M4_RANGE(0.0, 1), "0.2", M4_DIGIT(4)) float gain_tolerance; } CalibDbV2_Ccm_Control_Para_t; typedef struct CalibDbV2_Ccm_Para_V2_s { // M4_STRUCT_DESC("control", "normal_ui_style") CalibDbV2_Ccm_Control_Para_t control; // M4_STRUCT_DESC("lumaCCM", "normal_ui_style") CalibDbV2_Ccm_Luma_Ccm_Para_t lumaCCM; // M4_STRUCT_DESC("manualCCM", "normal_ui_style") CalibDbV2_Ccm_Manual_Para_t manualPara; // M4_STRUCT_DESC("autoCCM", "normal_ui_style") CalibDbV2_Ccm_Tuning_Para_t TuningPara; } CalibDbV2_Ccm_Para_V2_t; RKAIQ_END_DECLARE #endif