xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/adrc/rk_aiq_types_adrc_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_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