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