/*  
 | 
 * 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  
 | 
  
 |