stfctl_isp_ycrv.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  1. /**
  2. ******************************************************************************
  3. * @file stfctl_isp_ycrv.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 __STFCTL_ISP_YCRV_H__
  21. #define __STFCTL_ISP_YCRV_H__
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25. #include "Modules/stfmod_isp_ycrv.h"
  26. //#define ENABLE_YCRV_EQUAL_SUPPORT
  27. //#define ENABLE_YCRV_MIN_CRV_MAX_LINE_LMTD_SUPPORT
  28. /* Y curve control parameters structure */
  29. //-----------------------------------------------------------------------------
  30. // Define initial values
  31. #if 0
  32. #define ISP_DEF_YCRV_UPDATE_SPEED (256 * 0.5)
  33. #elif 1
  34. #define ISP_DEF_YCRV_UPDATE_SPEED (256 * 0.125)
  35. #endif
  36. #if 0
  37. #define ISP_DEF_YCRV_GENERATE_METHOD (EN_YCRV_METHOD_EQUALIZATION)
  38. #else
  39. #define ISP_DEF_YCRV_GENERATE_METHOD (EN_YCRV_METHOD_MIN_MAX_CRV_LMTD)
  40. #endif
  41. // For minimum and maximum limit Y curve.
  42. #if 0
  43. #define ISP_DEF_YCRV_MIN_MAX_LMTD_LIMIT_MAX (0x0100)
  44. #define ISP_DEF_YCRV_MIN_MAX_LMTD_LIMIT_MIN (0x0100)
  45. #define ISP_DEF_YCRV_MIN_MAX_LMTD_START_LEVEL (0x0000)
  46. #define ISP_DEF_YCRV_MIN_MAX_LMTD_END_LEVEL (0x0100)
  47. #define ISP_DEF_YCRV_MIN_MAX_LMTD_START_PERIOD (12)
  48. #define ISP_DEF_YCRV_MIN_MAX_LMTD_END_PERIOD (4)
  49. #elif 1
  50. #define ISP_DEF_YCRV_MIN_MAX_LMTD_LIMIT_MAX (0x014D)
  51. #define ISP_DEF_YCRV_MIN_MAX_LMTD_LIMIT_MIN (0x009A)
  52. #define ISP_DEF_YCRV_MIN_MAX_LMTD_START_LEVEL (0x0000)
  53. #define ISP_DEF_YCRV_MIN_MAX_LMTD_END_LEVEL (0x0100)
  54. #define ISP_DEF_YCRV_MIN_MAX_LMTD_START_PERIOD (7)
  55. #define ISP_DEF_YCRV_MIN_MAX_LMTD_END_PERIOD (4)
  56. #endif
  57. #if defined(ENABLE_YCRV_EQUAL_SUPPORT)
  58. // For equalization Y curve.
  59. #define ISP_DEF_YCRV_EQUAL_ENABLE_GLOBAL_TONE_MAPPING (STF_TRUE)
  60. #if 0
  61. #define ISP_DEF_YCRV_EQUAL_MAX_DARK_SUPPRESS (0.10)
  62. #define ISP_DEF_YCRV_EQUAL_MAX_BRIGHT_SUPPRESS (0.15)
  63. #define ISP_DEF_YCRV_EQUAL_DARK_SUPPRESS_RATIO (0.03)
  64. #define ISP_DEF_YCRV_EQUAL_BRIGHT_SUPPRESS_RATIO (0.01)
  65. #elif 0
  66. #define ISP_DEF_YCRV_EQUAL_MAX_DARK_SUPPRESS (0.07)
  67. #define ISP_DEF_YCRV_EQUAL_MAX_BRIGHT_SUPPRESS (0.10)
  68. #define ISP_DEF_YCRV_EQUAL_DARK_SUPPRESS_RATIO (0.01)
  69. #define ISP_DEF_YCRV_EQUAL_BRIGHT_SUPPRESS_RATIO (0.01)
  70. #elif 1
  71. #define ISP_DEF_YCRV_EQUAL_MAX_DARK_SUPPRESS (0.15)
  72. #define ISP_DEF_YCRV_EQUAL_MAX_BRIGHT_SUPPRESS (0.15)
  73. #define ISP_DEF_YCRV_EQUAL_DARK_SUPPRESS_RATIO (0.01)
  74. #define ISP_DEF_YCRV_EQUAL_BRIGHT_SUPPRESS_RATIO (0.01)
  75. #endif
  76. #define ISP_DEF_YCRV_EQUAL_OVERSHOT_THRESHOLD (2.0)
  77. #define ISP_DEF_YCRV_EQUAL_WDR_CEILING (1.1)
  78. #define ISP_DEF_YCRV_EQUAL_WDR_FLOOR (1.0)
  79. #endif //#if defined(ENABLE_YCRV_EQUAL_SUPPORT)
  80. #if defined(ENABLE_YCRV_MIN_CRV_MAX_LINE_LMTD_SUPPORT)
  81. // For minimum curve and maximum line limit Y curve.
  82. #if 1
  83. // 20201226_v01
  84. #define ISP_DEF_YCRV_MIN_CRV_MAX_LINE_LMTD_LIMIT_MAX (0x0100 * 1.5)
  85. #define ISP_DEF_YCRV_MIN_CRV_MAX_LINE_LMTD_LIMIT_MIN (0x0100 * 1.0)
  86. #define ISP_DEF_YCRV_MIN_CRV_MAX_LINE_LMTD_SLOPE (0x0100 * (1.0 / 16.0))
  87. #elif 1
  88. // 20201228_v01
  89. #define ISP_DEF_YCRV_MIN_CRV_MAX_LINE_LMTD_LIMIT_MAX (0x0100 * 1.25)
  90. #define ISP_DEF_YCRV_MIN_CRV_MAX_LINE_LMTD_LIMIT_MIN (0x0100 * 1.0)
  91. #define ISP_DEF_YCRV_MIN_CRV_MAX_LINE_LMTD_SLOPE (0x0100 * (1.0 / 16.0))
  92. #endif
  93. #endif //#if defined(ENABLE_YCRV_MIN_CRV_MAX_LINE_LMTD_SUPPORT)
  94. // For minimum and maximum curve limit Y curve.
  95. #if 0
  96. // 20210103_v01
  97. #define ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MAX (1.0)
  98. #define ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MIN (1.0)
  99. #define ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MAX_START (2.0)
  100. #define ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MIN_START (0.8)
  101. #define ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MAX_SLOPE ((ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MAX - ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MAX_START) / 20.0) // (-0.05)
  102. #define ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MIN_SLOPE ((ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MIN - ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MIN_START) / 4.0) // (0.05)
  103. #elif 1
  104. // 20210106_v01
  105. #define ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MAX (1.0)
  106. #define ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MIN (1.0)
  107. #define ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MAX_START (2.0)
  108. #define ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MIN_START (0.2)
  109. #define ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MAX_SLOPE ((ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MAX - ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MAX_START) / 20.0) // (-0.05)
  110. #define ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MIN_SLOPE ((ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MIN - ISP_DEF_YCRV_MIN_MAX_CRV_LMTD_LIMIT_MIN_START) / 4.0) // (0.2)
  111. #endif
  112. #pragma pack(push, 1)
  113. typedef enum _EN_YCRV_METHOD {
  114. EN_YCRV_METHOD_MIN_MAX_LMTD_WITH_PERIOD = 0,
  115. #if defined(ENABLE_YCRV_EQUAL_SUPPORT)
  116. EN_YCRV_METHOD_EQUALIZATION,
  117. #endif //#if defined(ENABLE_YCRV_EQUAL_SUPPORT)
  118. #if defined(ENABLE_YCRV_MIN_CRV_MAX_LINE_LMTD_SUPPORT)
  119. EN_YCRV_METHOD_MIN_CRV_MAX_LINE_LMTD, /** MAX curve slope is 0. */
  120. #endif //#if defined(ENABLE_YCRV_MIN_CRV_MAX_LINE_LMTD_SUPPORT)
  121. EN_YCRV_METHOD_MIN_MAX_CRV_LMTD,
  122. EN_YCRV_METHOD_MAX
  123. } EN_YCRV_METHOD, *PEN_YCRV_METHOD;
  124. typedef struct _ST_YHIST_PNT {
  125. STF_U8 u8Index; /** Bin index of Y histogram. */
  126. STF_U32 u32YHist; /** Backup the (YUV domain) Y histogram from statistical collection buffer. */
  127. } ST_YHIST_PNT, *PST_YHIST_PNT;
  128. typedef struct _ST_YHIST_MIN_MAX_LMTD_W_PER {
  129. STF_U16 u16MaxLimit; /** Y histogram maximum limit value. */
  130. STF_U16 u16MinLimit; /** Y histogram minimum limit value. */
  131. STF_U16 u16StartLevel; /** Y histogram start level value. */
  132. STF_U16 u16EndLevel; /** Y histogram end level value. */
  133. STF_U8 u8StartPeriod; /** u8StartPeriod indicates how many bin will be limited to the start level value at the beginning of the histogram. */
  134. STF_U8 u8EndPeriod; /** u8EndPeriod indicates how many bin will be limited to the end level value at the end of the histogram. */
  135. } ST_YHIST_MIN_MAX_LMTD_W_PER, *PST_YHIST_MIN_MAX_LMTD_W_PER;
  136. #if defined(ENABLE_YCRV_EQUAL_SUPPORT)
  137. typedef struct _ST_YHIST_EQUAL_PARAM {
  138. STF_BOOL8 bEnableGlobalToneMapping; /** Enable the global tone mapping feature. */
  139. STF_DOUBLE dMaxDarkSuppress; /** Maximum dark suppress ratio. */
  140. STF_DOUBLE dMaxBrightSuppress; /** Maximum bright suppress ratio. */
  141. STF_DOUBLE dDarkSuppressRatio; /** Desire dark suppress ratio. */
  142. STF_DOUBLE dBrightSuppressRatio; /** Desire bright suppress ratio. */
  143. STF_DOUBLE dOvershotThreshold; /** Overshot threshold. */
  144. STF_DOUBLE dWdrCeiling; /** WDR ceiling filter when bEnableGlobalToneMapping is enable. */
  145. STF_DOUBLE dWdrFloor; /** WDR floor filter when bEnableGlobalToneMapping is enable. */
  146. } ST_YHIST_EQUAL_PARAM, *PST_YHIST_EQUAL_PARAM;
  147. #endif //#if defined(ENABLE_YCRV_EQUAL_SUPPORT)
  148. #if defined(ENABLE_YCRV_MIN_CRV_MAX_LINE_LMTD_SUPPORT)
  149. typedef struct _ST_YHIST_MIN_CRV_MAX_LINE_LMTD {
  150. STF_U16 u16MaxLimit; /** Y histogram maximum limit value, format 0.8.8. */
  151. STF_U16 u16MinLimit; /** Y histogram minimum curve limit value, format 0.8.8. */
  152. STF_S16 s16Slope; /** Y histogram minimum curve slope, format 1.7.8. */
  153. } ST_YHIST_MIN_CRV_MAX_LINE_LMTD, *PST_YHIST_MIN_CRV_MAX_LINE_LMTD;
  154. #endif //#if defined(ENABLE_YCRV_MIN_CRV_MAX_LINE_LMTD_SUPPORT)
  155. typedef struct _ST_YHIST_MIN_MAX_CRV_LMTD {
  156. STF_DOUBLE dMaxLimit; /** Y histogram maximum curve limit value. */
  157. STF_DOUBLE dMinLimit; /** Y histogram minimum curve limit value. */
  158. STF_DOUBLE dMaxStart; /** Y histogram maximum curve start value. */
  159. STF_DOUBLE dMinStart; /** Y histogram minimum curve start value. */
  160. STF_DOUBLE dMaxSlope; /** Y histogram maximum curve slope value. */
  161. STF_DOUBLE dMinSlope; /** Y histogram minimum curve slope value. */
  162. } ST_YHIST_MIN_MAX_CRV_LMTD, *PST_YHIST_MIN_MAX_CRV_LMTD;
  163. typedef struct _ST_CTL_YCRV_SETTING {
  164. //-------------------------------------------------------------------------
  165. // This section parameters value is assign from setting file.
  166. STF_BOOL8 bEnable; /** Enable/Disable Y curve control. */
  167. STF_U16 u16UpdateSpeed; /** Y curve update speed, range 0 (lowest) - 256 (fastest). */
  168. STF_U8 u8Method; /** Y curve dynamic generate method. 0:EN_YCRV_METHOD_MIN_MAX_LMTD_WITH_PERIOD, 1:EN_YCRV_METHOD_EQUALIZATION, 2:EN_YCRV_METHOD_MIN_CRV_MAX_LINE_LMTD, 3:EN_YCRV_METHOD_MIN_MAX_CRV_LMTD. */
  169. ST_YHIST_MIN_MAX_LMTD_W_PER stYHistMinMaxLmtdWithPeriod; /** Y histogram min-maxed control parameters. */
  170. #if defined(ENABLE_YCRV_EQUAL_SUPPORT)
  171. ST_YHIST_EQUAL_PARAM stYHistEqualParam; /** Y histogram equalization control parameters. */
  172. #endif //#if defined(ENABLE_YCRV_EQUAL_SUPPORT)
  173. #if defined(ENABLE_YCRV_MIN_CRV_MAX_LINE_LMTD_SUPPORT)
  174. ST_YHIST_MIN_CRV_MAX_LINE_LMTD stYHistMinCrvMaxLineLmtd; /** Y histogram min-maxed curve control parameters. */
  175. #endif //#if defined(ENABLE_YCRV_MIN_CRV_MAX_LINE_LMTD_SUPPORT)
  176. ST_YHIST_MIN_MAX_CRV_LMTD stYHistMinMaxCrvLmtd; /** Y histogram min-maxed curve control parameters. */
  177. } ST_CTL_YCRV_SETTING, *PST_CTL_YCRV_SETTING;
  178. typedef struct _ST_CTL_YCRV_INFO {
  179. ST_YHIST_PNT stYHist[YCRV_PNT]; /** Backup the (YUV domain) Y histogram from statistical collection buffer. */
  180. ST_POINT stYCurveWoDamping[YCRV_MAX_PNT]; /** Y curve, this is a global tone mapping curve that do not have apply the update speed factor. */
  181. ST_POINT stYCurve[YCRV_MAX_PNT]; /** Y curve, this is a global tone mapping curve that have apply the update speed factor. */
  182. } ST_CTL_YCRV_INFO, *PST_CTL_YCRV_INFO;
  183. typedef struct _ST_CTL_YCRV_PARAM {
  184. ST_CTL_YCRV_SETTING stSetting; /** Control YCRV setting file parameters. */
  185. //-------------------------------------------------------------------------
  186. // This section parameters is internal using.
  187. ST_CTL_YCRV_INFO stInfo; /** Control YCRV output information parameters. */
  188. STF_U32 u32MinMaxYHist[YCRV_PNT]; /** Min-maxed Y histogram. */
  189. } ST_CTL_YCRV_PARAM, *PST_CTL_YCRV_PARAM;
  190. #define ST_CTL_YCRV_SETTING_LEN (sizeof(ST_CTL_YCRV_SETTING))
  191. #define ST_CTL_YCRV_INFO_LEN (sizeof(ST_CTL_YCRV_INFO))
  192. #define ST_CTL_YCRV_GET_PARAM_LEN (ST_CTL_YCRV_SETTING_LEN + ST_CTL_YCRV_INFO_LEN)
  193. #define ST_CTL_YCRV_SET_PARAM_LEN (ST_CTL_YCRV_SETTING_LEN)
  194. #define ST_CTL_YCRV_PARAM_SIZE (sizeof(ST_CTL_YCRV_PARAM))
  195. #define ST_CTL_YCRV_PARAM_LEN (ST_CTL_SAT_PARAM_SIZE)
  196. typedef struct _ST_ISP_CTL_YCRV {
  197. #if defined(VIRTUAL_IO_MAPPING)
  198. STF_VOID *pPipeline; /** Pointer to Pipeline. */
  199. #endif //VIRTUAL_IO_MAPPING
  200. STF_VOID *pIspCtx; /** Pointer to ISP context. */
  201. STF_U32 u32Id; /** Control ID. */
  202. STF_CHAR szName[16]; /** Control Name. */
  203. //STF_VOID *pstCtlYCrvRdma; /** YCRV's RDMA structure pointer. */
  204. ST_CTL_YCRV_PARAM *pstCtlYCrvParam; /** YCRV's control parameters structure pointer. */
  205. STF_BOOL8 bRegistered; /** Control register in pipeline. */
  206. STF_S32 (*Init)(STF_VOID *pIspCtx);
  207. STF_S32 (*LoadBinParam)(STF_VOID *pIspCtx, STF_U8 *pu8ParamBuf, STF_U16 u16ParamSize);
  208. STF_S32 (*Enable)(STF_VOID *pIspCtx, STF_BOOL8 bEnable);
  209. STF_BOOL8 (*IsEnable)(STF_VOID *pIspCtx);
  210. STF_S32 (*Registered)(STF_VOID *pIspCtx, STF_BOOL8 bRegistered);
  211. STF_BOOL8 (*IsRegistered)(STF_VOID *pIspCtx);
  212. STF_S32 (*Calculate)(STF_VOID *pIspCtx);
  213. STF_S32 (*FreeResource)(STF_VOID *pIspCtx);
  214. STF_S32 (*GetIqParam)(STF_VOID *pIspCtx, STF_VOID *pParamBuf, STF_U16 *pu16ParamSize);
  215. STF_S32 (*SetIqParam)(STF_VOID *pIspCtx, STF_VOID *pParamBuf, STF_U16 u16ParamSize);
  216. } ST_ISP_CTL_YCRV, *PST_ISP_CTL_YCRV;
  217. #pragma pack(pop)
  218. /* Y curve control parameters interface */
  219. //-----------------------------------------------------------------------------
  220. extern
  221. STF_S32 STFCTL_ISP_YCRV_CaptureYHistogram(
  222. ST_YHIST_PNT stYHist[YCRV_PNT],
  223. STF_U32 *pu32YHistDumpingBuffer
  224. );
  225. extern
  226. STF_S32 STFCTL_ISP_YCRV_HistDuplicate(
  227. STF_DOUBLE dNewHist[],
  228. STF_DOUBLE dOriHist[]
  229. );
  230. extern
  231. STF_S32 STFCTL_ISP_YCRV_HistApplyMin(
  232. STF_DOUBLE dHist[],
  233. double dValue,
  234. STF_U32 u32StartIdx,
  235. STF_U32 u32EndIdx
  236. );
  237. extern
  238. STF_S32 STFCTL_ISP_YCRV_HistApplyMax(
  239. STF_DOUBLE dHist[],
  240. double dValue,
  241. STF_U32 u32StartIdx,
  242. STF_U32 u32EndIdx
  243. );
  244. extern
  245. STF_S32 STFCTL_ISP_YCRV_HistSumInU32(
  246. ST_YHIST_PNT stOriHist[],
  247. STF_U32 *pu32HistSum
  248. );
  249. extern
  250. STF_S32 STFCTL_ISP_YCRV_HistSumInDouble(
  251. STF_DOUBLE dHist[],
  252. STF_DOUBLE *pdHistSum
  253. );
  254. extern
  255. STF_S32 STFCTL_ISP_YCRV_HistNormaliseFromU32(
  256. STF_DOUBLE dNewHist[],
  257. ST_YHIST_PNT stOriHist[]
  258. );
  259. extern
  260. STF_S32 STFCTL_ISP_YCRV_HistNormaliseFromDouble(
  261. STF_DOUBLE dNewHist[],
  262. STF_DOUBLE dOriHist[]
  263. );
  264. extern
  265. STF_S32 STFCTL_ISP_YCRV_HistAccumulate(
  266. ST_POINT stCurve[],
  267. STF_DOUBLE dHist[]
  268. );
  269. extern
  270. STF_S32 STFCTL_ISP_YCRV_ConvertHistToMappingCvr(
  271. ST_POINT *pstCurve,
  272. STF_U32 *pu32Hist
  273. );
  274. extern
  275. STF_S32 STFCTL_ISP_YCRV_CalcMinMaxLimitedWithPeriodHist(
  276. STF_U32 *pu32Hist,
  277. ST_YHIST_PNT stOriHist[],
  278. ST_YHIST_MIN_MAX_LMTD_W_PER *pstYHistMinMaxLmtdWithPeriod
  279. );
  280. #if defined(ENABLE_YCRV_EQUAL_SUPPORT)
  281. extern
  282. STF_S32 STFCTL_ISP_YCRV_CalcEqualizationHist(
  283. ST_POINT stCurve[],
  284. ST_YHIST_PNT stOriHist[],
  285. ST_YHIST_EQUAL_PARAM *pstYHistEqualParam
  286. );
  287. #endif //#if defined(ENABLE_YCRV_EQUAL_SUPPORT)
  288. #if defined(ENABLE_YCRV_MIN_CRV_MAX_LINE_LMTD_SUPPORT)
  289. extern
  290. STF_S32 STFCTL_ISP_YCRV_CalcMinCurveMaxLineLimitedHist(
  291. STF_U32 *pu32Hist,
  292. ST_YHIST_PNT stOriHist[],
  293. ST_YHIST_MIN_CRV_MAX_LINE_LMTD *pstYHistMinCrvMaxLineLmtd
  294. );
  295. #endif //#if defined(ENABLE_YCRV_MIN_CRV_MAX_LINE_LMTD_SUPPORT)
  296. extern
  297. STF_S32 STFCTL_ISP_YCRV_CalcMinMaxCurveLimitedHist(
  298. STF_U32 *pu32Hist,
  299. ST_YHIST_PNT stOriHist[],
  300. ST_YHIST_MIN_MAX_CRV_LMTD *pstYHistMinMaxCrvLmtd
  301. );
  302. extern
  303. STF_S32 STFCTL_ISP_YCRV_ApplyUpdateSpeed(
  304. ST_POINT *pstOldCurve,
  305. ST_POINT *pstNewCurve,
  306. STF_U16 u16Speed
  307. );
  308. extern
  309. STF_S32 STFCTL_ISP_YCRV_MakeLinearCurve(
  310. ST_POINT *pstCurve
  311. );
  312. //-----------------------------------------------------------------------------
  313. extern
  314. STF_S32 STFCTL_ISP_YCRV_SetEnable(
  315. ST_ISP_CTL_YCRV *pstCtlYCrv,
  316. STF_BOOL8 bEnable
  317. );
  318. extern
  319. STF_S32 STFCTL_ISP_YCRV_SetUpdateSpeed(
  320. ST_ISP_CTL_YCRV *pstCtlYCrv,
  321. STF_U16 u16Speed
  322. );
  323. extern
  324. STF_S32 STFCTL_ISP_YCRV_SetMethod(
  325. ST_ISP_CTL_YCRV *pstCtlYCrv,
  326. STF_U8 u8Method
  327. );
  328. extern
  329. STF_S32 STFCTL_ISP_YCRV_SetYHistMinMaxLmtdWithPeriod(
  330. ST_ISP_CTL_YCRV *pstCtlYCrv,
  331. ST_YHIST_MIN_MAX_LMTD_W_PER *pstYHistMinMaxLmtdWithPeriod
  332. );
  333. #if defined(ENABLE_YCRV_EQUAL_SUPPORT)
  334. extern
  335. STF_S32 STFCTL_ISP_YCRV_SetYHistEqualParam(
  336. ST_ISP_CTL_YCRV *pstCtlYCrv,
  337. ST_YHIST_EQUAL_PARAM *pstYHistEqualParam
  338. );
  339. #endif //#if defined(ENABLE_YCRV_EQUAL_SUPPORT)
  340. #if defined(ENABLE_YCRV_MIN_CRV_MAX_LINE_LMTD_SUPPORT)
  341. extern
  342. STF_S32 STFCTL_ISP_YCRV_SetYHistMinCrvMaxLineLmtd(
  343. ST_ISP_CTL_YCRV *pstCtlYCrv,
  344. ST_YHIST_MIN_CRV_MAX_LINE_LMTD *pstYHistMinCrvMaxLineLmtd
  345. );
  346. #endif //#if defined(ENABLE_YCRV_MIN_CRV_MAX_LINE_LMTD_SUPPORT)
  347. extern
  348. STF_S32 STFCTL_ISP_YCRV_SetYHistMinMaxCrvLmtd(
  349. ST_ISP_CTL_YCRV *pstCtlYCrv,
  350. ST_YHIST_MIN_MAX_CRV_LMTD *pstYHistMinMaxCrvLmtd
  351. );
  352. extern
  353. STF_S32 STFCTL_ISP_YCRV_InitializeYHist(
  354. ST_ISP_CTL_YCRV *pstCtlYCrv
  355. );
  356. extern
  357. STF_S32 STFCTL_ISP_YCRV_InitializeYCurveWoDamping(
  358. ST_ISP_CTL_YCRV *pstCtlYCrv
  359. );
  360. extern
  361. STF_S32 STFCTL_ISP_YCRV_InitializeYCurve(
  362. ST_ISP_CTL_YCRV *pstCtlYCrv
  363. );
  364. //-----------------------------------------------------------------------------
  365. extern
  366. STF_S32 STFCTL_ISP_YCRV_Init(
  367. STF_VOID *pIspCtx
  368. );
  369. extern
  370. STF_S32 STFCTL_ISP_YCRV_LoadBinParam(
  371. STF_VOID *pIspCtx,
  372. STF_U8 *pu8ParamBuf,
  373. STF_U16 u16ParamSize
  374. );
  375. extern
  376. STF_S32 STFCTL_ISP_YCRV_Enable(
  377. STF_VOID *pIspCtx,
  378. STF_BOOL8 bEnable
  379. );
  380. extern
  381. STF_BOOL8 STFCTL_ISP_YCRV_IsEnable(
  382. STF_VOID *pIspCtx
  383. );
  384. extern
  385. STF_S32 STFCTL_ISP_YCRV_Registered(
  386. STF_VOID *pIspCtx,
  387. STF_BOOL8 bRegistered
  388. );
  389. extern
  390. STF_BOOL8 STFCTL_ISP_YCRV_IsRegistered(
  391. STF_VOID *pIspCtx
  392. );
  393. extern
  394. STF_S32 STFCTL_ISP_YCRV_Calculate(
  395. STF_VOID *pIspCtx
  396. );
  397. extern
  398. STF_S32 STFCTL_ISP_YCRV_FreeResource(
  399. STF_VOID *pIspCtx
  400. );
  401. extern
  402. STF_S32 STFCTL_ISP_YCRV_GetIqParam(
  403. STF_VOID *pIspCtx,
  404. STF_VOID *pParamBuf,
  405. STF_U16 *pu16ParamSize
  406. );
  407. extern
  408. STF_S32 STFCTL_ISP_YCRV_SetIqParam(
  409. STF_VOID *pIspCtx,
  410. STF_VOID *pParamBuf,
  411. STF_U16 u16ParamSize
  412. );
  413. //-----------------------------------------------------------------------------
  414. extern
  415. STF_S32 STFCTL_ISP_YCRV_Create(
  416. STF_VOID *pPipeline
  417. );
  418. extern
  419. STF_S32 STFCTL_ISP_YCRV_Destroy(
  420. STF_VOID *pPipeline
  421. );
  422. //-----------------------------------------------------------------------------
  423. #ifdef __cplusplus
  424. }
  425. #endif
  426. #endif //__STFCTL_ISP_YCRV_H__