ax_isp_api.h 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  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_API_H__
  11. #define __AX_ISP_API_H__
  12. #include "ax_base_type.h"
  13. #include "ax_global_type.h"
  14. #include "ax_isp_common.h"
  15. #include "ax_isp_iq_api.h"
  16. #include "ax_isp_3a_plus.h"
  17. #ifdef __cplusplus
  18. extern "C"
  19. {
  20. #endif
  21. #define CHIP_NAME "AX620"
  22. #define SDK_VER_PRIX "_ISP_V"
  23. #ifndef ISP_VERSION_MAJOR
  24. #define ISP_VERSION_MAJOR 0
  25. #endif
  26. #ifndef ISP_VERSION_MINOR
  27. #define ISP_VERSION_MINOR 1
  28. #endif
  29. #ifndef ISP_VERSION_MINOR2
  30. #define ISP_VERSION_MINOR2 0
  31. #endif
  32. #define __MAKE_VERSION(a,x,y) #a"."#x"."#y
  33. #define MAKE_VERSION(a,x,y) __MAKE_VERSION(a,x,y)
  34. #define ISP_VERSION CHIP_NAME SDK_VER_PRIX MAKE_VERSION(ISP_VERSION_MAJOR,ISP_VERSION_MINOR,ISP_VERSION_MINOR2)
  35. #define AX_ISP_VERSION_MAX_SIZE (64)
  36. #define AX_ISP_BUILD_TIME_MAX_SIZE (32)
  37. /**********************************************************************************
  38. * AE
  39. * input (AX_ISP_AE_INPUT_INFO_T) --> ae_alg --> output (AX_ISP_AE_RESULT_T)
  40. **********************************************************************************/
  41. #define AX_HDR_RATIO_CHN_NUM (3)
  42. typedef enum {
  43. AX_HDR_CHN_L = 0, /* long frame */
  44. AX_HDR_CHN_M, /* middle frame */
  45. AX_HDR_CHN_S, /* short frame */
  46. AX_HDR_CHN_VS, /* very short frame */
  47. } AX_HDR_CHN_E;
  48. typedef enum {
  49. AX_HDR_RATIO_CHN_L_M = 0, /* long frame / middle frame */
  50. AX_HDR_RATIO_CHN_M_S, /* middle frame / short frame */
  51. AX_HDR_RATIO_CHN_S_VS, /* short frame / very short frame */
  52. } AX_HDR_RATIO_CHN_E;
  53. typedef enum {
  54. AX_IRQ_TYPE_ITP_FEOF = 0,
  55. } AX_IRQ_TYPE_E;
  56. typedef struct {
  57. AX_U32 nSnsId;
  58. AX_SNS_HDR_MODE_E eSnsMode;
  59. AX_BAYER_PATTERN_E eBayerPattern;
  60. AX_U32 nFrameRate;
  61. } AX_ISP_AE_INITATTR_T;
  62. typedef struct {
  63. AX_ISP_AE_STAT_INFO_T sAeStat;
  64. } AX_ISP_AE_INPUT_INFO_T;
  65. typedef struct {
  66. AX_U32 nIntTime[AX_HDR_CHN_NUM]; /* ExposeTime(us). Accuracy: U32 Range: [0x0, 0xFFFFFFFF] */
  67. AX_U32 nAgain[AX_HDR_CHN_NUM]; /* Total Again value. Accuracy: U22.10 Range: [0x400, 0xFFFFFFFF]
  68. * Total Again = Sensor Register Again x HCG Ratio
  69. * LCG Mode: HCG Ratio = 1.0
  70. * HCG Mode: HCG Ratio = Refer to Sensor Spec */
  71. AX_U32 nDgain[AX_HDR_CHN_NUM]; /* Sensor Dgain value. Accuracy: U22.10 Range: [0x400, 0xFFFFFFFF]
  72. * Not Used, should be set to 0x400. AX Platform Use ISP DGain */
  73. AX_U32 nIspGain; /* ISP Dgain value. Accuracy: U22.10 Range: [0x400, 0xFFFFFFFF] */
  74. AX_U32 nTotalGain[AX_HDR_CHN_NUM]; /* Total Gain value. Accuracy: U22.10 Range: [0x400, 0xFFFFFFFF]
  75. * Total Gain value = SensorRegisterAgain * SensorDgain * CurrHcgRatio * IspGain */
  76. AX_U32 nHcgLcgMode; /* 0:HCG 1:LCG 2:Not Support */
  77. AX_U32 nHcgLcgRatio; /* Accuracy: U10.10 Range: [0x400, 0x2800] */
  78. AX_U32 nHdrRatio[AX_HDR_RATIO_CHN_NUM]; /* Accuracy: U7.10 Range: [0x400, 0x1FC00] */
  79. AX_U32 nLux; /* Accuracy: U22.10 Range: [0, 0xFFFFFFFF]
  80. * fLux = (MeanLuma*LuxK) / (AGain*Dgain*IspGain)
  81. * where LuxK is a calibrated factor */
  82. AX_U32 nMeanLuma; /* Mean Luma of the Frame. Accuracy: U8.10 Range:[0, 0x3FC00] */
  83. // AX_BOOL bNeedExcu; /* true:need caller to config sensor */
  84. } AX_ISP_AE_RESULT_T;
  85. typedef struct {
  86. AX_S32(*pfnAe_Init)(AX_U8 pipe, AX_ISP_AE_INITATTR_T *pAeInitParam, AX_ISP_AE_RESULT_T *pAeResult);
  87. AX_S32(*pfnAe_Run)(AX_U8 pipe, AX_ISP_AE_INPUT_INFO_T *pAeInputInfo, AX_ISP_AE_RESULT_T *pAeResult);
  88. AX_S32(*pfnAe_Exit)(AX_U8 pipe);
  89. } AX_ISP_AE_REGFUNCS_T;
  90. /**********************************************************************************
  91. * AWB
  92. * input (AX_ISP_AWB_INPUT_INFO_T) --> awb_alg --> output (AX_ISP_AWB_RESULT_T)
  93. **********************************************************************************/
  94. typedef struct {
  95. AX_U32 nSnsId;
  96. AX_SNS_HDR_MODE_E eSnsMode;
  97. AX_BAYER_PATTERN_E eBayerPattern;
  98. AX_U32 nFrameRate;
  99. } AX_ISP_AWB_INITATTR_T;
  100. typedef struct {
  101. AX_U32 nLux; /* from AE */
  102. AX_U32 nMeanLuma; /* from AE */
  103. AX_ISP_AWB_STAT_INFO_T tAwbStat;
  104. } AX_ISP_AWB_INPUT_INFO_T;
  105. typedef struct {
  106. AX_U32 nGrGain; /* = gain * 256.0f, gain:[1.00f, 15.0f) */
  107. AX_U32 nGbGain; /* = gain * 256.0f, gain:[1.00f, 15.0f) */
  108. AX_U32 nRgain; /* = gain * 256.0f, gain:[1.00f, 15.0f) */
  109. AX_U32 nBgain; /* = gain * 256.0f, gain:[1.00f, 15.0f) */
  110. AX_U32 nColorTemp; /* = Accuracy:U32.0, CCT Range:[1000, 20000] Color Temperature */
  111. AX_U32 nSatDiscnt; /* Saturation Used for CCM or LSC Interpolation
  112. *e.g. 100 for 100%
  113. * If Not Used, Just return 100 */
  114. } AX_ISP_AWB_RESULT_T;
  115. typedef struct {
  116. AX_S32(*pfnAwb_Init)(AX_U8 pipe, AX_ISP_AWB_INITATTR_T *pAwbInitParam);
  117. AX_S32(*pfnAwb_Run)(AX_U8 pipe, AX_ISP_AWB_INPUT_INFO_T *pAwbInputInfo, AX_ISP_AWB_RESULT_T *pAwbResult);
  118. AX_S32(*pfnAwb_Exit)(AX_U8 pipe);
  119. } AX_ISP_AWB_REGFUNCS_T;
  120. typedef union {
  121. struct {
  122. AX_U64 bitEnableLin : 1 ; /* RW; [0] */
  123. AX_U64 bitEnableDpc : 1 ; /* RW; [1] */
  124. AX_U64 bitEnableBlc : 1 ; /* RW; [2] */
  125. AX_U64 bitEnableFpn : 1 ; /* RW; [3] */
  126. AX_U64 bitEnableDarkShading : 1 ; /* RW; [4] */
  127. AX_U64 bitEnableDrc : 1 ; /* RW; [5] */
  128. AX_U64 bitEnableAWBStatFE : 1 ; /* RW; [6] */
  129. AX_U64 bitEnableAWBStatBE : 1 ; /* RW; [7] */
  130. AX_U64 bitEnableAFStat : 1 ; /* RW; [8] */
  131. AX_U64 bitEnableAEStat : 1 ; /* RW; [9] */
  132. AX_U64 bitEnableNpu : 1 ; /* RW; [10] */
  133. AX_U64 bitEnableWnr : 1 ; /* RW; [11] */
  134. AX_U64 bitEnableCac : 1 ; /* RW; [12] */
  135. AX_U64 bitEnableLsc : 1 ; /* RW; [13] */
  136. AX_U64 bitEnableWbc : 1 ; /* RW; [14] */
  137. AX_U64 bitEnableRLTM : 1 ; /* RW; [15] */
  138. AX_U64 bitEnableDehaze : 1 ; /* RW; [16] */
  139. AX_U64 bitEnableDemosaic : 1 ; /* RW; [17] */
  140. AX_U64 bitEnableClc : 1 ; /* RW; [18] */
  141. AX_U64 bitEnableGamma : 1 ; /* RW; [19] */
  142. AX_U64 bitEnableCsc : 1 ; /* RW; [20] */
  143. AX_U64 bitEnableLumaNR : 1 ; /* RW; [21] */
  144. AX_U64 bitEnableChromaNR : 1 ; /* RW; [22] */
  145. AX_U64 bitEnableSharpen : 1 ; /* RW; [23] */
  146. AX_U64 bitEnableYCrt : 1 ; /* RW; [24] */
  147. AX_U64 bitEnableYCproc : 1 ; /* RW; [25] */
  148. AX_U64 bitEnableCSET : 1 ; /* RW; [26] */
  149. AX_U64 bitEnableSifRdma1 : 1 ; /* RW; [27] */
  150. AX_U64 bitEnableDpc1 : 1 ; /* RW; [28] */
  151. AX_U64 bitRsv30 : 35 ; /* H ; [29:63] */
  152. };
  153. AX_U64 u64Key;
  154. } AX_MODULE_CTRL_T;
  155. typedef struct {
  156. AX_U16 nSnsDefaultBlackLevel;
  157. } AX_ISP_PUB_ATTR_T;
  158. typedef struct _AX_ISP_VERSION_T_ {
  159. AX_U32 nIspMajor;
  160. AX_U32 nIspMinor1;
  161. AX_U32 nIspMinor2;
  162. AX_CHAR szBuildTime[AX_ISP_BUILD_TIME_MAX_SIZE];
  163. AX_CHAR szIspVersion[AX_ISP_VERSION_MAX_SIZE];
  164. } AX_ISP_VERSION_T;
  165. /************************************************************************************
  166. * ISP API
  167. ************************************************************************************/
  168. AX_S32 AX_ISP_SetModuleControl(AX_U8 pipe, AX_MODULE_CTRL_T *pModCtrl);
  169. AX_S32 AX_ISP_GetModuleControl(AX_U8 pipe, AX_MODULE_CTRL_T *pModCtrl);
  170. AX_S32 AX_ISP_RegisterAeLibCallback(AX_U8 pipe, AX_ISP_AE_REGFUNCS_T *pRegisters);
  171. AX_S32 AX_ISP_UnRegisterAeLibCallback(AX_U8 pipe);
  172. AX_S32 AX_ISP_RegisterAwbLibCallback(AX_U8 pipe, AX_ISP_AWB_REGFUNCS_T *pRegisters);
  173. AX_S32 AX_ISP_UnRegisterAwbLibCallback(AX_U8 pipe);
  174. AX_S32 AX_ISP_RegisterLscLibCallback(AX_U8 pipe, void *pRegisters);
  175. AX_S32 AX_ISP_UnRegisterLscLibCallback(AX_U8 pipe);
  176. AX_S32 AX_ISP_LoadBinParams(AX_U8 pipe, const AX_CHAR *pFileName);
  177. AX_S32 AX_ISP_Open(AX_U8 pipe);
  178. AX_S32 AX_ISP_Close(AX_U8 pipe);
  179. AX_S32 AX_ISP_Run(AX_U8 pipe);
  180. AX_S32 AX_ISP_GetIRQTimeOut(AX_U8 pipe, AX_IRQ_TYPE_E nIrqType, AX_U32 nTimeOutMs);
  181. AX_S32 AX_ISP_SetPubAttr(AX_U8 pipe, AX_ISP_PUB_ATTR_T *pIspPubAttr);
  182. AX_S32 AX_ISP_GetPubAttr(AX_U8 pipe, AX_ISP_PUB_ATTR_T *pIspPubAttr);
  183. AX_S32 AX_ISP_GetVersion(AX_U8 pipe, AX_ISP_VERSION_T *pIspVersion);
  184. #ifdef __cplusplus
  185. }
  186. #endif
  187. #endif //_AX_ISP_API_H_