1 /* 2 * rk_aiq_algo_camgroup_types.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 _RK_AIQ_ALGO_CAMGROUP_TYPES_H_ 21 #define _RK_AIQ_ALGO_CAMGROUP_TYPES_H_ 22 23 24 #include "rk_aiq_algo_types.h" 25 #include "RkAiqCalibDbV2Helper.h" 26 27 #define IS_UPDATE_MEM(result_ptr, result_offset) \ 28 *((bool*)((char*)(result_ptr) - (result_offset))) 29 30 typedef struct rk_aiq_singlecam_3a_result_s { 31 uint8_t _camId; 32 uint32_t _frameId; 33 // ae params 34 struct { 35 RKAiqAecExpInfo_t* exp_tbl; 36 int* exp_tbl_size; 37 RKAiqExpI2cParam_t* exp_i2c_params; 38 rk_aiq_ae_meas_params_t* _aeMeasParams; 39 rk_aiq_hist_meas_params_t* _aeHistMeasParams; 40 XCamVideoBuffer* _aecStats; 41 RkAiqAlgoProcResAeShared_t _aeProcRes; 42 XCamVideoBuffer* _aePreRes; 43 RKAiqAecExpInfo_t _effAecExpInfo; 44 bool _bEffAecExpValid; 45 } aec; 46 // awb params 47 struct { 48 union{ 49 rk_aiq_wb_gain_t* _awbGainParams; 50 rk_aiq_wb_gain_v32_t* _awbGainV32Params; 51 }; 52 union { 53 rk_aiq_awb_stat_cfg_v200_t* _awbCfg; 54 rk_aiq_awb_stat_cfg_v201_t* _awbCfgV201; 55 rk_aiq_awb_stat_cfg_v32_t* _awbCfgV32; 56 rk_aiq_isp_awb_meas_cfg_v3x_t* _awbCfgV3x; 57 }; 58 XCamVideoBuffer* _awbStats; 59 XCamVideoBuffer* _awbProcRes; 60 } awb; 61 rk_aiq_lsc_cfg_t* _lscConfig; 62 AdpccProcResult_t* _dpccConfig; 63 struct { 64 union { 65 rk_aiq_ccm_cfg_t* _ccmCfg; 66 rk_aiq_ccm_cfg_v2_t* _ccmCfg_v2; 67 }; 68 } accm; 69 rk_aiq_lut3d_cfg_t* _lut3dCfg; 70 RkAiqAdehazeProcResult_t* _adehazeConfig; 71 AgammaProcRes_t* _agammaConfig; 72 RkAiqAdrcProcResult_t* _adrcConfig; 73 RkAiqAmergeProcResult_t* _amergeConfig; 74 75 struct { 76 union { 77 rk_aiq_isp_blc_v21_t * _blcConfig; 78 rk_aiq_isp_blc_v32_t * _blcConfig_v32; 79 }; 80 } ablc; 81 82 struct aynr_procRes_V3_t { 83 RK_YNR_Fix_V3_t* _stFix; 84 float _sigma[YNR_V3_ISO_CURVE_POINT_NUM]; 85 }; 86 87 struct { 88 union { 89 RK_YNR_Fix_V22_t* _aynr_procRes_v22; 90 aynr_procRes_V3_t _aynr_procRes_v3; 91 RK_YNR_Fix_V2_t* _aynr_procRes_v2; 92 }; 93 } aynr; 94 95 struct { 96 union { 97 float _aynr_sigma_v22[YNR_V22_ISO_CURVE_POINT_NUM]; 98 float _aynr_sigma_v3[YNR_V3_ISO_CURVE_POINT_NUM]; 99 }; 100 } aynr_sigma; 101 102 struct { 103 union { 104 RK_CNR_Fix_V30_t* _acnr_procRes_v30; 105 RK_CNR_Fix_V2_t* _acnr_procRes_v2; 106 RK_CNR_Fix_V1_t* _acnr_procRes_v1; 107 }; 108 } acnr; 109 110 struct { 111 union { 112 RK_Bayernr_Fix_V2_t* _abayernr_procRes_v1; 113 RK_Bayer2dnr_Fix_V2_t* _abayer2dnr_procRes_v2; 114 RK_Bayer2dnr_Fix_V23_t* _abayer2dnr_procRes_v23; 115 }; 116 } abayernr; 117 118 struct { 119 union { 120 RK_Bayertnr_Fix_V2_t* _abayertnr_procRes_v2; 121 RK_Bayertnr_Fix_V23_t* _abayertnr_procRes_v23; 122 }; 123 } abayertnr; 124 125 struct { 126 union { 127 RK_SHARP_Fix_V3_t* _asharp_procRes_v3; 128 RK_SHARP_Fix_V4_t* _asharp_procRes_v4; 129 RK_SHARP_Fix_V33_t* _asharp_procRes_v33; 130 }; 131 } asharp; 132 133 struct { 134 union { 135 RK_GAIN_Fix_V2_t* _again_procRes_v2; 136 }; 137 } again; 138 } rk_aiq_singlecam_3a_result_t; 139 140 // for create_contex 141 typedef struct _AlgoCtxInstanceCfgCamGroup { 142 AlgoCtxInstanceCfg cfg_com; 143 // single cam calib 144 const CamCalibDbV2Context_t* s_calibv2; 145 CamCalibDbCamgroup_t* pCamgroupCalib; 146 int camIdArray[RK_AIQ_CAM_GROUP_MAX_CAMS]; 147 int camIdArrayLen; 148 } AlgoCtxInstanceCfgCamGroup; 149 150 // camgroup common params 151 typedef struct _RkAiqAlgoComCamGroup { 152 RkAiqAlgoCom com; 153 } RkAiqAlgoComCamGroup; 154 155 // for prepare params 156 typedef struct _RkAiqAlgoCamGroupPrepare { 157 RkAiqAlgoComCamGroup gcom; 158 struct { 159 float LinePeriodsPerField; 160 float PixelClockFreqMHZ; 161 float PixelPeriodsPerLine; 162 rk_aiq_sensor_nr_switch_t nr_switch; 163 } aec; 164 int camIdArray[RK_AIQ_CAM_GROUP_MAX_CAMS]; 165 int camIdArrayLen; 166 // single cam calib 167 const CamCalibDbV2Context_t* s_calibv2; 168 CamCalibDbCamgroup_t* pCamgroupCalib; 169 } RkAiqAlgoCamGroupPrepare; 170 171 // for processing output params 172 typedef struct _RkAiqAlgoCamGroupProcOut { 173 RkAiqAlgoResCom gcom; 174 rk_aiq_singlecam_3a_result_t** camgroupParmasArray; 175 int arraySize; 176 } RkAiqAlgoCamGroupProcOut; 177 178 // for processing input params 179 typedef struct _RkAiqAlgoCamGroupProcIn { 180 RkAiqAlgoComCamGroup gcom; 181 rk_aiq_singlecam_3a_result_t** camgroupParmasArray; 182 AblcProc_V32_t stAblcV32_proc_res; 183 int arraySize; 184 bool _gray_mode; 185 int working_mode; 186 bool _is_bw_sensor; 187 size_t _offset_is_update; 188 } RkAiqAlgoCamGroupProcIn; 189 190 #endif 191