stfmod_isp_ccm.h 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586
  1. /**
  2. ******************************************************************************
  3. * @file stfmod_isp_ccm.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_CCM_H__
  21. #define __STFMOD_ISP_CCM_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_ccm_rdma.h"
  28. #include "stflib_isp_pipeline.h"
  29. /* color correction matrix module parameters structure */
  30. //-----------------------------------------------------------------------------
  31. // Define initial values
  32. #if 1
  33. #define ISP_DEF_CCM_C (32) /** Noise compensation offset, range 0 - 1023. */
  34. #define ISP_DEF_CCM_DNRM (6) /** Color matrix threshold de-normalization factor, range 0 - 8. */
  35. #if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  36. #define ISP_DEF_CCM_SM_MIN (0) /** Predefined saturation threshold value for min matrix. range 0 - 1023. */
  37. #define ISP_DEF_CCM_SM_MIN_MATRIX_00 (1.0) /** Min matrix component 00.. */
  38. #define ISP_DEF_CCM_SM_MIN_MATRIX_01 (0.0) /** Min matrix component 01.. */
  39. #define ISP_DEF_CCM_SM_MIN_MATRIX_02 (0.0) /** Min matrix component 02.. */
  40. #define ISP_DEF_CCM_SM_MIN_MATRIX_10 (0.0) /** Min matrix component 10.. */
  41. #define ISP_DEF_CCM_SM_MIN_MATRIX_11 (1.0) /** Min matrix component 11.. */
  42. #define ISP_DEF_CCM_SM_MIN_MATRIX_12 (0.0) /** Min matrix component 12.. */
  43. #define ISP_DEF_CCM_SM_MIN_MATRIX_20 (0.0) /** Min matrix component 20.. */
  44. #define ISP_DEF_CCM_SM_MIN_MATRIX_21 (0.0) /** Min matrix component 21.. */
  45. #define ISP_DEF_CCM_SM_MIN_MATRIX_22 (1.0) /** Min matrix component 22.. */
  46. #define ISP_DEF_CCM_SM_MIN_OFFSET_0 (0) /** Min offset component 0.. */
  47. #define ISP_DEF_CCM_SM_MIN_OFFSET_1 (0) /** Min offset component 1.. */
  48. #define ISP_DEF_CCM_SM_MIN_OFFSET_2 (0) /** Min offset component 2.. */
  49. #endif //#if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  50. #if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  51. #define ISP_DEF_CCM_SM_LOW (0) /** Predefined saturation threshold value for low matrix. range 0 - 1023. */
  52. #endif //#if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  53. #define ISP_DEF_CCM_SM_LOW_MATRIX_00 (1.0) /** Low matrix component 00.. */
  54. #define ISP_DEF_CCM_SM_LOW_MATRIX_01 (0.0) /** Low matrix component 01.. */
  55. #define ISP_DEF_CCM_SM_LOW_MATRIX_02 (0.0) /** Low matrix component 02.. */
  56. #define ISP_DEF_CCM_SM_LOW_MATRIX_10 (0.0) /** Low matrix component 10.. */
  57. #define ISP_DEF_CCM_SM_LOW_MATRIX_11 (1.0) /** Low matrix component 11.. */
  58. #define ISP_DEF_CCM_SM_LOW_MATRIX_12 (0.0) /** Low matrix component 12.. */
  59. #define ISP_DEF_CCM_SM_LOW_MATRIX_20 (0.0) /** Low matrix component 20.. */
  60. #define ISP_DEF_CCM_SM_LOW_MATRIX_21 (0.0) /** Low matrix component 21.. */
  61. #define ISP_DEF_CCM_SM_LOW_MATRIX_22 (1.0) /** Low matrix component 22.. */
  62. #define ISP_DEF_CCM_SM_LOW_OFFSET_0 (0) /** Low offset component 0.. */
  63. #define ISP_DEF_CCM_SM_LOW_OFFSET_1 (0) /** Low offset component 1.. */
  64. #define ISP_DEF_CCM_SM_LOW_OFFSET_2 (0) /** Low offset component 2.. */
  65. #define ISP_DEF_CCM_LUM_PNT_1_VALUE (205) /** Luminance point 1 value. */
  66. #define ISP_DEF_CCM_LUM_PNT_2_VALUE (409) /** Luminance point 1 value. */
  67. #define ISP_DEF_CCM_LUM_PNT_3_VALUE (614) /** Luminance point 1 value. */
  68. #define ISP_DEF_CCM_LUM_PNT_4_VALUE (818) /** Luminance point 1 value. */
  69. #define ISP_DEF_CCM_LUM_PNT_5_VALUE (1023) /** Luminance point 1 value. */
  70. #define ISP_DEF_CCM_LUM_PNT_1_FACTOR (0.6) /** Luminance point 1 factor. */
  71. #define ISP_DEF_CCM_LUM_PNT_2_FACTOR (1.0) /** Luminance point 1 factor. */
  72. #define ISP_DEF_CCM_LUM_PNT_3_FACTOR (1.0) /** Luminance point 1 factor. */
  73. #define ISP_DEF_CCM_LUM_PNT_4_FACTOR (0.9) /** Luminance point 1 factor. */
  74. #define ISP_DEF_CCM_LUM_PNT_5_FACTOR (0.5) /** Luminance point 1 factor. */
  75. #define ISP_DEF_CCM_SAT_PNT_1_VALUE (32) /** Saturation point 1 value. */
  76. #define ISP_DEF_CCM_SAT_PNT_2_VALUE (64) /** Saturation point 1 value. */
  77. #define ISP_DEF_CCM_SAT_PNT_3_VALUE (128) /** Saturation point 1 value. */
  78. #define ISP_DEF_CCM_SAT_PNT_4_VALUE (192) /** Saturation point 1 value. */
  79. #define ISP_DEF_CCM_SAT_PNT_5_VALUE (1023) /** Saturation point 1 value. */
  80. #define ISP_DEF_CCM_SAT_PNT_1_FACTOR (0.5) /** Saturation point 1 factor. */
  81. #define ISP_DEF_CCM_SAT_PNT_2_FACTOR (0.65) /** Saturation point 1 factor. */
  82. #define ISP_DEF_CCM_SAT_PNT_3_FACTOR (0.9) /** Saturation point 1 factor. */
  83. #define ISP_DEF_CCM_SAT_PNT_4_FACTOR (0.95) /** Saturation point 1 factor. */
  84. #define ISP_DEF_CCM_SAT_PNT_5_FACTOR (1.0) /** Saturation point 1 factor. */
  85. #elif 0
  86. #define ISP_DEF_CCM_C (256) /** Noise compensation offset, range 0 - 1023. */
  87. #define ISP_DEF_CCM_DNRM (6) /** Color matrix threshold de-normalization factor, range 0 - 8. */
  88. #if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  89. #define ISP_DEF_CCM_SM_MIN (418) /** Predefined saturation threshold value for min matrix. range 0 - 1023. */
  90. #define ISP_DEF_CCM_SM_MIN_MATRIX_00 (1.6) /** Min matrix component 00.. */
  91. #define ISP_DEF_CCM_SM_MIN_MATRIX_01 (-0.4) /** Min matrix component 01.. */
  92. #define ISP_DEF_CCM_SM_MIN_MATRIX_02 (-0.2) /** Min matrix component 02.. */
  93. #define ISP_DEF_CCM_SM_MIN_MATRIX_10 (-0.4) /** Min matrix component 10.. */
  94. #define ISP_DEF_CCM_SM_MIN_MATRIX_11 (1.6) /** Min matrix component 11.. */
  95. #define ISP_DEF_CCM_SM_MIN_MATRIX_12 (-0.2) /** Min matrix component 12.. */
  96. #define ISP_DEF_CCM_SM_MIN_MATRIX_20 (0.0) /** Min matrix component 20.. */
  97. #define ISP_DEF_CCM_SM_MIN_MATRIX_21 (-0.8) /** Min matrix component 21.. */
  98. #define ISP_DEF_CCM_SM_MIN_MATRIX_22 (1.8) /** Min matrix component 22.. */
  99. #define ISP_DEF_CCM_SM_MIN_OFFSET_0 (0) /** Min offset component 0.. */
  100. #define ISP_DEF_CCM_SM_MIN_OFFSET_1 (0) /** Min offset component 1.. */
  101. #define ISP_DEF_CCM_SM_MIN_OFFSET_2 (0) /** Min offset component 2.. */
  102. #endif //#if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  103. #if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  104. #define ISP_DEF_CCM_SM_LOW (630) /** Predefined saturation threshold value for low matrix. range 0 - 1023. */
  105. #endif //#if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  106. #define ISP_DEF_CCM_SM_LOW_MATRIX_00 (1.4) /** Low matrix component 00.. */
  107. #define ISP_DEF_CCM_SM_LOW_MATRIX_01 (-0.4) /** Low matrix component 01.. */
  108. #define ISP_DEF_CCM_SM_LOW_MATRIX_02 (0.0) /** Low matrix component 02.. */
  109. #define ISP_DEF_CCM_SM_LOW_MATRIX_10 (-0.4) /** Low matrix component 10.. */
  110. #define ISP_DEF_CCM_SM_LOW_MATRIX_11 (1.4) /** Low matrix component 11.. */
  111. #define ISP_DEF_CCM_SM_LOW_MATRIX_12 (0.0) /** Low matrix component 12.. */
  112. #define ISP_DEF_CCM_SM_LOW_MATRIX_20 (-0.2) /** Low matrix component 20.. */
  113. #define ISP_DEF_CCM_SM_LOW_MATRIX_21 (-1.0) /** Low matrix component 21.. */
  114. #define ISP_DEF_CCM_SM_LOW_MATRIX_22 (2.2) /** Low matrix component 22.. */
  115. #define ISP_DEF_CCM_SM_LOW_OFFSET_0 (0) /** Low offset component 0.. */
  116. #define ISP_DEF_CCM_SM_LOW_OFFSET_1 (0) /** Low offset component 1.. */
  117. #define ISP_DEF_CCM_SM_LOW_OFFSET_2 (0) /** Low offset component 2.. */
  118. #define ISP_DEF_CCM_LUM_PNT_1_VALUE (8) /** Luminance point 1 value. */
  119. #define ISP_DEF_CCM_LUM_PNT_2_VALUE (64) /** Luminance point 1 value. */
  120. #define ISP_DEF_CCM_LUM_PNT_3_VALUE (128) /** Luminance point 1 value. */
  121. #define ISP_DEF_CCM_LUM_PNT_4_VALUE (768) /** Luminance point 1 value. */
  122. #define ISP_DEF_CCM_LUM_PNT_5_VALUE (1023) /** Luminance point 1 value. */
  123. #define ISP_DEF_CCM_LUM_PNT_1_FACTOR (0.0) /** Luminance point 1 factor. */
  124. #define ISP_DEF_CCM_LUM_PNT_2_FACTOR (1.0) /** Luminance point 1 factor. */
  125. #define ISP_DEF_CCM_LUM_PNT_3_FACTOR (1.0) /** Luminance point 1 factor. */
  126. #define ISP_DEF_CCM_LUM_PNT_4_FACTOR (1.0) /** Luminance point 1 factor. */
  127. #define ISP_DEF_CCM_LUM_PNT_5_FACTOR (0.7) /** Luminance point 1 factor. */
  128. #define ISP_DEF_CCM_SAT_PNT_1_VALUE (2) /** Saturation point 1 value. */
  129. #define ISP_DEF_CCM_SAT_PNT_2_VALUE (32) /** Saturation point 1 value. */
  130. #define ISP_DEF_CCM_SAT_PNT_3_VALUE (96) /** Saturation point 1 value. */
  131. #define ISP_DEF_CCM_SAT_PNT_4_VALUE (128) /** Saturation point 1 value. */
  132. #define ISP_DEF_CCM_SAT_PNT_5_VALUE (1023) /** Saturation point 1 value. */
  133. #define ISP_DEF_CCM_SAT_PNT_1_FACTOR (0.5) /** Saturation point 1 factor. */
  134. #define ISP_DEF_CCM_SAT_PNT_2_FACTOR (1.0) /** Saturation point 1 factor. */
  135. #define ISP_DEF_CCM_SAT_PNT_3_FACTOR (1.0) /** Saturation point 1 factor. */
  136. #define ISP_DEF_CCM_SAT_PNT_4_FACTOR (1.0) /** Saturation point 1 factor. */
  137. #define ISP_DEF_CCM_SAT_PNT_5_FACTOR (1.0) /** Saturation point 1 factor. */
  138. #elif 0
  139. #define ISP_DEF_CCM_C (256) /** Noise compensation offset, range 0 - 1023. */
  140. #define ISP_DEF_CCM_DNRM (6) /** Color matrix threshold de-normalization factor, range 0 - 8. */
  141. #if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  142. #define ISP_DEF_CCM_SM_MIN (418) /** Predefined saturation threshold value for min matrix. range 0 - 1023. */
  143. #define ISP_DEF_CCM_SM_MIN_MATRIX_00 (2.4) /** Min matrix component 00.. */
  144. #define ISP_DEF_CCM_SM_MIN_MATRIX_01 (-1.0) /** Min matrix component 01.. */
  145. #define ISP_DEF_CCM_SM_MIN_MATRIX_02 (-0.4) /** Min matrix component 02.. */
  146. #define ISP_DEF_CCM_SM_MIN_MATRIX_10 (-0.6) /** Min matrix component 10.. */
  147. #define ISP_DEF_CCM_SM_MIN_MATRIX_11 (2.2) /** Min matrix component 11.. */
  148. #define ISP_DEF_CCM_SM_MIN_MATRIX_12 (-0.6) /** Min matrix component 12.. */
  149. #define ISP_DEF_CCM_SM_MIN_MATRIX_20 (-0.2) /** Min matrix component 20.. */
  150. #define ISP_DEF_CCM_SM_MIN_MATRIX_21 (-0.8) /** Min matrix component 21.. */
  151. #define ISP_DEF_CCM_SM_MIN_MATRIX_22 (2.0) /** Min matrix component 22.. */
  152. #define ISP_DEF_CCM_SM_MIN_OFFSET_0 (0) /** Min offset component 0.. */
  153. #define ISP_DEF_CCM_SM_MIN_OFFSET_1 (0) /** Min offset component 1.. */
  154. #define ISP_DEF_CCM_SM_MIN_OFFSET_2 (0) /** Min offset component 2.. */
  155. #endif //#if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  156. #if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  157. #define ISP_DEF_CCM_SM_LOW (630) /** Predefined saturation threshold value for low matrix. range 0 - 1023. */
  158. #endif //#if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  159. #define ISP_DEF_CCM_SM_LOW_MATRIX_00 (2.4) /** Low matrix component 00.. */
  160. #define ISP_DEF_CCM_SM_LOW_MATRIX_01 (-0.8) /** Low matrix component 01.. */
  161. #define ISP_DEF_CCM_SM_LOW_MATRIX_02 (-0.6) /** Low matrix component 02.. */
  162. #define ISP_DEF_CCM_SM_LOW_MATRIX_10 (-0.6) /** Low matrix component 10.. */
  163. #define ISP_DEF_CCM_SM_LOW_MATRIX_11 (2.2) /** Low matrix component 11.. */
  164. #define ISP_DEF_CCM_SM_LOW_MATRIX_12 (-0.6) /** Low matrix component 12.. */
  165. #define ISP_DEF_CCM_SM_LOW_MATRIX_20 (0.0) /** Low matrix component 20.. */
  166. #define ISP_DEF_CCM_SM_LOW_MATRIX_21 (-1.0) /** Low matrix component 21.. */
  167. #define ISP_DEF_CCM_SM_LOW_MATRIX_22 (2.0) /** Low matrix component 22.. */
  168. #define ISP_DEF_CCM_SM_LOW_OFFSET_0 (0) /** Low offset component 0.. */
  169. #define ISP_DEF_CCM_SM_LOW_OFFSET_1 (0) /** Low offset component 1.. */
  170. #define ISP_DEF_CCM_SM_LOW_OFFSET_2 (0) /** Low offset component 2.. */
  171. #define ISP_DEF_CCM_LUM_PNT_1_VALUE (24) /** Luminance point 1 value. */
  172. #define ISP_DEF_CCM_LUM_PNT_2_VALUE (96) /** Luminance point 1 value. */
  173. #define ISP_DEF_CCM_LUM_PNT_3_VALUE (400) /** Luminance point 1 value. */
  174. #define ISP_DEF_CCM_LUM_PNT_4_VALUE (800) /** Luminance point 1 value. */
  175. #define ISP_DEF_CCM_LUM_PNT_5_VALUE (1023) /** Luminance point 1 value. */
  176. #define ISP_DEF_CCM_LUM_PNT_1_FACTOR (0.2) /** Luminance point 1 factor. */
  177. #define ISP_DEF_CCM_LUM_PNT_2_FACTOR (1.0) /** Luminance point 1 factor. */
  178. #define ISP_DEF_CCM_LUM_PNT_3_FACTOR (1.0) /** Luminance point 1 factor. */
  179. #define ISP_DEF_CCM_LUM_PNT_4_FACTOR (0.0) /** Luminance point 1 factor. */
  180. #define ISP_DEF_CCM_LUM_PNT_5_FACTOR (0.0) /** Luminance point 1 factor. */
  181. #define ISP_DEF_CCM_SAT_PNT_1_VALUE (16) /** Saturation point 1 value. */
  182. #define ISP_DEF_CCM_SAT_PNT_2_VALUE (96) /** Saturation point 1 value. */
  183. #define ISP_DEF_CCM_SAT_PNT_3_VALUE (128) /** Saturation point 1 value. */
  184. #define ISP_DEF_CCM_SAT_PNT_4_VALUE (128) /** Saturation point 1 value. */
  185. #define ISP_DEF_CCM_SAT_PNT_5_VALUE (1023) /** Saturation point 1 value. */
  186. #define ISP_DEF_CCM_SAT_PNT_1_FACTOR (0.2) /** Saturation point 1 factor. */
  187. #define ISP_DEF_CCM_SAT_PNT_2_FACTOR (1.0) /** Saturation point 1 factor. */
  188. #define ISP_DEF_CCM_SAT_PNT_3_FACTOR (1.0) /** Saturation point 1 factor. */
  189. #define ISP_DEF_CCM_SAT_PNT_4_FACTOR (1.0) /** Saturation point 1 factor. */
  190. #define ISP_DEF_CCM_SAT_PNT_5_FACTOR (1.0) /** Saturation point 1 factor. */
  191. #elif 0
  192. #define ISP_DEF_CCM_C (256) /** Noise compensation offset, range 0 - 1023. */
  193. #define ISP_DEF_CCM_DNRM (6) /** Color matrix threshold de-normalization factor, range 0 - 8. */
  194. #if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  195. #define ISP_DEF_CCM_SM_MIN (418) /** Predefined saturation threshold value for min matrix. range 0 - 1023. */
  196. #define ISP_DEF_CCM_SM_MIN_MATRIX_00 (2.4) /** Min matrix component 00.. */
  197. #define ISP_DEF_CCM_SM_MIN_MATRIX_01 (-1.0) /** Min matrix component 01.. */
  198. #define ISP_DEF_CCM_SM_MIN_MATRIX_02 (-0.4) /** Min matrix component 02.. */
  199. #define ISP_DEF_CCM_SM_MIN_MATRIX_10 (-0.6) /** Min matrix component 10.. */
  200. #define ISP_DEF_CCM_SM_MIN_MATRIX_11 (2.2) /** Min matrix component 11.. */
  201. #define ISP_DEF_CCM_SM_MIN_MATRIX_12 (-0.6) /** Min matrix component 12.. */
  202. #define ISP_DEF_CCM_SM_MIN_MATRIX_20 (-0.2) /** Min matrix component 20.. */
  203. #define ISP_DEF_CCM_SM_MIN_MATRIX_21 (-0.8) /** Min matrix component 21.. */
  204. #define ISP_DEF_CCM_SM_MIN_MATRIX_22 (2.0) /** Min matrix component 22.. */
  205. #define ISP_DEF_CCM_SM_MIN_OFFSET_0 (0) /** Min offset component 0.. */
  206. #define ISP_DEF_CCM_SM_MIN_OFFSET_1 (0) /** Min offset component 1.. */
  207. #define ISP_DEF_CCM_SM_MIN_OFFSET_2 (0) /** Min offset component 2.. */
  208. #endif //#if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  209. #if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  210. #define ISP_DEF_CCM_SM_LOW (630) /** Predefined saturation threshold value for low matrix. range 0 - 1023. */
  211. #endif //#if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  212. #define ISP_DEF_CCM_SM_LOW_MATRIX_00 (2.4) /** Low matrix component 00.. */
  213. #define ISP_DEF_CCM_SM_LOW_MATRIX_01 (-0.8) /** Low matrix component 01.. */
  214. #define ISP_DEF_CCM_SM_LOW_MATRIX_02 (-0.6) /** Low matrix component 02.. */
  215. #define ISP_DEF_CCM_SM_LOW_MATRIX_10 (-0.6) /** Low matrix component 10.. */
  216. #define ISP_DEF_CCM_SM_LOW_MATRIX_11 (2.2) /** Low matrix component 11.. */
  217. #define ISP_DEF_CCM_SM_LOW_MATRIX_12 (-0.6) /** Low matrix component 12.. */
  218. #define ISP_DEF_CCM_SM_LOW_MATRIX_20 (0.0) /** Low matrix component 20.. */
  219. #define ISP_DEF_CCM_SM_LOW_MATRIX_21 (-1.0) /** Low matrix component 21.. */
  220. #define ISP_DEF_CCM_SM_LOW_MATRIX_22 (2.0) /** Low matrix component 22.. */
  221. #define ISP_DEF_CCM_SM_LOW_OFFSET_0 (0) /** Low offset component 0.. */
  222. #define ISP_DEF_CCM_SM_LOW_OFFSET_1 (0) /** Low offset component 1.. */
  223. #define ISP_DEF_CCM_SM_LOW_OFFSET_2 (0) /** Low offset component 2.. */
  224. #define ISP_DEF_CCM_LUM_PNT_1_VALUE (0) /** Luminance point 1 value. */
  225. #define ISP_DEF_CCM_LUM_PNT_2_VALUE (96) /** Luminance point 1 value. */
  226. #define ISP_DEF_CCM_LUM_PNT_3_VALUE (400) /** Luminance point 1 value. */
  227. #define ISP_DEF_CCM_LUM_PNT_4_VALUE (900) /** Luminance point 1 value. */
  228. #define ISP_DEF_CCM_LUM_PNT_5_VALUE (1023) /** Luminance point 1 value. */
  229. #define ISP_DEF_CCM_LUM_PNT_1_FACTOR (1.0) /** Luminance point 1 factor. */
  230. #define ISP_DEF_CCM_LUM_PNT_2_FACTOR (1.0) /** Luminance point 1 factor. */
  231. #define ISP_DEF_CCM_LUM_PNT_3_FACTOR (1.0) /** Luminance point 1 factor. */
  232. #define ISP_DEF_CCM_LUM_PNT_4_FACTOR (1.0) /** Luminance point 1 factor. */
  233. #define ISP_DEF_CCM_LUM_PNT_5_FACTOR (1.0) /** Luminance point 1 factor. */
  234. #define ISP_DEF_CCM_SAT_PNT_1_VALUE (0) /** Saturation point 1 value. */
  235. #define ISP_DEF_CCM_SAT_PNT_2_VALUE (48) /** Saturation point 1 value. */
  236. #define ISP_DEF_CCM_SAT_PNT_3_VALUE (128) /** Saturation point 1 value. */
  237. #define ISP_DEF_CCM_SAT_PNT_4_VALUE (128) /** Saturation point 1 value. */
  238. #define ISP_DEF_CCM_SAT_PNT_5_VALUE (1023) /** Saturation point 1 value. */
  239. #define ISP_DEF_CCM_SAT_PNT_1_FACTOR (1.0) /** Saturation point 1 factor. */
  240. #define ISP_DEF_CCM_SAT_PNT_2_FACTOR (1.0) /** Saturation point 1 factor. */
  241. #define ISP_DEF_CCM_SAT_PNT_3_FACTOR (1.0) /** Saturation point 1 factor. */
  242. #define ISP_DEF_CCM_SAT_PNT_4_FACTOR (1.0) /** Saturation point 1 factor. */
  243. #define ISP_DEF_CCM_SAT_PNT_5_FACTOR (1.0) /** Saturation point 1 factor. */
  244. #elif 0
  245. #define ISP_DEF_CCM_C (256) /** Noise compensation offset, range 0 - 1023. */
  246. #define ISP_DEF_CCM_DNRM (6) /** Color matrix threshold de-normalization factor, range 0 - 8. */
  247. #if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  248. #define ISP_DEF_CCM_SM_MIN (418) /** Predefined saturation threshold value for min matrix. range 0 - 1023. */
  249. #define ISP_DEF_CCM_SM_MIN_MATRIX_00 (2.4) /** Min matrix component 00.. */
  250. #define ISP_DEF_CCM_SM_MIN_MATRIX_01 (-1.0) /** Min matrix component 01.. */
  251. #define ISP_DEF_CCM_SM_MIN_MATRIX_02 (-0.4) /** Min matrix component 02.. */
  252. #define ISP_DEF_CCM_SM_MIN_MATRIX_10 (-0.6) /** Min matrix component 10.. */
  253. #define ISP_DEF_CCM_SM_MIN_MATRIX_11 (2.2) /** Min matrix component 11.. */
  254. #define ISP_DEF_CCM_SM_MIN_MATRIX_12 (-0.6) /** Min matrix component 12.. */
  255. #define ISP_DEF_CCM_SM_MIN_MATRIX_20 (-0.2) /** Min matrix component 20.. */
  256. #define ISP_DEF_CCM_SM_MIN_MATRIX_21 (-0.8) /** Min matrix component 21.. */
  257. #define ISP_DEF_CCM_SM_MIN_MATRIX_22 (2.0) /** Min matrix component 22.. */
  258. #define ISP_DEF_CCM_SM_MIN_OFFSET_0 (0) /** Min offset component 0.. */
  259. #define ISP_DEF_CCM_SM_MIN_OFFSET_1 (0) /** Min offset component 1.. */
  260. #define ISP_DEF_CCM_SM_MIN_OFFSET_2 (0) /** Min offset component 2.. */
  261. #endif //#if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  262. #if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  263. #define ISP_DEF_CCM_SM_LOW (630) /** Predefined saturation threshold value for low matrix. range 0 - 1023. */
  264. #endif //#if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  265. #define ISP_DEF_CCM_SM_LOW_MATRIX_00 (2.4) /** Low matrix component 00.. */
  266. #define ISP_DEF_CCM_SM_LOW_MATRIX_01 (-0.8) /** Low matrix component 01.. */
  267. #define ISP_DEF_CCM_SM_LOW_MATRIX_02 (-0.6) /** Low matrix component 02.. */
  268. #define ISP_DEF_CCM_SM_LOW_MATRIX_10 (-0.6) /** Low matrix component 10.. */
  269. #define ISP_DEF_CCM_SM_LOW_MATRIX_11 (2.2) /** Low matrix component 11.. */
  270. #define ISP_DEF_CCM_SM_LOW_MATRIX_12 (-0.6) /** Low matrix component 12.. */
  271. #define ISP_DEF_CCM_SM_LOW_MATRIX_20 (0.0) /** Low matrix component 20.. */
  272. #define ISP_DEF_CCM_SM_LOW_MATRIX_21 (-1.0) /** Low matrix component 21.. */
  273. #define ISP_DEF_CCM_SM_LOW_MATRIX_22 (2.0) /** Low matrix component 22.. */
  274. #define ISP_DEF_CCM_SM_LOW_OFFSET_0 (0) /** Low offset component 0.. */
  275. #define ISP_DEF_CCM_SM_LOW_OFFSET_1 (0) /** Low offset component 1.. */
  276. #define ISP_DEF_CCM_SM_LOW_OFFSET_2 (0) /** Low offset component 2.. */
  277. #define ISP_DEF_CCM_LUM_PNT_1_VALUE (0) /** Luminance point 1 value. */
  278. #define ISP_DEF_CCM_LUM_PNT_2_VALUE (96) /** Luminance point 2 value. */
  279. #define ISP_DEF_CCM_LUM_PNT_3_VALUE (400) /** Luminance point 3 value. */
  280. #define ISP_DEF_CCM_LUM_PNT_4_VALUE (900) /** Luminance point 4 value. */
  281. #define ISP_DEF_CCM_LUM_PNT_5_VALUE (1023) /** Luminance point 5 value. */
  282. #define ISP_DEF_CCM_LUM_PNT_1_FACTOR (0.0) /** Luminance point 1 factor. */
  283. #define ISP_DEF_CCM_LUM_PNT_2_FACTOR (1.0) /** Luminance point 2 factor. */
  284. #define ISP_DEF_CCM_LUM_PNT_3_FACTOR (1.0) /** Luminance point 3 factor. */
  285. #define ISP_DEF_CCM_LUM_PNT_4_FACTOR (0.0) /** Luminance point 4 factor. */
  286. #define ISP_DEF_CCM_LUM_PNT_5_FACTOR (0.0) /** Luminance point 5 factor. */
  287. #define ISP_DEF_CCM_SAT_PNT_1_VALUE (0) /** Saturation point 1 value. */
  288. #define ISP_DEF_CCM_SAT_PNT_2_VALUE (48) /** Saturation point 2 value. */
  289. #define ISP_DEF_CCM_SAT_PNT_3_VALUE (128) /** Saturation point 3 value. */
  290. #define ISP_DEF_CCM_SAT_PNT_4_VALUE (128) /** Saturation point 4 value. */
  291. #define ISP_DEF_CCM_SAT_PNT_5_VALUE (1023) /** Saturation point 5 value. */
  292. #define ISP_DEF_CCM_SAT_PNT_1_FACTOR (0.0) /** Saturation point 1 factor. */
  293. #define ISP_DEF_CCM_SAT_PNT_2_FACTOR (1.0) /** Saturation point 2 factor. */
  294. #define ISP_DEF_CCM_SAT_PNT_3_FACTOR (1.0) /** Saturation point 3 factor. */
  295. #define ISP_DEF_CCM_SAT_PNT_4_FACTOR (1.0) /** Saturation point 4 factor. */
  296. #define ISP_DEF_CCM_SAT_PNT_5_FACTOR (1.0) /** Saturation point 5 factor. */
  297. #endif
  298. #pragma pack(push, 1)
  299. typedef enum _EN_CCM_UPDATE {
  300. EN_CCM_UPDATE_NONE = 0x00,
  301. EN_CCM_UPDATE_MATRIX_INFO = 0x01,
  302. EN_CCM_UPDATE_ALL = (EN_CCM_UPDATE_MATRIX_INFO),
  303. } EN_CCM_UPDATE, *PEN_CCM_UPDATE;
  304. typedef struct _ST_CCM_INTERPOLATE_CRV {
  305. #if 0
  306. STF_U16 u16C; /** Noise compensation offset, range 0 - 1023. */
  307. #endif
  308. STF_U8 u8Dnrm; /** Color matrix threshold de-normalization factor, range 0 - 8. */
  309. STF_S16 s16SmMin; /** Predefined min saturation threshold value. range 0 - 1023. */
  310. STF_S16 s16SmLow; /** Predefined low saturation threshold value. range 0 - 1023. */
  311. } ST_CCM_INTERPOLATE_CRV, *PST_CCM_INTERPOLATE_CRV;
  312. typedef struct _ST_CCM_INFO {
  313. #if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  314. STF_S16 s16Threshold; /** Predefined saturation threshold value. range -1024 - 1023. */
  315. #endif //#if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  316. STF_DOUBLE dMatrix[3][3]; /** Color correction matrix, range -3.9921875 - 3.9921875. */
  317. STF_S16 s16Offset[3]; /** R, G and B channel offset, range -1024 - 1023. */
  318. } ST_CCM_INFO, *PST_CCM_INFO;
  319. #if defined(ENABLE_CCM_SUPPORT_FADING_CURVE)
  320. typedef struct _ST_CCM_PNT {
  321. STF_U16 u16Value; /** Luminance value of fading curve. */
  322. STF_DOUBLE dFactor; /** Factor value of fading curve. */
  323. } ST_CCM_PNT, *PST_CCM_PNT;
  324. #endif //ENABLE_CCM_SUPPORT_FADING_CURVE
  325. typedef struct _ST_MATRIX_INFO {
  326. #if 0
  327. STF_U16 u16C; /** Noise compensation offset, range 0 - 1023. */
  328. #endif
  329. #if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  330. STF_U8 u8Dnrm; /** Color matrix threshold de-normalization factor, range 0 - 8. */
  331. #endif //#if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  332. #if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  333. ST_CCM_INFO stSmMin; /** This CCM is based on the lab measured color correction matrix and offsets. */
  334. #endif //#if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  335. ST_CCM_INFO stSmLow; /** This CCM is low end color correction matrix and offsets. */
  336. } ST_MATRIX_INFO, *PST_MATRIX_INFO;
  337. typedef struct _ST_MOD_CCM_SETTING {
  338. //-------------------------------------------------------------------------
  339. // This section parameters value is assign from setting file.
  340. STF_BOOL8 bEnable; /** Enable/Disable CCM module. */
  341. ST_MATRIX_INFO stMatrixInfo; /** Color matrix information. */
  342. #if defined(ENABLE_CCM_SUPPORT_FADING_CURVE)
  343. ST_CCM_PNT stLumFadingCrv[5]; /** Luminance fading curve. */
  344. ST_CCM_PNT stSatFadingCrv[5]; /** Saturation fading curve. */
  345. #endif //ENABLE_CCM_SUPPORT_FADING_CURVE
  346. } ST_MOD_CCM_SETTING, *PST_MOD_CCM_SETTING;
  347. typedef struct _ST_CCM_PARAM {
  348. ST_MOD_CCM_SETTING stSetting; /** Module CCM setting file parameters. */
  349. //-------------------------------------------------------------------------
  350. // This section parameters is internal using.
  351. STF_BOOL8 bSetup; /** Flag set if the module setup has been completed. */
  352. STF_BOOL8 bUpdate; /** Enable/Disable program CCM module register. */
  353. STF_U32 u32UpdateRequest; /** Flag to indicate that this module update has been requested. */
  354. } ST_CCM_PARAM, *PST_CCM_PARAM;
  355. #define ST_MOD_CCM_SETTING_LEN (sizeof(ST_MOD_CCM_SETTING))
  356. #define ST_MOD_CCM_GET_PARAM_LEN (ST_MOD_CCM_SETTING_LEN)
  357. #define ST_MOD_CCM_SET_PARAM_LEN (ST_MOD_CCM_SETTING_LEN)
  358. #define ST_CCM_PARAM_SIZE (sizeof(ST_CCM_PARAM))
  359. #define ST_CCM_PARAM_LEN (ST_CCM_PARAM_SIZE)
  360. typedef struct _ST_ISP_MOD_CCM {
  361. #if defined(VIRTUAL_IO_MAPPING)
  362. STF_VOID *pPipeline; /** Pointer to Pipeline. */
  363. #endif //VIRTUAL_IO_MAPPING
  364. STF_VOID *pIspCtx; /** Pointer to ISP context. */
  365. STF_U32 u32Id; /** Module ID. */
  366. STF_CHAR szName[16]; /** Module Name. */
  367. CI_MEM_PARAM *pstCcmRdmaBuf; /** CCM's DMA buffer pointer for RDMA. */
  368. #if defined(SUPPORT_MULTI_ISP)
  369. ST_ISP_CCM_RDMA *pstIspCcmRdma; /** CCM's RDMA structure pointer that include the ISP index.*/
  370. #endif //SUPPORT_MULTI_ISP
  371. ST_CCM_RDMA *pstCcmRdma; /** CCM's RDMA structure pointer.*/
  372. ST_CCM_PARAM *pstCcmParam; /** CCM's parameters structure pointer. */
  373. STF_BOOL8 bRegistered; /** Module register in pipeline. */
  374. STF_S32 (*Init)(STF_VOID *pIspCtx, STF_U32 *pNextRdma);
  375. STF_S32 (*LoadBinParam)(STF_VOID *pIspCtx, STF_U8 *pu8ParamBuf, STF_U16 u16ParamSize);
  376. STF_S32 (*LoadBinClbrt)(STF_VOID *pIspCtx);
  377. STF_S32 (*Enable)(STF_VOID *pIspCtx, STF_BOOL8 bEnable);
  378. STF_BOOL8 (*IsEnable)(STF_VOID *pIspCtx);
  379. STF_S32 (*Update)(STF_VOID *pIspCtx, STF_BOOL8 bUpdate);
  380. STF_BOOL8 (*IsUpdate)(STF_VOID *pIspCtx);
  381. STF_S32 (*Registered)(STF_VOID *pIspCtx, STF_BOOL8 bRegistered);
  382. STF_BOOL8 (*IsRegistered)(STF_VOID *pIspCtx);
  383. STF_S32 (*UpdateReg)(STF_VOID *pIspCtx);
  384. STF_S32 (*SetReg)(STF_VOID *pIspCtx);
  385. STF_S32 (*SetNext)(STF_VOID *pIspCtx, STF_U32 *pNextRdma);
  386. STF_S32 (*FreeResource)(STF_VOID *pIspCtx);
  387. STF_S32 (*GetIqParam)(STF_VOID *pIspCtx, STF_VOID *pParamBuf, STF_U16 *pu16ParamSize);
  388. STF_S32 (*SetIqParam)(STF_VOID *pIspCtx, STF_VOID *pParamBuf, STF_U16 u16ParamSize);
  389. } ST_ISP_MOD_CCM, *PST_ISP_MOD_CCM;
  390. #pragma pack(pop)
  391. /* color correction matrix module parameters interface */
  392. //-----------------------------------------------------------------------------
  393. extern
  394. STF_S32 STFMOD_ISP_CCM_InitRdma(
  395. ST_CCM_RDMA *pstCcmRdma,
  396. ST_CCM_PARAM *pstCcmParam,
  397. STF_U32 *pNextRdma
  398. );
  399. extern
  400. STF_S32 STFMOD_ISP_CCM_UpdateRdma(
  401. ST_CCM_RDMA *pstCcmRdma,
  402. ST_CCM_PARAM *pstCcmParam
  403. );
  404. extern
  405. STF_S32 STFMOD_ISP_CCM_UpdateMatrixInfo(
  406. ST_CCM_RDMA *pstCcmRdma,
  407. ST_CCM_PARAM *pstCcmParam
  408. );
  409. extern
  410. STF_S32 STFMOD_ISP_CCM_SetNextRdma(
  411. ST_CCM_RDMA *pstCcmRdma,
  412. STF_U32 *pNextRdma
  413. );
  414. //-----------------------------------------------------------------------------
  415. extern
  416. STF_S32 STFMOD_ISP_CCM_SetEnable(
  417. ST_ISP_MOD_CCM *pstModCcm,
  418. STF_BOOL8 bEnable
  419. );
  420. extern
  421. STF_S32 STFMOD_ISP_CCM_SetUpdate(
  422. ST_ISP_MOD_CCM *pstModCcm,
  423. STF_BOOL8 bUpdate
  424. );
  425. #if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  426. extern
  427. STF_S32 STFMOD_ISP_CCM_SetCcmInterpolationCurve(
  428. ST_ISP_MOD_CCM *pstModCcm,
  429. ST_CCM_INTERPOLATE_CRV *pstCcmInterpolateCrv
  430. );
  431. extern
  432. STF_S32 STFMOD_ISP_CCM_SetMinMatrixOffset(
  433. ST_ISP_MOD_CCM *pstModCcm,
  434. STF_DOUBLE dMatrix[3][3],
  435. STF_S16 s16Offset[3]
  436. );
  437. #endif //#if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  438. extern
  439. STF_S32 STFMOD_ISP_CCM_SetLowMatrixOffset(
  440. ST_ISP_MOD_CCM *pstModCcm,
  441. STF_DOUBLE dMatrix[3][3],
  442. STF_S16 s16Offset[3]
  443. );
  444. extern
  445. STF_S32 STFMOD_ISP_CCM_SetMatrixInfo(
  446. ST_ISP_MOD_CCM *pstModCcm,
  447. ST_MATRIX_INFO *pstMatrixInfo
  448. );
  449. #if 0
  450. extern
  451. STF_S32 STFMOD_ISP_CCM_SetNoiseCompersationOffset(
  452. ST_ISP_MOD_CCM *pstModCcm,
  453. STF_U16 u16C
  454. ST_ISP_MOD_CCM *pstModCcm
  455. );
  456. #endif //#if 0
  457. #if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  458. extern
  459. STF_S32 STFMOD_ISP_CCM_SetDenormalizationFactor(
  460. ST_ISP_MOD_CCM *pstModCcm,
  461. STF_U8 u8Dnrm
  462. );
  463. extern
  464. STF_S32 STFMOD_ISP_CCM_SetMinCcmInfo(
  465. ST_ISP_MOD_CCM *pstModCcm,
  466. ST_CCM_INFO *pstSmMin
  467. );
  468. #endif //#if defined(ISP_CCM_MIN_MATRIX_SUPPORT)
  469. extern
  470. STF_S32 STFMOD_ISP_CCM_SetLowCcmInfo(
  471. ST_ISP_MOD_CCM *pstModCcm,
  472. ST_CCM_INFO *pstSmLow
  473. );
  474. //-----------------------------------------------------------------------------
  475. extern
  476. STF_S32 STFMOD_ISP_CCM_Init(
  477. STF_VOID *pIspCtx,
  478. STF_U32 *pNextRdma
  479. );
  480. extern
  481. STF_S32 STFMOD_ISP_CCM_LoadBinParam(
  482. STF_VOID *pIspCtx,
  483. STF_U8 *pu8ParamBuf,
  484. STF_U16 u16ParamSize
  485. );
  486. extern
  487. STF_S32 STFMOD_ISP_CCM_LoadBinClbrt(
  488. STF_VOID *pIspCtx
  489. );
  490. extern
  491. STF_S32 STFMOD_ISP_CCM_Enable(
  492. STF_VOID *pIspCtx,
  493. STF_BOOL8 bEnable
  494. );
  495. extern
  496. STF_BOOL8 STFMOD_ISP_CCM_IsEnable(
  497. STF_VOID *pIspCtx
  498. );
  499. extern
  500. STF_S32 STFMOD_ISP_CCM_Update(
  501. STF_VOID *pIspCtx,
  502. STF_BOOL8 bUpdate
  503. );
  504. extern
  505. STF_BOOL8 STFMOD_ISP_CCM_IsUpdate(
  506. STF_VOID *pIspCtx
  507. );
  508. extern
  509. STF_S32 STFMOD_ISP_CCM_Registered(
  510. STF_VOID *pIspCtx,
  511. STF_BOOL8 bRegistered
  512. );
  513. extern
  514. STF_BOOL8 STFMOD_ISP_CCM_IsRegistered(
  515. STF_VOID *pIspCtx
  516. );
  517. extern
  518. STF_S32 STFMOD_ISP_CCM_UpdateReg(
  519. STF_VOID *pIspCtx
  520. );
  521. extern
  522. STF_S32 STFMOD_ISP_CCM_SetReg(
  523. STF_VOID *pIspCtx
  524. );
  525. extern
  526. STF_S32 STFMOD_ISP_CCM_SetNext(
  527. STF_VOID *pIspCtx,
  528. STF_U32 *pNextRdma
  529. );
  530. extern
  531. STF_S32 STFMOD_ISP_CCM_FreeResource(
  532. STF_VOID *pIspCtx
  533. );
  534. extern
  535. STF_S32 STFMOD_ISP_CCM_GetIqParam(
  536. STF_VOID *pIspCtx,
  537. STF_VOID *pParamBuf,
  538. STF_U16 *pu16ParamSize
  539. );
  540. extern
  541. STF_S32 STFMOD_ISP_CCM_SetIqParam(
  542. STF_VOID *pIspCtx,
  543. STF_VOID *pParamBuf,
  544. STF_U16 u16ParamSize
  545. );
  546. //-----------------------------------------------------------------------------
  547. extern
  548. STF_S32 STFMOD_ISP_CCM_Create(
  549. STF_VOID *pPipeline
  550. );
  551. extern
  552. STF_S32 STFMOD_ISP_CCM_Destroy(
  553. STF_VOID *pPipeline
  554. );
  555. //-----------------------------------------------------------------------------
  556. #ifdef __cplusplus
  557. }
  558. #endif
  559. #endif //__STFMOD_ISP_CCM_H__