ax_isp_3a_plus.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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_PLUS_H_
  11. #define _AX_ISP_3A_PLUS_H_
  12. #include "ax_isp_api.h"
  13. #include "ax_isp_iq_api.h"
  14. /////////////////////////////////////////////////////////
  15. /* discard this API*/
  16. ////////////////////////////////////////////////////////
  17. /* LSC Grid & Hist */
  18. #define AX_LSC_GRID_ROW (64)
  19. #define AX_LSC_GRID_COL (48)
  20. #define AX_LSC_GRID_CHN (4)
  21. #define AX_LSC_HIST_LINEAR_BIN (256)
  22. #define AX_LSC_HIST_LOG_BIN (16)
  23. typedef struct {
  24. AX_U32 uGridSum[AX_LSC_GRID_CHN];
  25. AX_U16 uGridNum[AX_LSC_GRID_CHN];
  26. } AX_LSC_GRID_STATS;
  27. typedef struct {
  28. AX_U8 uValid;
  29. AX_U32 uZoneRowSize;
  30. AX_U32 uZoneColumnSize;
  31. AX_U8 uChnNum;
  32. AX_LSC_GRID_STATS sGridStats[AX_LSC_GRID_ROW * AX_LSC_GRID_COL];
  33. } AX_LSC_GRID_STAT_T;
  34. /**********************************************************************************
  35. * CLC
  36. * input (AX_ISP_CLC_INPUT_INFO_T) --> clc_alg --> output (AX_ISP_CLC_RESULT_T)
  37. **********************************************************************************/
  38. typedef struct {
  39. AX_U32 SnsId;
  40. AX_SNS_HDR_MODE_E eSnsMode;
  41. AX_BAYER_PATTERN_E eBayerPattern;
  42. AX_U32 uFrameRate;
  43. } AX_ISP_CLC_INITATTR_T;
  44. typedef struct {
  45. AX_U32 uTotalGain[AX_HDR_CHN_NUM]; /* Total Gain value. Accuracy: U22.10 Range: [0x400, 0xFFFFFFFF]*/
  46. AX_U32 uLux; /* Accuracy: U22.10 Range: [0, 0xFFFFFFFF]
  47. * fLux = (MeanLuma*LuxK) / (AGain*Dgain*IspGain)
  48. * where LuxK is a calibrated factor */
  49. AX_U32 uColorTemp; /* = CCT * 1000.0f, CCT:[1000, 20000] Color Temperature */
  50. AX_U32 uSatDiscnt; /* Saturation Used for CLC or LSC Interpolation
  51. * Percetage * 1000.0f, e.g. 100000 for 100%
  52. * If Not Used, Just return 100000 */
  53. } AX_ISP_CLC_INPUT_INFO_T;
  54. typedef struct {
  55. /* transformation matrices corresponding to 16 different hue */
  56. AX_ISP_IQ_CLC_XCM_T sClcMatrixList;
  57. } AX_ISP_CLC_RESULT_T;
  58. typedef struct {
  59. AX_S32(*pfnClc_Init)(AX_U8 pipe, AX_ISP_CLC_INITATTR_T *pClcInitParam);
  60. AX_S32(*pfnClc_Run)(AX_U8 pipe, AX_ISP_CLC_INPUT_INFO_T *pClcInputInfo, AX_ISP_CLC_RESULT_T *pClcResult);
  61. AX_S32(*pfnClc_Exit)(AX_U8 pipe);
  62. } AX_ISP_CLC_REGFUNCS_T;
  63. /**********************************************************************************
  64. * LSC
  65. * input (AX_ISP_LSC_INPUT_INFO_T) --> lsc_alg --> output (AX_ISP_LSC_RESULT_T)
  66. **********************************************************************************/
  67. typedef struct {
  68. AX_U32 SnsId;
  69. AX_SNS_HDR_MODE_E eSnsMode;
  70. AX_BAYER_PATTERN_E eBayerPattern;
  71. AX_U32 uFrameRate;
  72. } AX_ISP_LSC_INITATTR_T;
  73. typedef struct {
  74. AX_U32 uSeqNum; /* frame seq num */
  75. AX_U64 uTimestamp; /* frame timestamp */
  76. AX_LSC_GRID_STAT_T sLscGridStat;
  77. } AX_ISP_LSC_STAT_INFO_T;
  78. typedef struct {
  79. AX_U32 uTotalGain[AX_HDR_CHN_NUM]; /* Total Gain value. Accuracy: U22.10 Range: [0x400, 0xFFFFFFFF]*/
  80. AX_U32 uLux; /* Accuracy: U22.10 Range: [0, 0xFFFFFFFF]
  81. * fLux = (MeanLuma*LuxK) / (AGain*Dgain*IspGain)
  82. * where LuxK is a calibrated factor */
  83. AX_U32 uColorTemp; /* = CCT * 1000.0f, CCT:[1000, 20000] Color Temperature */
  84. AX_U32 uSaturation; /* Saturation Used for CLC or LSC Interpolation
  85. * Percetage * 1000.0f, e.g. 100000 for 100%
  86. * If Not Used, Just return 100000 */
  87. AX_ISP_LSC_STAT_INFO_T sLscStat;
  88. } AX_ISP_LSC_INPUT_INFO_T;
  89. #define LSC_MESH_SIZE AX_ISP_LSC_MESH_SIZE_V * AX_ISP_LSC_MESH_SIZE_H
  90. typedef struct {
  91. AX_U32 rr_gain_lut[LSC_MESH_SIZE];
  92. AX_U32 gr_gain_lut[LSC_MESH_SIZE];
  93. AX_U32 gb_gain_lut[LSC_MESH_SIZE];
  94. AX_U32 bb_gain_lut[LSC_MESH_SIZE];
  95. } AX_ISP_LSC_TABLE_T;
  96. typedef struct {
  97. AX_S32(*pfnLsc_Init)(AX_U8 pipe, AX_ISP_LSC_TABLE_T *tLscResult);
  98. AX_S32(*pfnLsc_Run)(AX_U8 pipe, AX_ISP_LSC_INPUT_INFO_T tLscInputInfo, AX_BOOL *bUpdateMeshRegs, AX_ISP_LSC_TABLE_T *pLscResult);
  99. AX_S32(*pfnLsc_Exit)(AX_U8 pipe);
  100. } AX_ISP_LSC_REGFUNCS_T;
  101. AX_S32 AX_ISP_IQ_GetLscStatus(AX_U8 pipe, AX_ISP_LSC_TABLE_T *pIspLscStatus);
  102. #endif //_AX_ISP_3A_PLUS_H_