xref: /OK3568_Linux_fs/external/camera_engine_rkaiq/rkaiq/algos/amerge/rk_aiq_types_amerge_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_AMERGE_ALGO_PRVT_H__
12 #define __RK_AIQ_TYPES_AMERGE_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 "rk_aiq_algo_types.h"
22 #include "amerge/rk_aiq_types_amerge_hw.h"
23 #include "xcam_log.h"
24 
25 /********************also use for gamma, dehaze, tmo and drc*******************/
26 // for noramlize EnvLv
27 #define MAX_ENV_LUMA (65)
28 #define MAX_ENV_EXPO (10.0*1.0)
29 #define MIN_ENV_LUMA (0)
30 #define MIN_ENV_EXPO (30.0*256.0)
31 #define MAX_ENV_LV (MAX_ENV_LUMA / MAX_ENV_EXPO)
32 #define MIN_ENV_LV (MIN_ENV_LUMA / MIN_ENV_EXPO)
33 #define ENVLVMAX     (1.0)
34 #define ENVLVMIN     (0.0)
35 #define ISOMIN                (50.0)
36 #define ISOMAX                (10000000)
37 #define BIGMODE     (2560)
38 #define FUNCTION_DISABLE (0)
39 #define FUNCTION_ENABLE (1)
40 #define MOVE_COEF_DEFAULT (0)
41 #define NORMALIZE_MAX         (1.0)
42 #define NORMALIZE_MIN         (0.0)
43 #define SHIFT2BIT(A)          (A * 4.0)
44 #define SHIFT3BIT(A)          (A * 8.0)
45 #define SHIFT4BIT(A)          (A * 16.0)
46 #define SHIFT6BIT(A)          (A * 64.0)
47 #define SHIFT7BIT(A)          (A * 128.0)
48 #define SHIFT8BIT(A)          (A * 256.0)
49 #define SHIFT9BIT(A)          (A * 512.0)
50 #define SHIFT10BIT(A)         (A * 1024.0)
51 #define SHIFT11BIT(A)         (A * 2048.0)
52 #define SHIFT12BIT(A)         (A * 4096.0)
53 #define SHIFT13BIT(A)         (A * 8191.0)
54 #define SHIFT14BIT(A)         (A * 16383.0)
55 #define SHIFT15BIT(A)         (A * 32767.0)
56 #define BIT_MIN               (0)
57 #define BIT_8_MAX             (255)
58 #define BIT_10_MAX            (1023)
59 #define BIT_14_MAX            (16383)
60 #define RATIO_DEFAULT         (1.0f)
61 #define LONG_FRAME_MODE_RATIO (1.0f)
62 #define ISP_PREDGAIN_DEFAULT  (1.0f)
63 #define INIT_CALC_PARAMS_NUM  (2)
64 #define LIMIT_VALUE(value,max_value,min_value)      (value > max_value? max_value : value < min_value ? min_value : value)
65 #define LIMIT_VALUE_UNSIGNED(value, max_value) (value > max_value ? max_value : value)
66 #define LIMIT_PARA(a,b,c,d,e)      (c+(a-e)*(b-c)/(d -e))
67 
68 typedef enum FrameNumber_e {
69     LINEAR_NUM   = 1,
70     HDR_2X_NUM   = 2,
71     HDR_3X_NUM   = 3,
72     HDR_NUM_MAX
73 } FrameNumber_t;
74 /****************************************************************************/
75 
76 #define MAXLUMAK     (1.5)
77 #define MAXLUMAB     (30)
78 #define MOVECOEFMAX     (1.0)
79 #define MOVECOEFMIN     (0.0)
80 #define OECURVESMOOTHMAX     (200)
81 #define OECURVESMOOTHMIN     (20)
82 #define OECURVEOFFSETMAX     (280)
83 #define OECURVEOFFSETMIN     (108)
84 #define MDCURVESMOOTHMAX     (200)
85 #define MDCURVESMOOTHMIN     (20)
86 #define MDCURVEOFFSETMAX     (100)
87 #define MDCURVEOFFSETMIN     (26)
88 #define EACHOECURVESMOOTHMAX        (50)
89 #define DAMPMAX     (1.0)
90 #define DAMPMIN     (0.0)
91 #define TOLERANCEMAX     (20.0)
92 #define TOLERANCEMIN     (0.0)
93 #define IQPARAMAX     (1)
94 #define IQPARAMIN     (0)
95 #define IQ_TH0_PARAMAX     (1023)
96 #define IQ_TH0_PARAMIN     (0)
97 #define AMERGE_MAX_IQ_DOTS (13)
98 #define SW_HDRMGE_GAIN_FIX (0x40)
99 #define SW_HDRMGE_GAIN_INV_FIX (0xfff)
100 #define SW_HDRMGE_LM_DIF_0P9_FIX (255)
101 #define SW_HDRMGE_MS_DIF_0P8_FIX (255)
102 #define SHORT_MODE_COEF_MAX (0.001)
103 #define HDR_LONG_FRMAE_MODE_OECURVE (0)
104 
105 typedef enum AmergeState_e {
106     AMERGE_STATE_INVALID       = 0,
107     AMERGE_STATE_INITIALIZED   = 1,
108     AMERGE_STATE_STOPPED       = 2,
109     AMERGE_STATE_RUNNING       = 3,
110     AMERGE_STATE_LOCKED        = 4,
111     AMERGE_STATE_MAX
112 } AmergeState_t;
113 
114 typedef struct MergeExpoData_s {
115     bool LongFrmMode;
116     float EnvLv;
117     float ISO;
118 
119     float LExpo;
120     float MExpo;
121     float SExpo;
122     float SGain;
123     float MGain;
124     float RatioLS;
125     float RatioLM;
126 } MergeExpoData_t;
127 
128 typedef struct MergeHandleDataV10_s {
129     int MergeMode;
130     float OECurve_smooth;
131     float OECurve_offset;
132     float MDCurveLM_smooth;
133     float MDCurveLM_offset;
134     float MDCurveMS_smooth;
135     float MDCurveMS_offset;
136 } MergeHandleDataV10_t;
137 
138 typedef struct MergeHandleDataV11_s {
139     MergeBaseFrame_t BaseFrm;
140     int MergeMode;
141     float OECurve_smooth;
142     float OECurve_offset;
143     float MDCurveLM_smooth;
144     float MDCurveLM_offset;
145     float MDCurveMS_smooth;
146     float MDCurveMS_offset;
147     float MDCurve_Coef;
148     float MDCurve_ms_thd0;
149     float MDCurve_lm_thd0;
150 } MergeHandleDataV11_t;
151 
152 typedef struct MergeHandleDataV12_s {
153     MergeBaseFrame_t BaseFrm;
154     int MergeMode;
155     bool EnableEachChn;
156     float OECurve_smooth;
157     float OECurve_offset;
158     float MDCurveLM_smooth;
159     float MDCurveLM_offset;
160     float MDCurveMS_smooth;
161     float MDCurveMS_offset;
162     float MDCurve_Coef;
163     float MDCurve_ms_thd0;
164     float MDCurve_lm_thd0;
165     float EachChnCurve_smooth;
166     float EachChnCurve_offset;
167 } MergeHandleDataV12_t;
168 
169 typedef struct MergeHandleData_s {
170 #if RKAIQ_HAVE_MERGE_V10
171     MergeHandleDataV10_t Merge_v10;
172 #endif
173 #if RKAIQ_HAVE_MERGE_V11
174     MergeHandleDataV11_t Merge_v11;
175 #endif
176 #if RKAIQ_HAVE_MERGE_V12
177     MergeHandleDataV12_t Merge_v12;
178 #endif
179 } MergeHandleData_t;
180 
181 typedef struct MergeCurrCtrlData_s {
182     int MergeMode;
183     float MoveCoef;
184     MergeExpoData_t ExpoData;
185     merge_OpMode_t ApiMode;
186 } MergeCurrCtrlData_t;
187 
188 typedef struct AmergeCurrData_s {
189     MergeCurrCtrlData_t CtrlData;
190     MergeHandleData_t HandleData;
191 } AmergeCurrData_t;
192 
193 typedef struct MergeNextCtrlData_s {
194     MergeExpoData_t ExpoData;
195     float MoveCoef;
196     float MergeOEDamp;
197     float MergeMDDampLM;
198     float MergeMDDampMS;
199 } MergeNextCtrlData_t;
200 
201 typedef struct AmergeNextData_s {
202     MergeNextCtrlData_t CtrlData;
203     MergeHandleData_t HandleData;
204 } AmergeNextData_t;
205 
206 typedef struct AmergeContext_s {
207     bool isCapture;
208     bool ifReCalcStAuto;
209     bool ifReCalcStManual;
210     bool SceneChange;
211     uint32_t FrameID;
212 #if RKAIQ_HAVE_MERGE_V10
213     mergeAttrV10_t mergeAttrV10;
214 #endif
215 #if RKAIQ_HAVE_MERGE_V11
216     mergeAttrV11_t mergeAttrV11;
217 #endif
218 #if RKAIQ_HAVE_MERGE_V12
219     mergeAttrV12_t mergeAttrV12;
220 #endif
221     AmergeState_t state;
222     AmergeCurrData_t CurrData;
223     AmergeNextData_t NextData;
224     FrameNumber_t FrameNumber;
225 } AmergeContext_t;
226 
227 #endif
228