xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/atmo/rk_aiq_types_atmo_algo_prvt.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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