stfmod_isp_dec.h 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. /**
  2. ******************************************************************************
  3. * @file stfmod_isp_dec.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_DEC_H__
  21. #define __STFMOD_ISP_DEC_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_dec_rdma.h"
  28. #include "Modules/stfmod_isp_crop.h"
  29. #include "stflib_isp_pipeline.h"
  30. /* raw decimation module parameters structure */
  31. //-----------------------------------------------------------------------------
  32. // Define initial values
  33. #define ISP_DEF_DEC_H_PERIOD (0)
  34. #define ISP_DEF_DEC_H_KEEP (0)
  35. #define ISP_DEF_DEC_V_PERIOD (0)
  36. #define ISP_DEF_DEC_V_KEEP (0)
  37. #pragma pack(push, 1)
  38. typedef enum _EN_DEC_UPDATE {
  39. EN_DEC_UPDATE_NONE = 0x00,
  40. EN_DEC_UPDATE_DECIMATION = 0x01,
  41. EN_DEC_UPDATE_ALL = (EN_DEC_UPDATE_DECIMATION),
  42. } EN_DEC_UPDATE, *PEN_DEC_UPDATE;
  43. typedef struct _ST_MOD_DEC_SETTING {
  44. //-------------------------------------------------------------------------
  45. // This section parameters value is assign from setting file.
  46. STF_BOOL8 bEnable; /** Enable/Disable DEC module. */
  47. STF_U8 u8HPeriod; /** Horizontal period. (zero base) */
  48. STF_U8 u8HKeep; /** Horizontal keep. (zero base) */
  49. STF_U8 u8VPeriod; /** Vertical period. (zero base) */
  50. STF_U8 u8VKeep; /** Vertical keep. (zero base) */
  51. } ST_MOD_DEC_SETTING, *PST_MOD_DEC_SETTING;
  52. typedef struct _ST_MOD_DEC_INFO {
  53. ST_SIZE stOutputSize; /** Output image size of DEC module. */
  54. } ST_MOD_DEC_INFO, *PST_MOD_DEC_INFO;
  55. typedef struct _ST_DEC_PARAM {
  56. ST_MOD_DEC_SETTING stSetting; /** Module DEC setting file parameters. */
  57. //-------------------------------------------------------------------------
  58. // This section parameters is internal using.
  59. ST_MOD_DEC_INFO stInfo; /** Module DEC output information parameters. */
  60. STF_BOOL8 bSetup; /** Flag set if the module setup has been completed. */
  61. STF_BOOL8 bUpdate; /** Enable/Disable program DEC module register. */
  62. STF_U32 u32UpdateRequest; /** Flag to indicate that this module update has been requested. */
  63. } ST_DEC_PARAM, *PST_DEC_PARAM;
  64. #define ST_MOD_DEC_SETTING_LEN (sizeof(ST_MOD_DEC_SETTING))
  65. #define ST_MOD_DEC_INFO_LEN (sizeof(ST_MOD_DEC_INFO))
  66. #define ST_MOD_DEC_GET_PARAM_LEN (ST_MOD_DEC_SETTING_LEN + ST_MOD_DEC_INFO_LEN)
  67. #define ST_MOD_DEC_SET_PARAM_LEN (ST_MOD_DEC_SETTING_LEN)
  68. #define ST_DEC_PARAM_SIZE (sizeof(ST_DEC_PARAM))
  69. #define ST_DEC_PARAM_LEN (ST_DEC_PARAM_SIZE)
  70. typedef struct _ST_ISP_MOD_DEC {
  71. #if defined(VIRTUAL_IO_MAPPING)
  72. STF_VOID *pPipeline; /** Pointer to Pipeline. */
  73. #endif //VIRTUAL_IO_MAPPING
  74. STF_VOID *pIspCtx; /** Pointer to ISP context. */
  75. STF_U32 u32Id; /** Module ID. */
  76. STF_CHAR szName[16]; /** Module Name. */
  77. CI_MEM_PARAM *pstDecRdmaBuf; /** DEC's DMA buffer pointer for RDMA. */
  78. #if defined(SUPPORT_MULTI_ISP)
  79. ST_ISP_DEC_RDMA *pstIspDecRdma; /** DEC's RDMA structure pointer that include ISP index.*/
  80. #endif //SUPPORT_MULTI_ISP
  81. ST_DEC_RDMA *pstDecRdma; /** DEC's RDMA structure pointer.*/
  82. ST_DEC_PARAM *pstDecParam; /** DEC's parameters structure pointer. */
  83. STF_BOOL8 bRegistered; /** Module register in pipeline. */
  84. STF_S32 (*Init)(STF_VOID *pIspCtx, STF_U32 *pNextRdma);
  85. STF_S32 (*LoadBinParam)(STF_VOID *pIspCtx, STF_U8 *pu8ParamBuf, STF_U16 u16ParamSize);
  86. STF_S32 (*LoadBinClbrt)(STF_VOID *pIspCtx);
  87. STF_S32 (*Enable)(STF_VOID *pIspCtx, STF_BOOL8 bEnable);
  88. STF_BOOL8 (*IsEnable)(STF_VOID *pIspCtx);
  89. STF_S32 (*Update)(STF_VOID *pIspCtx, STF_BOOL8 bUpdate);
  90. STF_BOOL8 (*IsUpdate)(STF_VOID *pIspCtx);
  91. STF_S32 (*Registered)(STF_VOID *pIspCtx, STF_BOOL8 bRegistered);
  92. STF_BOOL8 (*IsRegistered)(STF_VOID *pIspCtx);
  93. STF_S32 (*UpdateReg)(STF_VOID *pIspCtx);
  94. STF_S32 (*SetReg)(STF_VOID *pIspCtx);
  95. STF_S32 (*SetNext)(STF_VOID *pIspCtx, STF_U32 *pNextRdma);
  96. STF_S32 (*FreeResource)(STF_VOID *pIspCtx);
  97. STF_S32 (*GetIqParam)(STF_VOID *pIspCtx, STF_VOID *pParamBuf, STF_U16 *pu16ParamSize);
  98. STF_S32 (*SetIqParam)(STF_VOID *pIspCtx, STF_VOID *pParamBuf, STF_U16 u16ParamSize);
  99. } ST_ISP_MOD_DEC, *PST_ISP_MOD_DEC;
  100. #pragma pack(pop)
  101. /* raw decimation module parameters interface */
  102. //-----------------------------------------------------------------------------
  103. extern
  104. STF_S32 STFMOD_ISP_DEC_InitRdma(
  105. ST_DEC_RDMA *pstDecRdma,
  106. ST_DEC_PARAM *pstDecParam,
  107. STF_U32 *pNextRdma
  108. );
  109. extern
  110. STF_S32 STFMOD_ISP_DEC_UpdateRdma(
  111. ST_DEC_RDMA *pstDecRdma,
  112. ST_DEC_PARAM *pstDecParam
  113. );
  114. extern
  115. STF_S32 STFMOD_ISP_DEC_SetNextRdma(
  116. ST_DEC_RDMA *pstDecRdma,
  117. STF_U32 *pNextRdma
  118. );
  119. //-----------------------------------------------------------------------------
  120. extern
  121. STF_S32 STFMOD_ISP_DEC_SetEnable(
  122. ST_ISP_MOD_DEC *pstModDec,
  123. STF_BOOL8 bEnable
  124. );
  125. extern
  126. STF_S32 STFMOD_ISP_DEC_SetUpdate(
  127. ST_ISP_MOD_DEC *pstModDec,
  128. STF_BOOL8 bUpdate
  129. );
  130. extern
  131. STF_S32 STFMOD_ISP_DEC_SetDecimation(
  132. ST_ISP_MOD_DEC *pstModDec,
  133. STF_U8 u8HPeriod,
  134. STF_U8 u8HKeep,
  135. STF_U8 u8VPeriod,
  136. STF_U8 u8VKeep
  137. );
  138. //-----------------------------------------------------------------------------
  139. extern
  140. STF_S32 STFMOD_ISP_DEC_Init(
  141. STF_VOID *pIspCtx,
  142. STF_U32 *pNextRdma
  143. );
  144. extern
  145. STF_S32 STFMOD_ISP_DEC_LoadBinParam(
  146. STF_VOID *pIspCtx,
  147. STF_U8 *pu8ParamBuf,
  148. STF_U16 u16ParamSize
  149. );
  150. extern
  151. STF_S32 STFMOD_ISP_DEC_LoadBinClbrt(
  152. STF_VOID *pIspCtx
  153. );
  154. extern
  155. STF_S32 STFMOD_ISP_DEC_Enable(
  156. STF_VOID *pIspCtx,
  157. STF_BOOL8 bEnable
  158. );
  159. extern
  160. STF_BOOL8 STFMOD_ISP_DEC_IsEnable(
  161. STF_VOID *pIspCtx
  162. );
  163. extern
  164. STF_S32 STFMOD_ISP_DEC_Update(
  165. STF_VOID *pIspCtx,
  166. STF_BOOL8 bUpdate
  167. );
  168. extern
  169. STF_BOOL8 STFMOD_ISP_DEC_IsUpdate(
  170. STF_VOID *pIspCtx
  171. );
  172. extern
  173. STF_S32 STFMOD_ISP_DEC_Registered(
  174. STF_VOID *pIspCtx,
  175. STF_BOOL8 bRegistered
  176. );
  177. extern
  178. STF_BOOL8 STFMOD_ISP_DEC_IsRegistered(
  179. STF_VOID *pIspCtx
  180. );
  181. extern
  182. STF_S32 STFMOD_ISP_DEC_UpdateReg(
  183. STF_VOID *pIspCtx
  184. );
  185. extern
  186. STF_S32 STFMOD_ISP_DEC_SetReg(
  187. STF_VOID *pIspCtx
  188. );
  189. extern
  190. STF_S32 STFMOD_ISP_DEC_SetNext(
  191. STF_VOID *pIspCtx,
  192. STF_U32 *pNextRdma
  193. );
  194. extern
  195. STF_S32 STFMOD_ISP_DEC_FreeResource(
  196. STF_VOID *pIspCtx
  197. );
  198. extern
  199. STF_S32 STFMOD_ISP_DEC_GetIqParam(
  200. STF_VOID *pIspCtx,
  201. STF_VOID *pParamBuf,
  202. STF_U16 *pu16ParamSize
  203. );
  204. extern
  205. STF_S32 STFMOD_ISP_DEC_SetIqParam(
  206. STF_VOID *pIspCtx,
  207. STF_VOID *pParamBuf,
  208. STF_U16 u16ParamSize
  209. );
  210. //-----------------------------------------------------------------------------
  211. extern
  212. STF_S32 STFMOD_ISP_DEC_Create(
  213. STF_VOID *pPipeline
  214. );
  215. extern
  216. STF_S32 STFMOD_ISP_DEC_Destroy(
  217. STF_VOID *pPipeline
  218. );
  219. //-----------------------------------------------------------------------------
  220. #ifdef __cplusplus
  221. }
  222. #endif
  223. #endif //__STFMOD_ISP_DEC_H__