1 /****************************************************************************** 2 * 3 * Copyright 2019, Fuzhou Rockchip Electronics Co.Ltd . All rights reserved. 4 * No part of this work may be reproduced, modified, distributed, transmitted, 5 * transcribed, or translated into any language or computer format, in any form 6 * or by any means without written permission of: 7 * Fuzhou Rockchip Electronics Co.Ltd . 8 * 9 * 10 *****************************************************************************/ 11 #ifndef __RK_AIQ_TYPES_ADRC_ALGO_PRVT_H__ 12 #define __RK_AIQ_TYPES_ADRC_ALGO_PRVT_H__ 13 14 #include <math.h> 15 #include <stdlib.h> 16 #include <string.h> 17 18 #include "RkAiqCalibDbV2Helper.h" 19 #include "ae/rk_aiq_types_ae_algo_int.h" 20 #include "af/rk_aiq_types_af_algo_int.h" 21 #include "amerge/rk_aiq_types_amerge_algo_prvt.h" 22 #include "rk_aiq_algo_types.h" 23 #include "rk_aiq_types_adrc_algo_int.h" 24 #include "rk_aiq_types_adrc_hw.h" 25 #include "xcam_log.h" 26 27 #define GAINMIN (1.0f) 28 #define DRCGAINMAX (8) 29 #define DRCGAINMIN (GAINMIN) 30 #define CLIPMAX (64.0) 31 #define CLIPMIN (0.0) 32 #define MINOGAINMAX (2.0) 33 #define MINOGAINMIN (0.0) 34 #define ADRCNORMALIZEINTMAX (1) 35 #define ADRCNORMALIZEINTMIN (0) 36 #define SPACESGMMAX (4095) 37 #define SPACESGMMIN (0) 38 #define SCALEYMAX (2048) 39 #define SCALEYMIN (0) 40 #define MANUALCURVEMAX (8192) 41 #define MANUALCURVEMIN (0) 42 #define IIRFRAMEMAX (1000) 43 #define IIRFRAMEMIN (0) 44 #define INTMIN (0) 45 #define INT4BITMAX (15) 46 #define INT8BITMAX (255) 47 #define INT12BITMAX (4095) 48 #define INT13BITMAX (8191) 49 #define INT14BITMAX (16383) 50 #define INT16BITMAX (65535) 51 #define SW_DRC_OFFSET_POW2_FIX (8) 52 #define SW_DRC_MOTION_SCL_FIX (0) 53 #define SW_DRC_BILAT_WT_OFF_FIX (255) 54 #define MAX_AE_DRC_GAIN (256.0f) 55 #define OB_PREDGAIN_MAX (255.9) 56 #define OB_PREDGAIN_MIN (GAINMIN) 57 #define GAS_T_MAX (4) 58 #define GAS_T_MIN (0) 59 #define GAS_L_MAX (64) 60 #define GAS_L_MIN (0) 61 #define GAS_L0_DEFAULT (24) 62 #define GAS_L1_DEFAULT (10) 63 #define GAS_L2_DEFAULT (10) 64 #define GAS_L3_DEFAULT (5) 65 #define DAMP_STABLE_THR (FLT_EPSILON) 66 #define ISP_RAW_BIT (12) 67 #define MFHDR_LOG_Q_BITS (11) 68 #define DRC_COMPRESS_Y_OFFSET (0.0156f) 69 #define DSTBITS (ISP_RAW_BIT << MFHDR_LOG_Q_BITS) 70 #define OFFSETBITS_INT (SW_DRC_OFFSET_POW2_FIX) 71 #define OFFSETBITS (OFFSETBITS_INT << MFHDR_LOG_Q_BITS) 72 #define VALIDBITS (DSTBITS - OFFSETBITS) 73 #define DELTA_SCALEIN_FIX ((256 << MFHDR_LOG_Q_BITS) / VALIDBITS) 74 75 typedef enum AdrcState_e { 76 ADRC_STATE_INVALID = 0, 77 ADRC_STATE_INITIALIZED = 1, 78 ADRC_STATE_STOPPED = 2, 79 ADRC_STATE_RUNNING = 3, 80 ADRC_STATE_LOCKED = 4, 81 ADRC_STATE_MAX 82 } AdrcState_t; 83 84 typedef struct adrcStaticParams_s { 85 bool OutPutLongFrame; 86 float curPixWeit; 87 float preFrameWeit; 88 float Range_force_sgm; 89 float Range_sgm_cur; 90 float Range_sgm_pre; 91 int Space_sgm_cur; 92 int Space_sgm_pre; 93 CompressMode_t CompressMode; 94 uint16_t compresManuCurve[ADRC_Y_NUM]; 95 int Scale_y[ADRC_Y_NUM]; 96 float ByPassThr; 97 float Edge_Weit; 98 float Tolerance; 99 int IIR_frame; 100 float damp; 101 #if RKAIQ_HAVE_DRC_V12 || RKAIQ_HAVE_DRC_V12_LITE 102 int gas_l0; 103 int gas_l1; 104 int gas_l2; 105 int gas_l3; 106 #endif 107 } adrcStaticParams_t; 108 109 typedef struct DrcHandleDataV10_s { 110 float DrcGain; 111 float Alpha; 112 float Clip; 113 float Strength; 114 float LocalWeit; 115 float GlobalContrast; 116 float LoLitContrast; 117 } DrcHandleDataV10_t; 118 119 typedef struct DrcHandleDataV11_s { 120 float DrcGain; 121 float Alpha; 122 float Clip; 123 float Strength; 124 float LocalWeit; 125 int LocalAutoEnable; 126 float LocalAutoWeit; 127 float GlobalContrast; 128 float LoLitContrast; 129 } DrcHandleDataV11_t; 130 131 typedef struct DrcHandleDataV12_s { 132 float DrcGain; 133 float Alpha; 134 float Clip; 135 float Strength; 136 float LocalWeit; 137 int LocalAutoEnable; 138 float LocalAutoWeit; 139 float GlobalContrast; 140 float LoLitContrast; 141 142 // v12 add 143 float gas_t; 144 float MotionStr; 145 } DrcHandleDataV12_t; 146 147 typedef struct adrcDynParams_s { 148 #if RKAIQ_HAVE_DRC_V10 149 DrcHandleDataV10_t Drc_v10; 150 #endif 151 #if RKAIQ_HAVE_DRC_V11 152 DrcHandleDataV11_t Drc_v11; 153 #endif 154 #if RKAIQ_HAVE_DRC_V12 || RKAIQ_HAVE_DRC_V12_LITE 155 DrcHandleDataV12_t Drc_v12; 156 #endif 157 } adrcDynParams_t; 158 159 typedef struct AdrcAEData_s { 160 bool LongFrmMode; 161 float ISO; // invaild in Curr 162 float EnvLv; 163 164 float L2M_Ratio; 165 float M2S_Ratio; 166 float L2S_Ratio; 167 float LExpo; // invaild in Curr 168 float MExpo; // invaild in Curr 169 float SExpo; // invaild in Curr 170 } AdrcAEData_t; 171 172 typedef struct CurrData_s { 173 float MotionCoef; 174 drc_OpMode_t ApiMode; 175 AdrcAEData_t AEData; 176 adrcDynParams_t dynParams; 177 } CurrData_t; 178 179 typedef struct NextData_s { 180 bool bDrcEn; 181 float MotionCoef; 182 AdrcAEData_t AEData; 183 adrcDynParams_t dynParams; 184 adrcStaticParams_t staticParams; 185 } NextData_t; 186 187 typedef struct AdrcContext_s { 188 bool isCapture; 189 bool ifReCalcStAuto; 190 bool ifReCalcStManual; 191 bool isDampStable; 192 #if RKAIQ_HAVE_DRC_V10 193 drcAttrV10_t drcAttrV10; 194 #endif 195 #if RKAIQ_HAVE_DRC_V11 196 drcAttrV11_t drcAttrV11; 197 #endif 198 #if RKAIQ_HAVE_DRC_V12 199 drcAttrV12_t drcAttrV12; 200 adrc_blcRes_V32_t ablcV32_proc_res; 201 #endif 202 #if RKAIQ_HAVE_DRC_V12_LITE 203 drcAttrV12Lite_t drcAttrV12; 204 adrc_blcRes_V32_t ablcV32_proc_res; 205 #endif 206 AdrcState_t state; 207 CurrData_t CurrData; 208 NextData_t NextData; 209 uint32_t FrameID; 210 FrameNumber_t FrameNumber; 211 } AdrcContext_t; 212 213 #endif 214