ax_isp_3a_struct.h 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629
  1. /**********************************************************************************
  2. *
  3. * Copyright (c) 2019-2020 Beijing AXera Technology Co., Ltd. All Rights Reserved.
  4. *
  5. * This source file is the property of Beijing AXera Technology Co., Ltd. and
  6. * may not be copied or distributed in any isomorphic form without the prior
  7. * written consent of Beijing AXera Technology Co., Ltd.
  8. *
  9. **********************************************************************************/
  10. #ifndef _AX_ISP_3A_STRUCT_H_
  11. #define _AX_ISP_3A_STRUCT_H_
  12. #include "ax_base_type.h"
  13. #ifdef __cplusplus
  14. extern "C"
  15. {
  16. #endif
  17. ////////////////////////////////////////////////////////////////////////////////////
  18. // AWB ALG Param
  19. ////////////////////////////////////////////////////////////////////////////////////
  20. #define AX_ISP_AWB_GRID_NUM_MAX (4096)
  21. #define AX_ISP_AWB_ILLUM_NAME_LEN_MAX (32)
  22. #define AX_ISP_AWB_POLY_NUM_MAX (32)
  23. #define AX_ISP_AWB_POLY_PNT_NUM_MAX (64)
  24. #define AX_ISP_AWB_ILLUM_NUM_MAX (16)
  25. #define AX_ISP_AWB_EXT_ILLUM_NUM_MAX (32)
  26. #define AX_ISP_AWB_ALL_ILLUM_NUM_MAX (AX_ISP_AWB_ILLUM_NUM_MAX + AX_ISP_AWB_EXT_ILLUM_NUM_MAX)
  27. #define AX_ISP_AWB_CTRL_PNT_PART_NUM_MAX (32)
  28. #define AX_ISP_AWB_CTRL_PNT_ALL_NUM_MAX (AX_ISP_AWB_CTRL_PNT_PART_NUM_MAX * AX_ISP_AWB_ILLUM_NUM_MAX)
  29. #define AX_ISP_AWB_DOMINANT_ZONE_NUM (4)
  30. #define AX_ISP_AWB_PLANCKIAN_ZONE_NUM (24)
  31. #define AX_ISP_AWB_SPATIAL_SEG_MAX_NUM (32)
  32. #define AX_ISP_AWB_PREFER_CCT_MAX_NUM (32)
  33. #define AX_ISP_AWB_LUX_TYPE_NUM (8)
  34. #define AX_ISP_AWB_ZONE_MAX_NUM (40)
  35. #define AX_ISP_AWB_LUMA_WEIGHT_MAX_NUM (32)
  36. #define AX_ISP_AWB_MIXLIGHT_CCT_MAX_NUM (32)
  37. #define AX_ISP_AWB_GRID_WEIGHT_ROW_MAX (27)
  38. #define AX_ISP_AWB_GRID_WEIGHT_COLUMN_MAX (36)
  39. typedef struct {
  40. AX_U32 nRg; /* Accuracy:U4.20 Range:[0, 16777215 (16*1024*1024)] */
  41. AX_U32 nBg; /* Accuracy:U4.20 Range:[0, 16777215 (16*1024*1024)] */
  42. } AX_ISP_IQ_AWB_PNT_T;
  43. typedef struct {
  44. AX_S32 nK; /* Accuracy:S21.10 Range:[-2147483647, 2147483647 (2*1024*1024*1024)] */
  45. AX_S32 nB; /* Accuracy:S21.10 Range:[-2147483647, 2147483647 (2*1024*1024*1024)] */
  46. } AX_ISP_IQ_AWB_LINE_KB_T;
  47. typedef struct {
  48. /* Illum Calib Info */
  49. AX_CHAR szName[AX_ISP_AWB_ILLUM_NAME_LEN_MAX];
  50. AX_U32 nCct; /* Accuracy:U14 Range:[0, 16000] */
  51. AX_U32 nRadius; /* Accuracy:U4.20 Range:[0, 16777215 (16*1024*1024)] */
  52. AX_ISP_IQ_AWB_PNT_T tCoord;
  53. } AX_ISP_IQ_AWB_ILLUM_T;
  54. typedef struct {
  55. AX_U32 nMinX; /* Accuracy:U4.20 Range:[0, 16777215 (16*1024*1024)] */
  56. AX_U32 nMaxX; /* Accuracy:U4.20 Range:[0, 16777215 (16*1024*1024)] */
  57. AX_U32 nMinY; /* Accuracy:U4.20 Range:[0, 16777215 (16*1024*1024)] */
  58. AX_U32 nMaxY; /* Accuracy:U4.20 Range:[0, 16777215 (16*1024*1024)] */
  59. AX_U32 nPntCnt; /* Accuracy:U8 Range:[0, AX_ISP_AWB_POLY_PNT_NUM_MAX-1] */
  60. AX_ISP_IQ_AWB_PNT_T tPntArray[AX_ISP_AWB_POLY_PNT_NUM_MAX];
  61. } AX_ISP_IQ_AWB_POLY_T;
  62. typedef struct {
  63. AX_U8 nDominantEnable; /* Accuracy:U1 Range:[0, 1] */
  64. AX_U32 nDomMinCctThresh; /* Accuracy:U14 Range:[0, 16000] */
  65. AX_U32 nDomMaxCctThresh; /* Accuracy:U14 Range:[0, 16000] */
  66. AX_U32 nDom2AllRatioThresh; /* Accuracy:U1.10 Range:[0, 1024] */
  67. AX_U32 nDom2MinorRatioThresh; /* Accuracy:U10.10 Range:[0, 1,048,575(1024*1024-1)] */
  68. AX_U32 nMinorWeight; /* Accuracy:U1.10 Range:[0, 1024] */
  69. AX_U32 nSmoothPercent; /* Accuracy:U7.10 Range:[0, 131071 (128*1024)] */
  70. } AX_ISP_3A_AWB_DOMINANT_T;
  71. typedef struct {
  72. /* Gray Zone Common Info */
  73. AX_ISP_IQ_AWB_PNT_T tCenterPnt;
  74. AX_U32 nCenterPntRadius; /* Accuracy:U4.20 Range:[0, 16777215 (16*1024*1024)] */
  75. AX_U32 nLowCut; /* Accuracy:U8 Range:[0, 64] */
  76. AX_U32 nHighCut; /* Accuracy:U8 Range:[0, 64] */
  77. AX_U32 nCctMax; /* Accuracy:U14 Range:[0, 16000] */
  78. AX_U32 nCctMin; /* Accuracy:U14 Range:[0, 16000] */
  79. AX_U32 nPartCtrlPntNum; /* Accuracy:U8 Range:[0, 15] */
  80. AX_U32 nCtrlPntNum; /* Accuracy:U8 Range:[0, 128] */
  81. AX_U32 nCtrlSegKbNum; /* Accuracy:U8 Range:[0, 127] Should Always be nCtrlPntNum-1 */
  82. AX_U32 nCctList[AX_ISP_AWB_CTRL_PNT_ALL_NUM_MAX]; /* Accuracy:U14 Range:[0, 16000] */
  83. AX_ISP_IQ_AWB_LINE_KB_T tChordKB;
  84. AX_ISP_IQ_AWB_PNT_T tChordPntList[AX_ISP_AWB_CTRL_PNT_ALL_NUM_MAX];
  85. AX_ISP_IQ_AWB_PNT_T tArcPointList[AX_ISP_AWB_CTRL_PNT_ALL_NUM_MAX];
  86. AX_ISP_IQ_AWB_LINE_KB_T tRadiusLineList[AX_ISP_AWB_CTRL_PNT_ALL_NUM_MAX];
  87. /* Gray Zone Borders */
  88. AX_ISP_IQ_AWB_PNT_T tInLeftBorderPntList[AX_ISP_AWB_CTRL_PNT_ALL_NUM_MAX];
  89. AX_ISP_IQ_AWB_PNT_T tInRightBorderPntList[AX_ISP_AWB_CTRL_PNT_ALL_NUM_MAX];
  90. AX_ISP_IQ_AWB_PNT_T tOutLeftBorderPntList[AX_ISP_AWB_CTRL_PNT_ALL_NUM_MAX];
  91. AX_ISP_IQ_AWB_PNT_T tOutRightBorderPntList[AX_ISP_AWB_CTRL_PNT_ALL_NUM_MAX];
  92. /* Illum Info */
  93. AX_U32 nIllumNum; /* Accuracy:U8 Range:[0, 64] */
  94. AX_ISP_IQ_AWB_ILLUM_T tIllumList[AX_ISP_AWB_ILLUM_NUM_MAX];
  95. AX_U32 nExtIllumNum; /* Accuracy:U8 Range:[0, 16] */
  96. AX_ISP_IQ_AWB_ILLUM_T tExtIllumList[AX_ISP_AWB_EXT_ILLUM_NUM_MAX];
  97. /* Poly Info */
  98. AX_U32 nPolyNum; /* Accuracy:U8 Range:[0, 64] */
  99. AX_ISP_IQ_AWB_POLY_T tPolyList[AX_ISP_AWB_POLY_NUM_MAX];
  100. /* Tuning Params */
  101. /* Common Settings */
  102. AX_U8 nMode; /* Accuracy:U6 Range:[0, 2] INVALID=0, MANUAL=1, AUTO=2 */
  103. AX_U32 nIndex; /* Accuracy:U8 Range:[0, 64] */
  104. AX_U32 nDampRatio; /* Accuracy:U1.20 Range:[0, 1048576 (1024*1024)] */
  105. AX_U32 nToleranceRg; /* Accuracy:U4.20 Range:[0, 16777215 (16*1024*1024)] */
  106. AX_U32 nToleranceBg; /* Accuracy:U4.20 Range:[0, 16777215 (16*1024*1024)] */
  107. /* Lux Type Threshold */
  108. AX_U32 nLuxVeryDarkStart; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  109. AX_U32 nLuxVeryDarkEnd; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  110. AX_U32 nLuxDarkStart; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  111. AX_U32 nLuxDarkEnd; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  112. AX_U32 nLuxIndoorStart; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  113. AX_U32 nLuxIndoorEnd; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  114. AX_U32 nLuxTransInStart; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  115. AX_U32 nLuxTransInEnd; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  116. AX_U32 nLuxTransOutStart; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  117. AX_U32 nLuxTransOutEnd; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  118. AX_U32 nLuxOutdoorStart; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  119. AX_U32 nLuxOutdoorEnd; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  120. AX_U32 nLuxBrightStart; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  121. AX_U32 nLuxBrightEnd; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  122. AX_U32 nLuxVeryBrightStart; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  123. /* Gray Zone CCT Split Threshold */
  124. AX_U32 nCctMinInner; /* Accuracy:U14 Range:[0, 16000] */
  125. AX_U32 nCctMaxInner; /* Accuracy:U14 Range:[0, 16000] */
  126. AX_U32 nCctMinOuter; /* Accuracy:U14 Range:[0, 16000] */
  127. AX_U32 nCctMaxOuter; /* Accuracy:U14 Range:[0, 16000] */
  128. AX_U32 nCctSplitHtoA; /* Accuracy:U14 Range:[0, 16000] */
  129. AX_U32 nCctSplitAtoF; /* Accuracy:U14 Range:[0, 16000] */
  130. AX_U32 nCctSplitFtoD5; /* Accuracy:U14 Range:[0, 16000] */
  131. AX_U32 nCctSplitD5toD6; /* Accuracy:U14 Range:[0, 16000] */
  132. AX_U32 nCctSplitD6toS; /* Accuracy:U14 Range:[0, 16000] */
  133. /* Grid Weight Params */
  134. AX_U8 nGridWeightEnable; /* Accuracy: U8 Range: [0x0, 0x1] */
  135. AX_U8 nGridWeightRow; /* Accuracy: U8 Range: [0x1, 0x1B] */
  136. AX_U8 nGridWeightColumn; /* Accuracy: U8 Range: [0x1, 0x24] */
  137. AX_U16 nGridWeightTable[AX_ISP_AWB_GRID_WEIGHT_ROW_MAX][AX_ISP_AWB_GRID_WEIGHT_COLUMN_MAX]; /* Accuracy: U1.10 Range: [0x0, 0x400] */
  138. /* Lux Weights of Gray Zones and Extra Illuminations */
  139. AX_U32 nGrayZoneLuxWeight[AX_ISP_AWB_PLANCKIAN_ZONE_NUM][AX_ISP_AWB_LUX_TYPE_NUM]; /* Accuracy:U10 Range:[0, 1000] */
  140. AX_U32 nExtIlllumLuxWeight[AX_ISP_AWB_EXT_ILLUM_NUM_MAX][AX_ISP_AWB_LUX_TYPE_NUM]; /* Accuracy:U10 Range:[0, 1000] */
  141. /* Luma Weight*/
  142. AX_U8 nLumaWeightNum; /* Accuracy:U6 Range:[0, 32]*/
  143. AX_U32 nLumaSplitList[AX_ISP_AWB_LUMA_WEIGHT_MAX_NUM]; /* Accuracy:U8.10 Range:[0, 262143 (256 *1024)] */
  144. AX_U32 nLumaWeightList[AX_ISP_AWB_LUX_TYPE_NUM][AX_ISP_AWB_LUMA_WEIGHT_MAX_NUM]; /* Accuracy:U1.10 Range:[0, 1024] */
  145. /* Mix Light*/
  146. AX_U8 bMixLightEn; /* Accuracy:U1 Range:[0, 1] */ // 1: Enable Mix Light Weight & CCM Saturation Discount, 0: Disable
  147. AX_U32 nMixLightProba_0_CctStd[AX_ISP_AWB_LUX_TYPE_NUM]; /* Accuracy:U14 Range:[0, 9999] */ // Proba=0, if CCT Std below this Thresh
  148. AX_U32 nMixLightProba_100_CctStd[AX_ISP_AWB_LUX_TYPE_NUM]; /* Accuracy:U14 Range:[0, 9999] */ // Proba=100, if CCT Std above this Thresh
  149. AX_U32 nMixLightProba_100_SatDiscnt[AX_ISP_AWB_LUX_TYPE_NUM]; /* Accuracy:U8 Range:[0, 100] */ // CCM Saturation Discount When Proba=100
  150. AX_U32 nMixLightKneeNum; /* Accuracy:U6 Range:[0, 32]*/ // Weight LUT: Size
  151. AX_U32 nMixLightKneeCctList[AX_ISP_AWB_MIXLIGHT_CCT_MAX_NUM]; /* Accuracy:U14 Range:[0, 16000] */ // Weight LUT: Key
  152. AX_U32 nMixLightKneeWtList[AX_ISP_AWB_LUX_TYPE_NUM][AX_ISP_AWB_MIXLIGHT_CCT_MAX_NUM]; /* Accuracy:U1.10 Range:[0, 1024] */ // Weight LUT: Value
  153. /* Dominant Params */
  154. AX_ISP_3A_AWB_DOMINANT_T tDomParamList[AX_ISP_AWB_DOMINANT_ZONE_NUM];
  155. AX_U32 nTmpoStabTriggerAvgBlkWt; /* Accuracy:U10 Range:[0, 1000] */
  156. /* Planckian Locus Project in High Lux Scene */
  157. AX_U8 nPlanckianLocusProjEn; /* Accuracy:U6 Range:[0, 1] Enable or Disable*/
  158. AX_U32 nPlanckianLocusNotProjLux; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  159. AX_U32 nPlanckianLocusFullProjLux; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  160. /* Spatial Predictor Params */
  161. AX_U32 nSpatialSegmetNum; /* Accuracy:U8 Range:[0, 64] */
  162. AX_U32 nSpatialStartLux[AX_ISP_AWB_SPATIAL_SEG_MAX_NUM]; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  163. AX_U32 nSpatialEndLux[AX_ISP_AWB_SPATIAL_SEG_MAX_NUM]; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  164. AX_U32 nSpatialRg[AX_ISP_AWB_SPATIAL_SEG_MAX_NUM]; /* Accuracy:U4.20 Range:[0, 16777215 (16*1024*1024)] */
  165. AX_U32 nSpatialBg[AX_ISP_AWB_SPATIAL_SEG_MAX_NUM]; /* Accuracy:U4.20 Range:[0, 16777215 (16*1024*1024)] */
  166. /* Fusion Params */
  167. AX_U32 nFusionGrayZoneConfid_0_AvgBlkWeight; /* Accuracy:U10 Range:[0, 1000] */
  168. AX_U32 nFusionGrayZoneConfid_100_AvgBlkWeight; /* Accuracy:U10 Range:[0, 1000] */
  169. AX_U32 nFusionSpatialConfid_0_Lux; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  170. AX_U32 nFusionSpatialConfid_100_Lux; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  171. AX_U32 nFusionWeightGrayZone; /* Accuracy:U1.10 Range:[0, 1024] */
  172. AX_U32 nFusionWeightSpatial; /* Accuracy:U1.10 Range:[0, 1024] */
  173. /* Preference Params */
  174. AX_U32 nPreferCctNum; /* Accuracy:U8 Range:[0, 64] */
  175. AX_U32 nPreferSrcCctList[AX_ISP_AWB_PREFER_CCT_MAX_NUM]; /* Accuracy:U14 Range:[0, 16000] */
  176. AX_U32 nPreferDstCct[AX_ISP_AWB_LUX_TYPE_NUM][AX_ISP_AWB_PREFER_CCT_MAX_NUM]; /* Accuracy:U14 Range:[0, 16000] */
  177. AX_S32 nPreferGrShift[AX_ISP_AWB_LUX_TYPE_NUM][AX_ISP_AWB_PREFER_CCT_MAX_NUM]; /* Accuracy:S4.20 Range:[-16777215, 16777215 (16*1024*1024)] */
  178. /* Multi Camera Sync Params */
  179. AX_U32 nMultiCamSyncMode; /* Accuracy:U2 Range:[0, 3] */
  180. } AX_ISP_IQ_AWB_ALG_CONFIG_T;
  181. typedef struct {
  182. AX_U32 nblkRowNum; /* Accuracy:U7 Range:[0, 54] */
  183. AX_U32 nblkColNum; /* Accuracy:U7 Range:[0, 72] */
  184. AX_ISP_IQ_AWB_PNT_T tStats[AX_ISP_AWB_GRID_NUM_MAX];
  185. AX_U32 nCct; /* Accuracy:U14 Range:[0, 16000] */
  186. AX_U32 nLux; /* Accuracy:U22.10 Range:[0, 4294967295 (4*1024*1024*1024)] */
  187. AX_U32 nLuxTypeInd; /* Accuracy:U8 Range:[0, 64] */
  188. AX_U32 nCctStd; /* Accuracy:U14 Range:[0, 9999] */
  189. AX_U32 nMixLightProba; /* Accuracy:U10 Range:[0, 1000] Current Mix Light Probability */
  190. AX_U32 nSatDiscount; /* Accuracy:U8 Range:[0, 100] Current Saturation Discount */
  191. /* Stat Info of each Planckian Zone and Extra Illumination.
  192. * Element[0~23]: Stat Info of each Planckian Zone.
  193. * Element[23~ ]: Stat Info of each Extra Illumination.
  194. */
  195. AX_U32 nGrayZoneCnt[AX_ISP_AWB_ZONE_MAX_NUM]; /* Accuracy:U12 Range:[0, 4096] */
  196. AX_U32 nGrayZoneLuxWeight[AX_ISP_AWB_ZONE_MAX_NUM]; /* Accuracy:U10 Range:[0, 1000] */
  197. AX_U32 nGrayZoneLuxWeightSum[AX_ISP_AWB_ZONE_MAX_NUM]; /* Accuracy:U32 Range:[0, 4294967295] */
  198. AX_U32 nGrayZoneFinalWeightSum[AX_ISP_AWB_ZONE_MAX_NUM]; /* Accuracy:U32 Range:[0, 4294967295] */
  199. AX_U32 nGrayZoneLumaSum[AX_ISP_AWB_ZONE_MAX_NUM]; /* Accuracy:U32 Range:[0, 4294967295] */
  200. /* Fusion Status */
  201. AX_U32 nGrayZoneBlkWeightAvg; /* Accuracy:U10 Range:[0, 1000] */
  202. AX_U32 nGrayZoneConfid; /* Accuracy:U1.10 Range:[0, 1024] */
  203. AX_U32 nSpatialConfid; /* Accuracy:U1.10 Range:[0, 1024] */
  204. AX_U32 nGrayZoneFusionRatio; /* Accuracy:U1.10 Range:[0, 1024] */
  205. AX_U32 nSpatialFusionRatio; /* Accuracy:U1.10 Range:[0, 1024] */
  206. AX_ISP_IQ_AWB_PNT_T tGrayZonePoint;
  207. AX_ISP_IQ_AWB_PNT_T tSpatialPoint;
  208. AX_ISP_IQ_AWB_PNT_T tFusionPoint;
  209. /* Dominant Status */
  210. AX_U32 nDomCntH; /* Accuracy:U13 Range:[0, 4096] */
  211. AX_U32 nDomCntA; /* Accuracy:U13 Range:[0, 4096] */
  212. AX_U32 nDomCntF; /* Accuracy:U13 Range:[0, 4096] */
  213. AX_U32 nDomCntD; /* Accuracy:U13 Range:[0, 4096] */
  214. AX_U32 nDom2MinorRatioH; /* Accuracy:U1.10 Range:[0, 1024] */
  215. AX_U32 nDom2MinorRatioA; /* Accuracy:U1.10 Range:[0, 1024] */
  216. AX_U32 nDom2MinorRatioF; /* Accuracy:U1.10 Range:[0, 1024] */
  217. AX_U32 nDom2MinorRatioD; /* Accuracy:U1.10 Range:[0, 1024] */
  218. AX_U32 nDom2AllRatioH; /* Accuracy:U1.10 Range:[0, 1024] */
  219. AX_U32 nDom2AllRatioA; /* Accuracy:U1.10 Range:[0, 1024] */
  220. AX_U32 nDom2AllRatioF; /* Accuracy:U1.10 Range:[0, 1024] */
  221. AX_U32 nDom2AllRatioD; /* Accuracy:U1.10 Range:[0, 1024] */
  222. AX_U32 nDomActiveH; /* Accuracy:U1 Range:[0, 1] */
  223. AX_U32 nDomActiveA; /* Accuracy:U1 Range:[0, 1] */
  224. AX_U32 nDomActiveF; /* Accuracy:U1 Range:[0, 1] */
  225. AX_U32 nDomActiveD; /* Accuracy:U1 Range:[0, 1] */
  226. /* Luma Counter */
  227. AX_U32 nLumaWeight[AX_ISP_AWB_LUMA_WEIGHT_MAX_NUM+1]; /* Accuracy:U1.10 Range:[0, 1024] Current Luma Weight*/
  228. AX_U32 nLumaCount[AX_ISP_AWB_LUMA_WEIGHT_MAX_NUM+1]; /* Accuracy:U12 Range:[0, 4000] Current Luma Count*/
  229. } AX_ISP_IQ_AWB_ALG_STATUS_T;
  230. typedef struct {
  231. AX_U32 nGainR; /* Accuracy:U4.10 Range:[1024, 16383] */
  232. AX_U32 nGainGr; /* Accuracy:U4.10 Range:[1024, 16383] */
  233. AX_U32 nGainGb; /* Accuracy:U4.10 Range:[1024, 16383] */
  234. AX_U32 nGainB; /* Accuracy:U4.10 Range:[1024, 16383] */
  235. } AX_ISP_IQ_AWB_GAIN_T;
  236. typedef struct {
  237. AX_U32 nLogLevel; /* AXAWB_LOG_EMERG:0,AXAWB_LOG_ALERT:1,AXAE_LOG_CRIT:2,AXAWB_LOG_ERROR:3, AXAWB_LOG_WARN:4, AXAWB_LOG_NOTICE:5, AXAWB_LOG_INFO:6,AXAWB_LOG_DBG:7*/
  238. AX_U32 nLogTarget; /* AXAWB_LOG_TARGET_STDERR:1, AXAWB_LOG_TARGET_SYSLOG:2 */
  239. AX_U8 nAlgoPrintInterval; /*Accuracy:U8 Range:[0, 100] How many frames to print at intervals. If set to 0, do not print */
  240. AX_U8 nStatisticsPrintInterval; /*Accuracy:U8 Range:[0, 100] How many frames to print at intervals. If set to 0, do not print */
  241. } AX_ISP_IQ_AWB_LOG_T;
  242. typedef struct {
  243. AX_U8 nEnable;
  244. AX_ISP_IQ_AWB_GAIN_T tManualParam;
  245. AX_ISP_IQ_AWB_ALG_CONFIG_T tAutoParam;
  246. AX_ISP_IQ_AWB_LOG_T tLogParam;
  247. } AX_ISP_IQ_AWB_PARAM_T;
  248. typedef struct {
  249. AX_ISP_IQ_AWB_GAIN_T tGainStatus;
  250. AX_ISP_IQ_AWB_ALG_STATUS_T tAlgoStatus;
  251. } AX_ISP_IQ_AWB_STATUS_T;
  252. ////////////////////////////////////////////////////////////////////////////////////
  253. // AE ALG Param
  254. ////////////////////////////////////////////////////////////////////////////////////
  255. #define AX_ISP_AE_LUX_MAX_PAIR_NUM (10)
  256. #define AX_TFLICKER_100HZ (1000000.0/100.0 ) /* predefined flicker period value for ECM module, uint:us */
  257. #define AX_TFLICKER_120HZ (1000000.0/120.0) /* predefined flicker period value for ECM module, uint:us */
  258. #define AX_ISP_AE_GRID_WEIGHT_ROW_MAX (48)
  259. #define AX_ISP_AE_GRID_WEIGHT_COLUMN_MAX (64)
  260. typedef struct{
  261. AX_U8 nEnable; /* 0: Antiflicker off; 1: antiflicker on */
  262. AX_U8 nFlickerPeriod; /* 0: 100HZ, 1: 120HZ */
  263. AX_U32 nAntiFlickerTolerance; /* Uints: us. Accuracy:U32 Range:[0x0, 0x208d] */
  264. AX_U8 nOverExpMode; /* 0: ANTI PRIOR,1: LUMA PRIOR */
  265. AX_U8 nUnderExpMode; /* 0: ANTI PRIOR,1: LUMA PRIOR */
  266. } AX_ISP_IQ_AE_ANTIFLICKER_PARAMS_T;
  267. typedef struct{
  268. AX_U32 nIntergrationTime; /* Uints: us. Accuracy:U32
  269. * if nFrameRateMode = 0, Range: [tSnsShutterLimit.nMin, tSnsShutterLimit.nMax]
  270. * if nFrameRateMode = 1, Range: [tSnsSlowShutterModeShutterLimit.nMin, tSnsSlowShutterModeShutterLimit.nMax] */
  271. AX_U32 nGain; /* Accuracy: U22.10 Range: [nTotalGainMin, nTotalGainMax] */
  272. AX_U8 nIncrementPriority; /* 0: Exp Time 1: Gain */
  273. } AX_ISP_IQ_AE_ROUTE_CURVE_NODE_T;
  274. #define AE_ISP_ROUTE_MAX_NODES 16
  275. #define AX_AE_TABLE_NAME_LENGTH_MAX 32
  276. typedef struct{
  277. AX_CHAR sTableName[AX_AE_TABLE_NAME_LENGTH_MAX];
  278. AX_U8 nRouteCurveNum; /* Accuracy: U8 Range: [0x1, 0x10] */
  279. AX_ISP_IQ_AE_ROUTE_CURVE_NODE_T tRouteCurveList[AE_ISP_ROUTE_MAX_NODES];
  280. } AX_ISP_IQ_AE_ROUTE_TABLE_T;
  281. #define AX_AE_TABLE_NUM_MAX 8
  282. typedef struct{
  283. AX_U8 nTableNum; /* Accuracy: U8 Range: [0x1, 0x8] */
  284. AX_U8 nUsedTableId; /* Accuracy: U8 Range: [0x0, 0x7] */
  285. AX_ISP_IQ_AE_ROUTE_TABLE_T tRouteTable[AX_AE_TABLE_NUM_MAX];
  286. } AX_ISP_IQ_AE_ROUTE_PARAM_T;
  287. #define AE_ISP_SETPOINT_MAX_NUM 10
  288. typedef struct{
  289. AX_U8 nSize; /* Accuracy: U8 Range: [0x0, 0xA] */
  290. AX_U32 nRefList[AE_ISP_SETPOINT_MAX_NUM]; /* <gain value/lux value> if nSetPointMode = 1, use gain range; if nSetPointMode = 2,use lux range;
  291. * Accuracy: U22.10
  292. * gain range: nTotalGainMin, nTotalGainMax]
  293. * lux range: 0x0, 0x3D090000]*/
  294. AX_U32 nSetPointList[AE_ISP_SETPOINT_MAX_NUM]; /* Accuracy: U8.10 Range: [0x0, 0x3FC00] */
  295. } AX_ISP_IQ_AE_SETPOINT_CURVE_T;
  296. typedef struct {
  297. AX_U32 nMinRatio; /* Accuracy: U7.10 Range: [nHdrRatioMin, nHdrRatioMax] */
  298. AX_U32 nMaxRatio; /* Accuracy: U7.10 Range: [nHdrRatioMin, nHdrRatioMax] */
  299. AX_U32 nShortNonSatAreaPercent; /* Accuracy: U7.20 Range: [0x0, 0x6400000] */
  300. AX_U32 nShortSatLuma; /* Accuracy: U8.10 Range: [0x0, 0x3FC00] */
  301. AX_U32 nTolerance; /* Accuracy: U7.20 Range: [0x0, 0x6400000] */
  302. AX_U8 nConvergeCntFrameNum; /* Accuracy: U8 Range: [0x0, 0xA] */
  303. AX_U32 nDampRatio; /* Accuracy: U0.10 Range: [0x0, 0x400] */
  304. } AX_ISP_IQ_AE_HDR_RATIO_STRATEGY_PARAM_T;
  305. typedef struct {
  306. AX_U8 nHdrMode; /* 1: Dynamic mode 0: fixed mode*/
  307. AX_ISP_IQ_AE_HDR_RATIO_STRATEGY_PARAM_T tRatioStrategyParam;
  308. AX_U32 nFixedHdrRatio; /* Accuracy: U7.10 Range: [nHdrRatioMin, nHdrRatioMax] */
  309. } AX_ISP_IQ_AE_HDR_RATIO_T;
  310. typedef struct
  311. {
  312. AX_U32 nBigStepFactor; /* Accuracy: U4.20 Range: [0x0, 0xA00000], 6 decimal places */
  313. AX_U32 nSmallStepFactor; /* Accuracy: U4.20 Range: [0x0, 0xA00000], 6 decimal places */
  314. AX_U32 nLumaDiffOverThresh; /* Accuracy: U8.10 Range: [0x0, 0x3FC00] */
  315. AX_U32 nLumaDiffUnderThresh; /* Accuracy: U8.10 Range: [0x0, 0x3FC00] */
  316. AX_U32 nLumaSpeedThresh; /* Accuracy: U8.10 Range: [0x0, 0x3FC00] */
  317. AX_U32 nSpeedDownFactor; /* Accuracy: U4.20 Range: [0x0, 0xA00000], 6 decimal places */
  318. AX_U32 nMinUserPwmDuty; /* Accuracy: U7.10 Range: [0x0, 0x19000] */
  319. AX_U32 nMaxUserPwmDuty; /* Accuracy: U7.10 Range: [0x0, 0x19000] */
  320. AX_U32 nOpenPwmDuty; /* Accuracy: U7.10 Range: [0x0, 0x19000] */
  321. AX_U32 nConvergeLumaDiffTolerance; /* Accuracy: U7.20 Range: [0x0, 0x6400000] */
  322. AX_U32 nConvergeFrameCntThresh; /* Accuracy: U32 Range: [0x0, 0x64] */
  323. } AX_ISP_IQ_AE_DCIRIS_PARAMS_T;
  324. #define AX_ISP_AE_SPARSE_SLOW_SHUTTER_MAX_NUM 5
  325. typedef struct
  326. {
  327. AX_U32 nNodeNum; /* Accuracy: U32 Range: [0x0, 0x5]*/
  328. AX_U32 nFpsList[AX_ISP_AE_SPARSE_SLOW_SHUTTER_MAX_NUM]; /* Accuracy: U8.10 Range: [nSnsSlowShutterModeFpsMin, nSnsSlowShutterModeFpsMax] */
  329. } AX_ISP_IQ_AE_SPARSE_MODE_PARAM_T;
  330. typedef struct
  331. {
  332. AX_U8 nFrameRateMode; /* 0: FIX FRAME RATE MODE; 1: SLOW SHUTTER MODE */
  333. AX_U8 nFpsIncreaseDelayFrame; /* Accuracy: U8 Range: [0x0, 0xA] */
  334. } AX_ISP_IQ_AE_SLOW_SHUTTER_PARAM_T;
  335. typedef struct
  336. {
  337. AX_U32 nIrisType; /* Accuracy: U32 0: FIXED TYPE; 1: DC-IRIS */
  338. AX_ISP_IQ_AE_DCIRIS_PARAMS_T tDcIrisParam;
  339. } AX_ISP_IQ_AE_IRIS_PARAMS_T;
  340. typedef struct
  341. {
  342. AX_U32 nToFastLumaThOver; /* Accuracy: U4.10 Range: [0x0, 0x2800]*/
  343. AX_U32 nToFastLumaThUnder; /* Accuracy: U1.10 Range: [0x0, 0x400]*/
  344. AX_U32 nToSlowLumaThOver; /* Accuracy: U4.10 Range: [0x0, 0x2800]*/
  345. AX_U32 nToSlowLumaThUnder; /* Accuracy: U1.10 Range: [0x0, 0x400]*/
  346. AX_U32 nToSlowFrameTh; /* Accuracy: U32 Range: [0x0, 0x12C]*/
  347. AX_U32 nToConvergedFrameTh; /* Accuracy: U32 Range: [0x0, 0xA]*/
  348. }AX_ISP_IQ_AE_STATE_MACHINE_T;
  349. #define AX_ISP_AE_SPEED_KNEE_MAX_NUM (16)
  350. typedef struct
  351. {
  352. AX_U32 nFastOverKneeCnt; /* Accuracy: U32 Range: [0x1, 0x10] */
  353. AX_U32 nFastOverLumaDiffList[AX_ISP_AE_SPEED_KNEE_MAX_NUM]; /* Accuracy: U9.10 Range: [0x0, 0x4 0000] */
  354. AX_U32 nFastOverStepFactorList[AX_ISP_AE_SPEED_KNEE_MAX_NUM]; /* Accuracy: U1.10 Range: [0x0, 0x400] */
  355. AX_U32 nFastOverSpeedDownFactorList[AX_ISP_AE_SPEED_KNEE_MAX_NUM]; /* Accuracy: U1.10 Range: [0x0, 0x400] */
  356. AX_U32 nFastOverSkipList[AX_ISP_AE_SPEED_KNEE_MAX_NUM]; /* Accuracy: U32 Range: [0x0, 0xA] */
  357. AX_U32 nFastUnderKneeCnt; /* Accuracy: U32 Range: [0x1, 0x10] */
  358. AX_U32 nFastUnderLumaDiffList[AX_ISP_AE_SPEED_KNEE_MAX_NUM]; /* Accuracy: U9.10 Range: [0x0, 0x4 0000] */
  359. AX_U32 nFastUnderStepFactorList[AX_ISP_AE_SPEED_KNEE_MAX_NUM]; /* Accuracy: U1.10 Range: [0x0, 0x400] */
  360. AX_U32 nFastUnderSpeedDownFactorList[AX_ISP_AE_SPEED_KNEE_MAX_NUM]; /* Accuracy: U1.10 Range: [0x0, 0x400] */
  361. AX_U32 nFastUnderSkipList[AX_ISP_AE_SPEED_KNEE_MAX_NUM]; /* Accuracy: U32 Range: [0x0, 0xA] */
  362. AX_U32 nSlowOverKneeCnt; /* Accuracy: U32 Range: [0x1, 0x10] */
  363. AX_U32 nSlowOverLumaDiffList[AX_ISP_AE_SPEED_KNEE_MAX_NUM]; /* Accuracy: U9.10 Range: [0x0, 0x4 0000] */
  364. AX_U32 nSlowOverStepFactorList[AX_ISP_AE_SPEED_KNEE_MAX_NUM]; /* Accuracy: U1.10 Range: [0x0, 0x400] */
  365. AX_U32 nSlowOverSpeedDownFactorList[AX_ISP_AE_SPEED_KNEE_MAX_NUM]; /* Accuracy: U1.10 Range: [0x0, 0x400] */
  366. AX_U32 nSlowOverSkipList[AX_ISP_AE_SPEED_KNEE_MAX_NUM]; /* Accuracy: U32 Range: [0x0, 0xA] */
  367. AX_U32 nSlowUnderKneeCnt; /* Accuracy: U32 Range: [0x1, 0x10] */
  368. AX_U32 nSlowUnderLumaDiffList[AX_ISP_AE_SPEED_KNEE_MAX_NUM]; /* Accuracy: U9.10 Range: [0x0, 0x4 0000] */
  369. AX_U32 nSlowUnderStepFactorList[AX_ISP_AE_SPEED_KNEE_MAX_NUM]; /* Accuracy: U1.10 Range: [0x0, 0x400] */
  370. AX_U32 nSlowUnderSpeedDownFactorList[AX_ISP_AE_SPEED_KNEE_MAX_NUM]; /* Accuracy: U1.10 Range: [0x0, 0x400] */
  371. AX_U32 nSlowUnderSkipList[AX_ISP_AE_SPEED_KNEE_MAX_NUM]; /* Accuracy: U32 Range: [0x0, 0xA] */
  372. }AX_ISP_IQ_AE_CONVERGE_SPEED_T;
  373. typedef struct
  374. {
  375. AX_ISP_IQ_AE_STATE_MACHINE_T tStateMachineParam;
  376. AX_ISP_IQ_AE_CONVERGE_SPEED_T tConvergeSpeedParam;
  377. }AX_ISP_IQ_AE_TIME_SMOOTH_PARAM_T;
  378. #define AX_ISP_AE_LUMA_WEIGHT_MAX_NUM 64
  379. typedef struct
  380. {
  381. AX_U8 nEnable; /* 0: disable luma weight 1: enable luma weight */
  382. AX_U32 nLumaWeightNum; /* Accuracy: U32 Range: [0x0, 0x40]*/
  383. AX_U32 nLumaSplitList[AX_ISP_AE_LUMA_WEIGHT_MAX_NUM]; /* Accuracy: U8.10 Range: [0x0, 0x3FC00] */
  384. AX_U32 nWeightList[AX_ISP_AE_LUMA_WEIGHT_MAX_NUM]; /* Accuracy: U1.10 Range: [0x0, 0x400] */
  385. } AX_ISP_IQ_AE_LUMA_WEIGHT_PARAM_T;
  386. typedef struct {
  387. AX_U32 nSetPoint; /* Accuracy: U8.10 Range: [0x0, 0x3FC00] */
  388. AX_U32 nTolerance; /* Accuracy: U7.20 Range: [0x0, 0x6400000] */
  389. AX_U32 nAgainLcg2HcgTh; /* Accuracy: U22.10 Range: [tSnsAgainLimit.nMin, tSnsAgainLimit.nMax] */
  390. AX_U32 nAgainHcg2LcgTh; /* Accuracy: U22.10 Range: [tSnsAgainLimit.nMin, tSnsAgainLimit.nMax] */
  391. AX_U32 nAgainLcg2HcgRatio; /* Accuracy: U10.10 Range: [0x400, 0x2800] */
  392. AX_U32 nAgainHcg2LcgRatio; /* Accuracy: U10.10 Range: [0x400, 0x2800] */
  393. AX_U32 nLuxk; /* Accuracy: U24 Range: [0x0, 0x989680] */
  394. AX_U32 nMaxIspGain; /* Accuracy:U22.10 Range:[tIspDgainLimit.nMin, tIspDgainLimit.nMax] */
  395. AX_U32 nMinIspGain; /* Accuracy:U22.10 Range:[tIspDgainLimit.nMin, tIspDgainLimit.nMax] */
  396. AX_U32 nMaxUserDgain; /* Accuracy:U22.10 Range:[tSnsDgainLimit.nMin, tSnsDgainLimit.nMax] */
  397. AX_U32 nMinUserDgain; /* Accuracy:U22.10 Range:[tSnsDgainLimit.nMin, tSnsDgainLimit.nMax] */
  398. AX_U32 nMaxUserTotalAgain; /* Accuracy:U22.10 Range:[nSnsTotalAGainMin, nSnsTotalAGainMax] */
  399. AX_U32 nMinUserTotalAgain; /* Accuracy:U22.10 Range:[nSnsTotalAGainMin, nSnsTotalAGainMax] */
  400. AX_U32 nMaxUserSysGain; /* Accuracy:U22.10 Range:[nTotalGainMin, nTotalGainMax] */
  401. AX_U32 nMinUserSysGain; /* Accuracy:U22.10 Range:[nTotalGainMin, nTotalGainMax] */
  402. AX_U32 nMaxShutter; /* Uints: us. Accuracy:U32
  403. * if nFrameRateMode = 0, Range: [tSnsShutterLimit.nMin, tSnsShutterLimit.nMax]
  404. * if nFrameRateMode = 1, Range: [tSnsSlowShutterModeShutterLimit.nMin, tSnsSlowShutterModeShutterLimit.nMax] */
  405. AX_U32 nMinShutter; /* Uints: us. Accuracy:U32 Range:[tSnsShutterLimit.nMin, tSnsShutterLimit.nMax] */
  406. AX_U8 nPositionWeightMode; /* Accuracy: U8 Range: [0x0, 0x2] 0:Close 1:GridWeightMode 2:RoiWeightMode */
  407. AX_U32 nRoiStartX; /* Accuracy: U1.10 Range: [0x0, 0x400] */
  408. AX_U32 nRoiStartY; /* Accuracy: U1.10 Range: [0x0, 0x400] */
  409. AX_U32 nRoiWidth; /* Accuracy: U1.10 Range: [0x0, 0x400] */
  410. AX_U32 nRoiHeight; /* Accuracy: U1.10 Range: [0x0, 0x400] */
  411. AX_U32 nWeightRoi; /* Accuracy: U1.10 Range: [0x0, 0x400] */
  412. AX_U32 nWeightBackgnd; /* Accuracy: U1.10 Range: [0x0, 0x400] */
  413. AX_U8 nGridWeightRow; /* Accuracy: U8 Range: [0x1, 0x30] */
  414. AX_U8 nGridWeightColumn; /* Accuracy: U8 Range: [0x1, 0x40] */
  415. AX_U16 nGridWeightTable[AX_ISP_AE_GRID_WEIGHT_ROW_MAX][AX_ISP_AE_GRID_WEIGHT_COLUMN_MAX]; /* Accuracy: U1.10 Range: [0x0, 0x400] */
  416. AX_ISP_IQ_AE_ANTIFLICKER_PARAMS_T tAntiFlickerParam;
  417. AX_U32 nSetPointMode; /* 0: fixed; 1: gain; 2: lux */
  418. AX_U32 nStrategyMode; /* 0: SHUTTER_PRIOR; 1:GAIN_PRIOR; 2:AE ROUTE */
  419. AX_ISP_IQ_AE_ROUTE_PARAM_T tAeRouteParam;
  420. AX_ISP_IQ_AE_SETPOINT_CURVE_T tAeSetPointCurve;
  421. AX_ISP_IQ_AE_HDR_RATIO_T tAeHdrRatio;
  422. AX_U32 nMultiCamSyncMode; /* 0: INDEPEND MODE; 1: MASTER SLAVE MODE; 2: OVERLAP MODE */
  423. AX_U32 nMultiCamSyncRatio; /* Accuracy: U7.20 Range: [0x0, 0x8000000] */
  424. AX_ISP_IQ_AE_SLOW_SHUTTER_PARAM_T tSlowShutterParam;
  425. AX_ISP_IQ_AE_IRIS_PARAMS_T tIrisParam;
  426. AX_ISP_IQ_AE_LUMA_WEIGHT_PARAM_T tLumaWeightParam;
  427. AX_ISP_IQ_AE_TIME_SMOOTH_PARAM_T tTimeSmoothParam;
  428. } AX_ISP_IQ_AE_ALG_CONFIG_T;
  429. typedef struct {
  430. AX_U32 nIspGain; /* Accuracy: U22.10 Range: [tIspDgainLimit.nMin, tIspDgainLimit.nMax] */
  431. AX_U32 nAGain; /* Accuracy: U22.10 Range: [tSnsAgainLimit.nMin, tSnsAgainLimit.nMax] */
  432. AX_U32 nDgain; /* Accuracy: U22.10 Range: [tSnsDgainLimit.nMin, tSnsDgainLimit.nMax] */
  433. AX_U8 nHcgLcg; /* HCG:0, LCG:1 */
  434. AX_U32 nSnsTotalAGain; /* Accuracy: U22.10 Range: [nSnsTotalAGainMin, nSnsTotalAGainMax] */
  435. AX_U32 nSysTotalGain; /* Accuracy: U22.10 Range: [nTotalGainMin, nTotalGainMax] */
  436. AX_U32 nShutter; /* Uints: us. Accuracy: U32
  437. * if nFrameRateMode = 0, Range: [tSnsShutterLimit.nMin, tSnsShutterLimit.nMax]
  438. * if nFrameRateMode = 1, Range: [tSnsSlowShutterModeShutterLimit.nMin, tSnsSlowShutterModeShutterLimit.nMax] */
  439. AX_U32 nIrisPwmDuty; /* Accuracy: U7.10 Range: [0x0, 0x19000] */
  440. AX_U32 nHdrRealRatioLtoS; /* Accuracy: U7.10 Range: [nHdrRatioMin, nHdrRatioMax] */
  441. AX_U32 nHdrRealRatioStoVS; /* Accuracy: U7.10 Range: [nHdrRatioMin, nHdrRatioMax] */
  442. AX_U32 nSetPoint; /* Accuracy: U8.10 Range: [0x0, 0x3FC00] */
  443. /* Below Unused on Tool, first defined, not nsed */
  444. AX_U32 nShortAgain; /* Accuracy: U22.10 Range: [tShortAgainLimit.nMin, tShortAgainLimit.nMax] */
  445. AX_U32 nShortDgain; /* Accuracy: U22.10 Range: [tShortDgainLimit.nMin, tShortDgainLimit.nMax] */
  446. AX_U32 nShortShutter; /* Uints: us. Accuracy: U32 Range: [tShortShutterLimit.nMin, tShortShutterLimit.nMax] */
  447. AX_U32 nVsAgain; /* Accuracy: U22.10 Range: [tVsAgainLimit.nMin, tVsAgainLimit.nMax] */
  448. AX_U32 nVsDgain; /* Accuracy: U22.10 Range: [tVsDgainLimit.nMin, tVsDgainLimit.nMax] */
  449. AX_U32 nVsShutter; /* Uints: us. Accuracy: U32 Range: [tVsShutterLimit.nMin, tVsShutterLimit.nMax] */
  450. AX_U32 nHdrRatio; /* Accuracy: U7.10 Range: [0x400, 0x1FC00] */
  451. AX_U32 nHdrMaxShutterHwLimit; /* Accuracy: U32 Range [0x0,0xFFFF FFFF]*/
  452. AX_U32 nRealMaxShutter; /* Accuracy: U32 Range [0x0,0xFFFF FFFF]*/
  453. } AX_ISP_IQ_EXP_SETTING_T;
  454. typedef struct {
  455. AX_U32 nMeanLuma; /* Accuracy: U8.10 Range: [0x0, 0x3FC00] */
  456. AX_U32 nWeightedMeanLuma; /* Accuracy: U8.10 Range: [0x0, 0x3FC00] */
  457. AX_U32 nLux; /* Accuracy: U22.10 Range: [0x0, 0x3D090000] */
  458. AX_U64 nExpVal; /* Accuracy: U36.10
  459. * Range: min = tIspDgainLimit.nMin * tSnsAgainLimit.nMin * tSnsDgainLimit.nMin * tSnsShutterLimit.nMin
  460. * Range: max = tIspDgainLimit.nMax * tSnsAgainLimit.nMax * tSnsDgainLimit.nMax * tSnsShutterLimit.nMax * nDcgRatio */
  461. AX_U32 nFps; /* Accuracy: U8.10 Range: [0x400,0x19000]*/
  462. } AX_ISP_IQ_AE_ALG_STATUS_T;
  463. typedef struct {
  464. AX_U8 nEnable;
  465. AX_ISP_IQ_EXP_SETTING_T tExpManual;
  466. AX_ISP_IQ_AE_ALG_CONFIG_T tAeAlgAuto;
  467. AX_U32 nLogLevel; /* AXAE_LOG_EMERG:0,AXAE_LOG_ALERT:1,AXAE_LOG_CRIT:2,AXAE_LOG_ERROR:3, AXAE_LOG_WARN:4, AXAE_LOG_NOTICE:5, AXAE_LOG_INFO:6,AXAE_LOG_DBG:7*/
  468. AX_U32 nLogTarget; /* AXAE_LOG_TARGET_STDERR:1, AXAE_LOG_TARGET_SYSLOG:2 */
  469. } AX_ISP_IQ_AE_PARAM_T;
  470. typedef struct {
  471. AX_ISP_IQ_AE_ALG_STATUS_T tAlgStatus;
  472. AX_ISP_IQ_EXP_SETTING_T tExpStatus;
  473. } AX_ISP_IQ_AE_STATUS_T;
  474. typedef struct{
  475. AX_U8 scanStatus; /*Accuracy:U6 Range:[0, 1] SCANRUNING = 0, SCANFINISH = 1*/
  476. }AX_ISP_AE_SCAN_STATUS;
  477. typedef struct {
  478. AX_U32 nMax;
  479. AX_U32 nMin;
  480. AX_U32 nStep;
  481. } AX_ISP_IQ_AE_UNIT_T;
  482. typedef struct {
  483. AX_U8 nGainMode; /* 0: AGain_Only, 1: AGain_DGain_Separate, 2: AGain_DGain_Combined */
  484. AX_U8 nDcgEn; /* 1: support LCG/HCG switch, 0: Not Support */
  485. AX_U32 nDcgRatio; /* Accuracy: U10.10 Range: [0x400, 0x2800] */
  486. AX_U64 nExpValLimitMin; /* Accuracy: U36.10 Range: [0x0, 400000000000], Max/Min gain Depend on Sensor Spec */
  487. AX_U64 nExpValLimitMax; /* Accuracy: U36.10 Range: [0x0, 400000000000], Max/Min gain Depend on Sensor Spec */
  488. AX_U32 nTotalGainMin; /* Accuracy: U22.10 Range: [0x400, 0xFFFFFFFF], Max/Min gain Depend on Sensor Spec */
  489. AX_U32 nTotalGainMax; /* Accuracy: U22.10 Range: [0x400, 0xFFFFFFFF], Max/Min gain Depend on Sensor Spec */
  490. AX_U32 nHdrRatioMin; /* Accuracy: U7.10 Range: [0x400, 0x1FC00] */
  491. AX_U32 nHdrRatioMax; /* Accuracy: U7.10 Range: [0x400, 0x1FC00] */
  492. AX_U32 nSnsTotalAGainMin; /* Accuracy: U22.10 Range: [0x400, 0xFFFFFFFF], Max/Min gain Depend on Sensor Spec */
  493. AX_U32 nSnsTotalAGainMax; /* Accuracy: U22.10 Range: [0x400, 0xFFFFFFFF], Max/Min gain Depend on Sensor Spec */
  494. AX_ISP_IQ_AE_UNIT_T tIspDgainLimit; /* Accuracy: U22.10 Range: [0x400, 0xFFFFFFFF] */
  495. AX_ISP_IQ_AE_UNIT_T tSnsShutterLimit; /* Uints: us. Accuracy: U32 Range: [0x0, 0xFFFFFFFF], Max/Min IntTime Depends on FPS */
  496. AX_ISP_IQ_AE_UNIT_T tSnsAgainLimit; /* Accuracy: U22.10 Range: [0x400, 0xFFFFFFFF], Max/Min gain Depend on Sensor Spec */
  497. AX_ISP_IQ_AE_UNIT_T tSnsDgainLimit; /* Accuracy: U22.10 Range: [0x400, 0xFFFFFFFF], Max/Min gain Depend on Sensor Spec */
  498. AX_ISP_IQ_AE_UNIT_T tSnsSlowShutterModeShutterLimit; /* Uints: us. Accuracy: U32 Range: [0x0, 0xFFFFFFFF], Max/Min IntTime Depends on FPS */
  499. /*first defined, temp not used*/
  500. AX_ISP_IQ_AE_UNIT_T tShortAgainLimit; /* Accuracy: U22.10 Range: [0x400, 0xFFFFFFFF], Max/Min gain Depend on Sensor Spec */
  501. AX_ISP_IQ_AE_UNIT_T tShortDgainLimit; /* Accuracy: U22.10 Range: [0x400, 0xFFFFFFFF], Max/Min gain Depend on Sensor Spec */
  502. AX_ISP_IQ_AE_UNIT_T tShortShutterLimit; /* Uints: us. Accuracy: U32 Range: [0x0, 0xFFFFFFFF], Max/Min IntTime Depends on FPS */
  503. AX_ISP_IQ_AE_UNIT_T tVsAgainLimit; /* Accuracy: U22.10 Range: [0x400, 0xFFFFFFFF], Max/Min gain Depend on Sensor Spec */
  504. AX_ISP_IQ_AE_UNIT_T tVsDgainLimit; /* Accuracy: U22.10 Range: [0x400, 0xFFFFFFFF], Max/Min gain Depend on Sensor Spec */
  505. AX_ISP_IQ_AE_UNIT_T tVsShutterLimit; /* Uints: us. Accuracy: U32 Range: [0x0, 0xFFFFFFFF], Max/Min IntTime Depends on FPS */
  506. } AX_ISP_IQ_EXP_HW_LIMIT_T;
  507. typedef struct {
  508. AX_U64 nExpList[AX_ISP_AE_LUX_MAX_PAIR_NUM]; /* Accuracy: U36.10
  509. * Range: min = tIspDgainLimit.nMin * tSnsAgainLimit.nMin * tSnsDgainLimit.nMin * tSnsShutterLimit.nMin
  510. * max = tIspDgainLimit.nMax * tSnsAgainLimit.nMax * tSnsDgainLimit.nMax * tSnsShutterLimit.nMax * nDcgRatio */
  511. AX_U32 nLuxList[AX_ISP_AE_LUX_MAX_PAIR_NUM]; /* Accuracy: U22.10 Range: [0x0, 0x3D090000] */
  512. AX_U32 nLumaList[AX_ISP_AE_LUX_MAX_PAIR_NUM]; /* Accuracy: U8.10 Range: [0x0, 0x3FC00] */
  513. } AX_ISP_IQ_LUX_K_CALIB_INPUT_T;
  514. ////////////////////////////////////////////////////////////////////////////////////
  515. // IR ALG Param
  516. ////////////////////////////////////////////////////////////////////////////////////
  517. typedef struct {
  518. AX_U32 nIrCalibR; /* Accuracy: U8.10 Range: [0x0, 0x4000], R of all IR scene ,calibration it if sensor or ir light change */
  519. AX_U32 nIrCalibG; /* Accuracy: U8.10 Range: [0x0, 0x4000], G of all IR scene ,calibration it if sensor or ir light change */
  520. AX_U32 nIrCalibB; /* Accuracy: U8.10 Range: [0x0, 0x4000], B of all IR scene ,calibration it if sensor or ir light change */
  521. AX_U32 nNight2DayIrStrengthTh; /* Accuracy: U8.10 Range: [0x0, 0x400], if the value big, IR cut is easy to switch */
  522. AX_U32 nNight2DayIrDetectTh; /* Accuracy: U8.10 Range: [0x0, 0x2800], if the value big, IR cut is difficult to switch,do not need to change in most cases */
  523. AX_U32 nNight2DayLuxTh; /* Accuracy: U22.10 Range: [0x0, 0xFFFFFFFF] ,if lux bigger zhan this,and satisfy nNight2DayIrStrengthTh and nNight2DayIrDetectTh. turn day mode*/
  524. AX_U32 nNight2DayBrightTh; /* Accuracy: U8.10 Range: [0x0, 0x3FC00],if WP Y lagger than this,abandon it*/
  525. AX_U32 nNight2DayDarkTh; /* Accuracy: U8.10 Range: [0x0, 0x3FC00], if WP Y litter than this,abandon it*/
  526. AX_U32 nNight2DayUsefullWpRatio;/* Accuracy: U8.10 Range: [0x0, 0x400],if lux litter zhan this,turn Day mode*/
  527. AX_U32 nDay2NightLuxTh; /* Accuracy: U22.10 Range: [0x0, 0xFFFFFFFF], cur daynight mode */
  528. AX_U32 nInitDayNightMode; /* 0: day 1:night */
  529. AX_U32 nCacheTime; /* cache time */
  530. //float nDayNightSwitch; /* 0: not need to switch ircut 1:need to switch ircut */
  531. } AX_ISP_IQ_IR_PARAM_T;
  532. #ifdef __cplusplus
  533. }
  534. #endif
  535. #endif //_AX_ISP_3A_STRUCT_H_