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_ATMO_ALGO_PRVT_H__ 12 #define __RK_AIQ_TYPES_ATMO_ALGO_PRVT_H__ 13 14 #include <math.h> 15 #include <string.h> 16 #include <stdlib.h> 17 #include "ae/rk_aiq_types_ae_algo_int.h" 18 #include "af/rk_aiq_types_af_algo_int.h" 19 #include "rk_aiq_algo_types.h" 20 #include "RkAiqCalibDbV2Helper.h" 21 #include "xcam_log.h" 22 #include "rk_aiq_types_atmo_stat_v200.h" 23 #include "amerge/rk_aiq_types_amerge_algo_prvt.h" 24 25 26 #define ATMO_RET_SUCCESS 0 //!< this has to be 0, if clauses rely on it 27 #define ATMO_RET_FAILURE 1 //!< general failure 28 #define ATMO_RET_NOTSUPP 2 //!< feature not supported 29 #define ATMO_RET_BUSY 3 //!< there's already something going on... 30 #define ATMO_RET_CANCELED 4 //!< operation canceled 31 #define ATMO_RET_OUTOFMEM 5 //!< out of memory 32 #define ATMO_RET_OUTOFRANGE 6 //!< parameter/value out of range 33 #define ATMO_RET_IDLE 7 //!< feature/subsystem is in idle state 34 #define ATMO_RET_WRONG_HANDLE 8 //!< handle is wrong 35 #define ATMO_RET_NULL_POINTER 9 //!< the/one/all parameter(s) is a(are) NULL pointer(s) 36 #define ATMO_RET_NOTAVAILABLE 10 //!< profile not available 37 #define ATMO_RET_DIVISION_BY_ZERO 11 //!< a divisor equals ZERO 38 #define ATMO_RET_WRONG_STATE 12 //!< state machine in wrong state 39 #define ATMO_RET_INVALID_PARM 13 //!< invalid parameter 40 #define ATMO_RET_PENDING 14 //!< command pending 41 #define ATMO_RET_WRONG_CONFIG 15 //!< given configuration is invalid 42 43 #define MAXLUMAK (1.5) 44 #define MAXLUMAB (30) 45 #define OEPDFMAX (1.0) 46 #define OEPDFMIN (0.0) 47 #define FOCUSLUMAMAX (100) 48 #define FOCUSLUMAMIN (1) 49 #define DAMPMAX (1.0) 50 #define DAMPMIN (0.0) 51 #define FASTMODELEVELMAX (100.0) 52 #define FASTMODELEVELMIN (1.0) 53 #define IIRMAX (1000) 54 #define IIRMIN (0) 55 #define DARKPDFTHMAX (1.0) 56 #define DARKPDFTHMIN (0.0) 57 #define TOLERANCEMAX (20.0) 58 #define TOLERANCEMIN (0.0) 59 #define GLOBEMAXLUMAMAX (1023) 60 #define GLOBEMAXLUMAMIN (51) 61 #define GLOBELUMAMAX (737) 62 #define GLOBELUMAMIN (51) 63 #define DETAILSHIGHLIGHTMAX (1023) 64 #define DETAILSHIGHLIGHTMIN (51) 65 #define DARKPDFMAX (1) 66 #define DARKPDFMIN (0) 67 #define DETAILSLOWLIGHTMAX (63) 68 #define DETAILSLOWLIGHTMIN (16) 69 #define DYNAMICRANGEMAX (84) 70 #define DYNAMICRANGEMIN (1) 71 #define TMOCONTRASTMAX (255) 72 #define TMOCONTRASTMIN (0) 73 #define IQPARAMAX (1) 74 #define IQPARAMIN (0) 75 #define IQDETAILSLOWLIGHTMAX (4) 76 #define IQDETAILSLOWLIGHTMIN (1) 77 #define ATMO_MAX_IQ_DOTS (13) 78 79 typedef enum AtmoState_e { 80 ATMO_STATE_INVALID = 0, 81 ATMO_STATE_INITIALIZED = 1, 82 ATMO_STATE_STOPPED = 2, 83 ATMO_STATE_RUNNING = 3, 84 ATMO_STATE_LOCKED = 4, 85 ATMO_STATE_MAX 86 } AtmoState_t; 87 88 typedef struct TmoHandleData_s 89 { 90 int MergeMode; 91 float GlobeMaxLuma; 92 float GlobeLuma; 93 float DetailsHighLight; 94 float DetailsLowLight; 95 float LocalTmoStrength; 96 float GlobalTmoStrength; 97 } TmoHandleData_t; 98 99 typedef struct TmoPrevCtrlData_s 100 { 101 int FrameCnt; 102 float L2S_ratio; 103 float LExpo; 104 float EnvLv; 105 float OEPdf; 106 float FocusLuma; 107 float DarkPdf; 108 float ISO; 109 float DynamicRange; 110 } TmoPrevCtrlData_t; 111 112 typedef struct AtmoPrevData_s 113 { 114 TmoPrevCtrlData_t CtrlData; 115 TmoHandleData_t HandleData; 116 unsigned short ro_hdrtmo_lgmean; 117 } AtmoPrevData_t; 118 119 typedef struct TmoCurrAeResult_s { 120 //TODO 121 float MeanLuma[3]; 122 float LfrmDarkLuma; 123 float LfrmDarkPdf; 124 float LfrmOverExpPdf; 125 float SfrmMaxLuma; 126 float SfrmMaxLumaPdf; 127 float GlobalEnvLv; 128 float L2M_Ratio; 129 float M2S_Ratio; 130 float DynamicRange; 131 float OEPdf; //the pdf of over exposure in long frame 132 float DarkPdf; //the pdf of dark region in long frame 133 float ISO; //use long frame 134 135 float Lv_fac; 136 float DarkPdf_fac; 137 float Contrast_fac; 138 float BlockLumaS[225]; 139 float BlockLumaM[25]; 140 float BlockLumaL[225]; 141 142 //aec delay frame 143 int AecDelayframe; 144 145 //aec LumaDeviation 146 float LumaDeviationL; 147 float LumaDeviationM; 148 float LumaDeviationS; 149 float LumaDeviationLinear; 150 } TmoCurrAeResult_t; 151 152 typedef struct { 153 unsigned char valid; 154 int id; 155 int depth; 156 } AfDepthInfo_t; 157 158 typedef struct TmoCurrAfResult_s { 159 unsigned int CurrAfTargetPos; 160 unsigned int CurrAfTargetWidth; 161 unsigned int CurrAfTargetHeight; 162 AfDepthInfo_t AfDepthInfo[225]; 163 unsigned int GlobalSharpnessCompensated[225]; 164 } TmoCurrAfResult_t; 165 166 typedef struct TmoCurrCtrlData_s 167 { 168 int FrameCnt; 169 float L2S_Ratio; 170 float L2M_Ratio; 171 float L2L_Ratio; 172 float LExpo; 173 float EnvLv; 174 float DynamicRange; 175 float OEPdf; 176 float DarkPdf; 177 float ISO; 178 float FocusLuma; 179 float TmoDamp; 180 float LgMean; 181 float LumaWeight[225]; 182 } TmoCurrCtrlData_t; 183 184 typedef struct AtmoCurrData_t 185 { 186 TmoCurrCtrlData_t CtrlData; 187 TmoHandleData_t HandleData; 188 } AtmoCurrData_t; 189 190 typedef struct AtmoProcResData_s 191 { 192 TmoProcRes_t Res; 193 bool LongFrameMode; 194 bool isHdrGlobalTmo; 195 bool bTmoEn; 196 bool isLinearTmo; 197 TmoFlickerPara_t TmoFlicker; 198 } AtmoProcResData_t; 199 200 typedef struct AtmoContext_s 201 { 202 //api 203 tmoAttr_t tmoAttr; 204 CalibDbV2_tmo_t pCalibDB; 205 AtmoState_t state; 206 AtmoConfig_t AtmoConfig; 207 AtmoPrevData_t PrevData ; 208 AtmoProcResData_t ProcRes; 209 TmoCurrAeResult_t CurrAeResult; 210 TmoCurrAfResult_t CurrAfResult; 211 AtmoCurrData_t CurrData; 212 rkisp_atmo_stats_t CurrStatsData; 213 SensorInfo_t SensorInfo; 214 uint32_t width; 215 uint32_t height; 216 int frameCnt; 217 FrameNumber_t FrameNumber; 218 } AtmoContext_t; 219 220 typedef AtmoContext_t* AtmoHandle_t; 221 222 typedef struct AtmoInstanceConfig_s { 223 AtmoHandle_t hAtmo; 224 } AtmoInstanceConfig_t; 225 226 typedef struct _RkAiqAlgoContext { 227 AtmoInstanceConfig_t AtmoInstConfig; 228 //void* place_holder[0]; 229 } RkAiqAlgoContext; 230 231 #endif 232