stfmod_isp_cfa_ahd.h 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. /**
  2. ******************************************************************************
  3. * @file stfmod_isp_cfa_ahd.h
  4. * @author StarFive Isp Team
  5. * @version V1.0
  6. * @date 05/26/2020
  7. * @brief
  8. ******************************************************************************
  9. * @copy
  10. *
  11. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  12. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  13. * TIME. AS A RESULT, STARFIVE SHALL NOT BE HELD LIABLE FOR ANY
  14. * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  15. * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  16. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  17. *
  18. * Copyright (C) 2019 - 2022 StarFive Technology Co., Ltd.
  19. */
  20. #ifndef __STFMOD_ISP_CFA_AHD_H__
  21. #define __STFMOD_ISP_CFA_AHD_H__
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. #include "stf_include.h"
  26. #include "ci/ci_api_structs.h"
  27. #include "registers/stf_isp_cfa_ahd_rdma.h"
  28. #include "stflib_isp_pipeline.h"
  29. /* demosaic module parameters structure */
  30. //-----------------------------------------------------------------------------
  31. // Define initial values
  32. #if 0
  33. #define ISP_DEF_CFA_HV_WIDTH (4)
  34. #define ISP_DEF_CFA_CROSS_COV (3)
  35. #elif 1
  36. // 20201219_v01
  37. #define ISP_DEF_CFA_HV_WIDTH (2)
  38. #define ISP_DEF_CFA_CROSS_COV (3)
  39. #endif
  40. #pragma pack(push, 1)
  41. typedef enum _EN_CFA_UPDATE {
  42. EN_CFA_UPDATE_NONE = 0x00,
  43. EN_CFA_UPDATE_MODE = 0x01,
  44. EN_CFA_UPDATE_ALL = (EN_CFA_UPDATE_MODE),
  45. } EN_CFA_UPDATE, *PEN_CFA_UPDATE;
  46. typedef struct _ST_MOD_CFA_SETTING {
  47. //-------------------------------------------------------------------------
  48. // This section parameters value is assign from setting file.
  49. STF_BOOL8 bEnable; /** Enable/Disable CFA module. */
  50. STF_U8 u8HvWidth; /** HV_WIDTH = 2^u8HvWidth, range 0 - 15. */
  51. STF_U8 u8CrossCov; /** Cross covariance weighting, range 0 - 3. */
  52. } ST_MOD_CFA_SETTING, *PST_MOD_CFA_SETTING;
  53. typedef struct _ST_CFA_PARAM {
  54. ST_MOD_CFA_SETTING stSetting; /** Module CFA setting file parameters. */
  55. //-------------------------------------------------------------------------
  56. // This section parameters is internal using.
  57. STF_BOOL8 bSetup; /** Flag set if the module setup has been completed. */
  58. STF_BOOL8 bUpdate; /** Enable/Disable program CFA module register. */
  59. STF_U32 u32UpdateRequest; /** Flag to indicate that this module update has been requested. */
  60. } ST_CFA_PARAM, *PST_CFA_PARAM;
  61. #define ST_MOD_CFA_SETTING_LEN (sizeof(ST_MOD_CFA_SETTING))
  62. #define ST_MOD_CFA_GET_PARAM_LEN (ST_MOD_CFA_SETTING_LEN)
  63. #define ST_MOD_CFA_SET_PARAM_LEN (ST_MOD_CFA_SETTING_LEN)
  64. #define ST_CFA_PARAM_SIZE (sizeof(ST_CFA_PARAM))
  65. #define ST_CFA_PARAM_LEN (ST_CFA_PARAM_SIZE)
  66. typedef struct _ST_ISP_MOD_CFA {
  67. #if defined(VIRTUAL_IO_MAPPING)
  68. STF_VOID *pPipeline; /** Pointer to Pipeline. */
  69. #endif //VIRTUAL_IO_MAPPING
  70. STF_VOID *pIspCtx; /** Pointer to ISP context. */
  71. STF_U32 u32Id; /** Module ID. */
  72. STF_CHAR szName[16]; /** Module Name. */
  73. CI_MEM_PARAM *pstCfaRdmaBuf; /** CFA's DMA buffer pointer for RDMA. */
  74. #if defined(SUPPORT_MULTI_ISP)
  75. ST_ISP_CFA_RDMA *pstIspCfaRdma; /** CFA's RDMA structure pointer that include the ISP index.*/
  76. #endif //SUPPORT_MULTI_ISP
  77. ST_CFA_RDMA *pstCfaRdma; /** CFA's RDMA structure pointer.*/
  78. ST_CFA_PARAM *pstCfaParam; /** CFA's parameters structure pointer. */
  79. STF_BOOL8 bRegistered; /** Module register in pipeline. */
  80. STF_S32 (*Init)(STF_VOID *pIspCtx, STF_U32 *pNextRdma);
  81. STF_S32 (*LoadBinParam)(STF_VOID *pIspCtx, STF_U8 *pu8ParamBuf, STF_U16 u16ParamSize);
  82. STF_S32 (*LoadBinClbrt)(STF_VOID *pIspCtx);
  83. STF_S32 (*Enable)(STF_VOID *pIspCtx, STF_BOOL8 bEnable);
  84. STF_BOOL8 (*IsEnable)(STF_VOID *pIspCtx);
  85. STF_S32 (*Update)(STF_VOID *pIspCtx, STF_BOOL8 bUpdate);
  86. STF_BOOL8 (*IsUpdate)(STF_VOID *pIspCtx);
  87. STF_S32 (*Registered)(STF_VOID *pIspCtx, STF_BOOL8 bRegistered);
  88. STF_BOOL8 (*IsRegistered)(STF_VOID *pIspCtx);
  89. STF_S32 (*UpdateReg)(STF_VOID *pIspCtx);
  90. STF_S32 (*SetReg)(STF_VOID *pIspCtx);
  91. STF_S32 (*SetNext)(STF_VOID *pIspCtx, STF_U32 *pNextRdma);
  92. STF_S32 (*FreeResource)(STF_VOID *pIspCtx);
  93. STF_S32 (*GetIqParam)(STF_VOID *pIspCtx, STF_VOID *pParamBuf, STF_U16 *pu16ParamSize);
  94. STF_S32 (*SetIqParam)(STF_VOID *pIspCtx, STF_VOID *pParamBuf, STF_U16 u16ParamSize);
  95. } ST_ISP_MOD_CFA, *PST_ISP_MOD_CFA;
  96. #pragma pack(pop)
  97. /* demosaic module parameters interface */
  98. //-----------------------------------------------------------------------------
  99. extern
  100. STF_S32 STFMOD_ISP_CFA_InitRdma(
  101. ST_CFA_RDMA *pstCfaRdma,
  102. ST_CFA_PARAM *pstCfaParam,
  103. STF_U32 *pNextRdma
  104. );
  105. extern
  106. STF_S32 STFMOD_ISP_CFA_UpdateRdma(
  107. ST_CFA_RDMA *pstCfaRdma,
  108. ST_CFA_PARAM *pstCfaParam
  109. );
  110. extern
  111. STF_S32 STFMOD_ISP_CFA_SetNextRdma(
  112. ST_CFA_RDMA *pstCfaRdma,
  113. STF_U32 *pNextRdma
  114. );
  115. //-----------------------------------------------------------------------------
  116. extern
  117. STF_S32 STFMOD_ISP_CFA_SetEnable(
  118. ST_ISP_MOD_CFA *pstModCfa,
  119. STF_BOOL8 bEnable
  120. );
  121. extern
  122. STF_S32 STFMOD_ISP_CFA_SetUpdate(
  123. ST_ISP_MOD_CFA *pstModCfa,
  124. STF_BOOL8 bUpdate
  125. );
  126. extern
  127. STF_S32 STFMOD_ISP_CFA_SetMode(
  128. ST_ISP_MOD_CFA *pstModCfa,
  129. STF_U8 u8HvWidth,
  130. STF_U8 u8CrossCov
  131. );
  132. extern
  133. STF_S32 STFMOD_ISP_CFA_SetHvWidth(
  134. ST_ISP_MOD_CFA *pstModCfa,
  135. STF_U8 u8HvWidth
  136. );
  137. extern
  138. STF_S32 STFMOD_ISP_CFA_SetCrossCovWeight(
  139. ST_ISP_MOD_CFA *pstModCfa,
  140. STF_U8 u8CrossCov
  141. );
  142. //-----------------------------------------------------------------------------
  143. extern
  144. STF_S32 STFMOD_ISP_CFA_Init(
  145. STF_VOID *pIspCtx,
  146. STF_U32 *pNextRdma
  147. );
  148. extern
  149. STF_S32 STFMOD_ISP_CFA_LoadBinParam(
  150. STF_VOID *pIspCtx,
  151. STF_U8 *pu8ParamBuf,
  152. STF_U16 u16ParamSize
  153. );
  154. extern
  155. STF_S32 STFMOD_ISP_CFA_LoadBinClbrt(
  156. STF_VOID *pIspCtx
  157. );
  158. extern
  159. STF_S32 STFMOD_ISP_CFA_Enable(
  160. STF_VOID *pIspCtx,
  161. STF_BOOL8 bEnable
  162. );
  163. extern
  164. STF_BOOL8 STFMOD_ISP_CFA_IsEnable(
  165. STF_VOID *pIspCtx
  166. );
  167. extern
  168. STF_S32 STFMOD_ISP_CFA_Update(
  169. STF_VOID *pIspCtx,
  170. STF_BOOL8 bUpdate
  171. );
  172. extern
  173. STF_BOOL8 STFMOD_ISP_CFA_IsUpdate(
  174. STF_VOID *pIspCtx
  175. );
  176. extern
  177. STF_S32 STFMOD_ISP_CFA_Registered(
  178. STF_VOID *pIspCtx,
  179. STF_BOOL8 bRegistered
  180. );
  181. extern
  182. STF_BOOL8 STFMOD_ISP_CFA_IsRegistered(
  183. STF_VOID *pIspCtx
  184. );
  185. extern
  186. STF_S32 STFMOD_ISP_CFA_UpdateReg(
  187. STF_VOID *pIspCtx
  188. );
  189. extern
  190. STF_S32 STFMOD_ISP_CFA_SetReg(
  191. STF_VOID *pIspCtx
  192. );
  193. extern
  194. STF_S32 STFMOD_ISP_CFA_SetNext(
  195. STF_VOID *pIspCtx,
  196. STF_U32 *pNextRdma
  197. );
  198. extern
  199. STF_S32 STFMOD_ISP_CFA_FreeResource(
  200. STF_VOID *pIspCtx
  201. );
  202. extern
  203. STF_S32 STFMOD_ISP_CFA_GetIqParam(
  204. STF_VOID *pIspCtx,
  205. STF_VOID *pParamBuf,
  206. STF_U16 *pu16ParamSize
  207. );
  208. extern
  209. STF_S32 STFMOD_ISP_CFA_SetIqParam(
  210. STF_VOID *pIspCtx,
  211. STF_VOID *pParamBuf,
  212. STF_U16 u16ParamSize
  213. );
  214. //-----------------------------------------------------------------------------
  215. extern
  216. STF_S32 STFMOD_ISP_CFA_Create(
  217. STF_VOID *pPipeline
  218. );
  219. extern
  220. STF_S32 STFMOD_ISP_CFA_Destroy(
  221. STF_VOID *pPipeline
  222. );
  223. //-----------------------------------------------------------------------------
  224. #ifdef __cplusplus
  225. }
  226. #endif
  227. #endif //__STFMOD_ISP_CFA_AHD_H__