xref: /aosp_15_r20/external/intel-media-driver/media_common/agnostic/common/vp/hal/vp_common_hdr.h (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1 /*
2 * Copyright (c) 2022, Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 */
22 //!
23 //! \file     vp_common_hdr.h
24 //! \brief    vphal HDR interface clarification
25 //! \details  vphal HDR interface clarification inlcuding:
26 //!           some marcro, enum, structure, function
27 //!
28 #ifndef __VP_COMMON_HDR_H__
29 #define __VP_COMMON_HDR_H__
30 
31 #define KERNEL_HDR_MANDATORY  0
32 #define KERNEL_HDR_PREPROCESS 4
33 
34 #define VPHAL_HDR_BTINDEX_EOTF1DLUT_OFFSET 3
35 #define VPHAL_HDR_BTINDEX_OETF1DLUT_OFFSET 4
36 #define VPHAL_HDR_BTINDEX_CRI3DLUT_OFFSET  3
37 
38 #define VPHAL_HDR_BTINDEX_LAYER0           16
39 #define VPHAL_HDR_BTINDEX_PER_LAYER0       5
40 #define VPHAL_HDR_BTINDEX_RENDERTARGET     56
41 #define VPHAL_HDR_BTINDEX_PER_TARGET       3
42 #define VPHAL_HDR_BTINDEX_COEFF            59
43 
44 #define VPHAL_HDR_AVS_SAMPLER_STATE_NEAREST        1
45 #define VPHAL_HDR_AVS_SAMPLER_STATE_ADAPTIVE       3
46 #define VPHAL_HDR_3D_SAMPLER_STATE_NEAREST         13
47 #define VPHAL_HDR_3D_SAMPLER_STATE_BILINEAR        14
48 
49 #define VPHAL_HDR_COEF_SURFACE_WIDTH               8
50 #define VPHAL_HDR_COEF_SURFACE_HEIGHT_BASIC        66
51 #define VPHAL_HDR_COEF_SURFACE_HEIGHT_EXT          32
52 #define VPHAL_HDR_COEF_SURFACE_HEIGHT              (VPHAL_HDR_COEF_SURFACE_HEIGHT_BASIC + VPHAL_HDR_COEF_SURFACE_HEIGHT_EXT)
53 #define VPHAL_HDR_COEF_SURFACE_PITCH               64
54 #define VPHAL_HDR_COEF_LINES_PER_LAYER_BASIC       8
55 #define VPHAL_HDR_COEF_LINES_PER_LAYER_EXT         4
56 #define VPHAL_HDR_COEF_EOTF_OFFSET                 6
57 #define VPHAL_HDR_COEF_PIVOT_POINT_LINE_OFFSET     6
58 #define VPHAL_HDR_COEF_SLOPE_INTERCEPT_LINE_OFFSET 7
59 #define VPHAL_HDR_COEF_CCMEXT_OFFSET               6
60 #define VPHAL_HDR_COEF_CLAMP_OFFSET                7
61 
62 #define VPHAL_HDR_AUTO_MODE_IIR_TEMP_SIZE          128
63 #define VPHAL_HDR_OETF_1DLUT_WIDTH                 16
64 #define VPHAL_HDR_OETF_1DLUT_HEIGHT                16
65 #define VPHAL_MAX_HDR_INPUT_LAYER                  8
66 #define VPHAL_MAX_HDR_OUTPUT_LAYER                 1
67 #define VPHAL_HDR_CRI_3DLUT_SIZE                   32
68 #define HDR_STAGES_CONFIG_TABLE_SIZE               32
69 
70 #define VPHAL_HDR_EOTF_COEFF1_TRADITIONNAL_GAMMA 0.081f
71 #define VPHAL_HDR_EOTF_COEFF2_TRADITIONNAL_GAMMA (1.0f / 4.5f)
72 #define VPHAL_HDR_EOTF_COEFF3_TRADITIONNAL_GAMMA (1.0f / 1.099f)
73 #define VPHAL_HDR_EOTF_COEFF4_TRADITIONNAL_GAMMA (0.099f / 1.099f)
74 #define VPHAL_HDR_EOTF_COEFF5_TRADITIONNAL_GAMMA (1.0f / 0.45f)
75 
76 #define VPHAL_HDR_OETF_COEFF1_TRADITIONNAL_GAMMA 0.018f
77 #define VPHAL_HDR_OETF_COEFF2_TRADITIONNAL_GAMMA 4.5f
78 #define VPHAL_HDR_OETF_COEFF3_TRADITIONNAL_GAMMA 1.099f
79 #define VPHAL_HDR_OETF_COEFF4_TRADITIONNAL_GAMMA (-0.099f)
80 #define VPHAL_HDR_OETF_COEFF5_TRADITIONNAL_GAMMA 0.45f
81 
82 #define VPHAL_HDR_EOTF_COEFF1_TRADITIONNAL_GAMMA_BT1886 (-0.0f)
83 #define VPHAL_HDR_EOTF_COEFF2_TRADITIONNAL_GAMMA_BT1886 0.0f
84 #define VPHAL_HDR_EOTF_COEFF3_TRADITIONNAL_GAMMA_BT1886 1.0f
85 #define VPHAL_HDR_EOTF_COEFF4_TRADITIONNAL_GAMMA_BT1886 0.0f
86 #define VPHAL_HDR_EOTF_COEFF5_TRADITIONNAL_GAMMA_BT1886 2.4f
87 
88 #define VPHAL_HDR_EOTF_COEFF1_TRADITIONNAL_GAMMA_SRGB 0.04045f
89 #define VPHAL_HDR_EOTF_COEFF2_TRADITIONNAL_GAMMA_SRGB (1.0f / 12.92f)
90 #define VPHAL_HDR_EOTF_COEFF3_TRADITIONNAL_GAMMA_SRGB (1.0f / 1.055f)
91 #define VPHAL_HDR_EOTF_COEFF4_TRADITIONNAL_GAMMA_SRGB (0.055f / 1.055f)
92 #define VPHAL_HDR_EOTF_COEFF5_TRADITIONNAL_GAMMA_SRGB 2.4f
93 
94 #define VPHAL_HDR_OETF_COEFF1_TRADITIONNAL_GAMMA_SRGB 0.0031308f
95 #define VPHAL_HDR_OETF_COEFF2_TRADITIONNAL_GAMMA_SRGB 12.92f
96 #define VPHAL_HDR_OETF_COEFF3_TRADITIONNAL_GAMMA_SRGB 1.055f
97 #define VPHAL_HDR_OETF_COEFF4_TRADITIONNAL_GAMMA_SRGB (-0.055f)
98 #define VPHAL_HDR_OETF_COEFF5_TRADITIONNAL_GAMMA_SRGB (1.0f / 2.4f)
99 
100 #define VPHAL_HDR_EOTF_COEFF1_SMPTE_ST2084 -0.8359375f
101 #define VPHAL_HDR_EOTF_COEFF2_SMPTE_ST2084 18.8515625f
102 #define VPHAL_HDR_EOTF_COEFF3_SMPTE_ST2084 -18.6875f
103 #define VPHAL_HDR_EOTF_COEFF4_SMPTE_ST2084 6.277394636015326f
104 #define VPHAL_HDR_EOTF_COEFF5_SMPTE_ST2084 0.012683313515656f
105 
106 #define VPHAL_HDR_OETF_COEFF1_SMPTE_ST2084 0.8359375f
107 #define VPHAL_HDR_OETF_COEFF2_SMPTE_ST2084 18.8515625f
108 #define VPHAL_HDR_OETF_COEFF3_SMPTE_ST2084 18.6875f
109 #define VPHAL_HDR_OETF_COEFF4_SMPTE_ST2084 0.1593017578125f
110 #define VPHAL_HDR_OETF_COEFF5_SMPTE_ST2084 78.84375f
111 
112 #define VPHAL_HDR_TONE_MAPPING_PIVOT_POINT_X1 0.03125f
113 #define VPHAL_HDR_TONE_MAPPING_PIVOT_POINT_X2 0.09375f
114 #define VPHAL_HDR_TONE_MAPPING_PIVOT_POINT_X3 0.125f
115 #define VPHAL_HDR_TONE_MAPPING_PIVOT_POINT_X4 0.21875f
116 #define VPHAL_HDR_TONE_MAPPING_PIVOT_POINT_X5 0.40625f
117 
118 #define VPHAL_HDR_TONE_MAPPING_SLOPE0 22.4f
119 #define VPHAL_HDR_TONE_MAPPING_SLOPE1 3.2f
120 #define VPHAL_HDR_TONE_MAPPING_SLOPE2 1.6f
121 #define VPHAL_HDR_TONE_MAPPING_SLOPE3 0.426666667f
122 #define VPHAL_HDR_TONE_MAPPING_SLOPE4 0.053333333f
123 #define VPHAL_HDR_TONE_MAPPING_SLOPE5 0.0f
124 
125 #define VPHAL_HDR_TONE_MAPPING_INTERCEPT0 0.0f
126 #define VPHAL_HDR_TONE_MAPPING_INTERCEPT1 0.6f
127 #define VPHAL_HDR_TONE_MAPPING_INTERCEPT2 0.75f
128 #define VPHAL_HDR_TONE_MAPPING_INTERCEPT3 0.896666667f
129 #define VPHAL_HDR_TONE_MAPPING_INTERCEPT4 0.978333333f
130 #define VPHAL_HDR_TONE_MAPPING_INTERCEPT5 1.0f
131 
132 #define VPHAL_HDR_INVERSE_TONE_MAPPING_PIVOT_POINT_X1 0.03125f
133 #define VPHAL_HDR_INVERSE_TONE_MAPPING_PIVOT_POINT_X2 0.03125f
134 #define VPHAL_HDR_INVERSE_TONE_MAPPING_PIVOT_POINT_X3 0.03125f
135 #define VPHAL_HDR_INVERSE_TONE_MAPPING_PIVOT_POINT_X4 0.03125f
136 #define VPHAL_HDR_INVERSE_TONE_MAPPING_PIVOT_POINT_X5 0.03125f
137 
138 #define VPHAL_HDR_INVERSE_TONE_MAPPING_SLOPE0 4.266666666666667f
139 #define VPHAL_HDR_INVERSE_TONE_MAPPING_SLOPE1 0.1486810551558753f
140 #define VPHAL_HDR_INVERSE_TONE_MAPPING_SLOPE2 0.1486810551558753f
141 #define VPHAL_HDR_INVERSE_TONE_MAPPING_SLOPE3 0.1486810551558753f
142 #define VPHAL_HDR_INVERSE_TONE_MAPPING_SLOPE4 0.1486810551558753f
143 #define VPHAL_HDR_INVERSE_TONE_MAPPING_SLOPE5 0.1486810551558753f
144 
145 #define VPHAL_HDR_INVERSE_TONE_MAPPING_INTERCEPT0 0.0f
146 #define VPHAL_HDR_INVERSE_TONE_MAPPING_INTERCEPT1 0.1286870503597122f
147 #define VPHAL_HDR_INVERSE_TONE_MAPPING_INTERCEPT2 0.1286870503597122f
148 #define VPHAL_HDR_INVERSE_TONE_MAPPING_INTERCEPT3 0.1286870503597122f
149 #define VPHAL_HDR_INVERSE_TONE_MAPPING_INTERCEPT4 0.1286870503597122f
150 #define VPHAL_HDR_INVERSE_TONE_MAPPING_INTERCEPT5 0.1286870503597122f
151 
152 #define HDR_MANDATORY_KERNEL_BLOCK_WIDTH  16
153 #define HDR_MANDATORY_KERNEL_BLOCK_HEIGHT 8
154 
155 #define MAX_CSC_COEFF_VAL_ICL 3.9921875  // (4.0 * 511.0 / 512.0)
156 #define ARRAY_SIZE(a)  (sizeof(a) / sizeof(a[0]))
157 
158 #define CONFIG_ENTRY_INITIALIZER(CCM, PWLF, CCMExt1, GamutClamp1, CCMExt2, GamutClamp2, Invalid) \
159     ((CCM) | (PWLF) << 3 | (CCMExt1) << 6 | (GamutClamp1) << 9 | (CCMExt2) << 10 | (GamutClamp2) << 13 | (Invalid) << 15)
160 
161 #define VPHAL_HDR_MODE_3DLUT_MASK                   0x10
162 #define VPHAL_HDR_MODE_VEBOX_3DLUT_MASK             0x20
163 #define VPHAL_HDR_MODE_VEBOX_3DLUT33_MASK           0x30
164 #define VPHAL_HDR_MODE_VEBOX_1DLUT_MASK             0x40
165 #define VPHAL_HDR_MODE_VEBOX_1DLUT_3DLUT_MASK       0x50
166 
167 #define HDR_DEFAULT_MAXCLL    4000
168 #define HDR_DEFAULT_MAXFALL   400
169 
170 typedef float Mat3[3][3];
171 typedef float Vec3[3];
172 
173 //!
174 //! \brief HDR mode enum
175 //!
176 typedef enum _VPHAL_HDR_MODE
177 {
178     VPHAL_HDR_MODE_NONE = 0,
179     VPHAL_HDR_MODE_TONE_MAPPING,
180     VPHAL_HDR_MODE_INVERSE_TONE_MAPPING,
181     VPHAL_HDR_MODE_H2H,
182     VPHAL_HDR_MODE_S2S,
183     VPHAL_HDR_MODE_BT1886_DEGAMMA,
184     VPHAL_HDR_MODE_TONE_MAPPING_AUTO_MODE,
185     VPHAL_HDR_MODE_H2H_AUTO_MODE,
186     VPHAL_HDR_MODE_TONE_MAPPING_3DLUT               = VPHAL_HDR_MODE_TONE_MAPPING | VPHAL_HDR_MODE_3DLUT_MASK,
187     VPHAL_HDR_MODE_INVERSE_TONE_MAPPING_3DLUT       = VPHAL_HDR_MODE_INVERSE_TONE_MAPPING | VPHAL_HDR_MODE_3DLUT_MASK,
188     VPHAL_HDR_MODE_H2H_3DLUT                        = VPHAL_HDR_MODE_H2H | VPHAL_HDR_MODE_3DLUT_MASK,
189     VPHAL_HDR_MODE_BT1886_DEGAMMA_3DLUT             = VPHAL_HDR_MODE_BT1886_DEGAMMA | VPHAL_HDR_MODE_3DLUT_MASK,
190     VPHAL_HDR_MODE_TONE_MAPPING_AUTO_MODE_3DLUT     = VPHAL_HDR_MODE_TONE_MAPPING_AUTO_MODE | VPHAL_HDR_MODE_3DLUT_MASK,
191     VPHAL_HDR_MODE_H2H_VEBOX_3DLUT                  = VPHAL_HDR_MODE_H2H | VPHAL_HDR_MODE_VEBOX_3DLUT_MASK,
192     VPHAL_HDR_MODE_TONE_MAPPING_VEBOX_3DLUT         = VPHAL_HDR_MODE_TONE_MAPPING | VPHAL_HDR_MODE_VEBOX_3DLUT_MASK,
193     VPHAL_HDR_MODE_H2H_VEBOX_3DLUT33                = VPHAL_HDR_MODE_H2H | VPHAL_HDR_MODE_VEBOX_3DLUT33_MASK,
194     VPHAL_HDR_MODE_TONE_MAPPING_VEBOX_3DLUT33       = VPHAL_HDR_MODE_TONE_MAPPING | VPHAL_HDR_MODE_VEBOX_3DLUT33_MASK,
195     VPHAL_HDR_MODE_H2H_VEBOX_1DLUT                  = VPHAL_HDR_MODE_H2H | VPHAL_HDR_MODE_VEBOX_1DLUT_MASK,
196     VPHAL_HDR_MODE_TONE_MAPPING_VEBOX_1DLUT         = VPHAL_HDR_MODE_TONE_MAPPING | VPHAL_HDR_MODE_VEBOX_1DLUT_MASK,
197     VPHAL_HDR_MODE_TONE_MAPPING_VEBOX_1DLUT_3DLUT   = VPHAL_HDR_MODE_VEBOX_1DLUT_3DLUT_MASK,
198 } VPHAL_HDR_MODE;
199 
200 typedef union _HDRStageConfigEntry
201 {
202     uint16_t value;
203     struct
204     {
205         uint16_t CCM : 3;
206         uint16_t PWLF : 3;
207         uint16_t CCMExt1 : 3;
208         uint16_t GamutClamp1 : 1;
209         uint16_t CCMExt2 : 3;
210         uint16_t GamutClamp2 : 1;
211         uint16_t Reserved : 1;
212         uint16_t Invalid : 1;
213     };
214 } HDRStageConfigEntry;
215 
216 //!
217 //! \brief HDR LUT mode enum
218 //!
219 typedef enum _VPHAL_HDR_LUT_MODE
220 {
221     VPHAL_HDR_LUT_MODE_NONE,
222     VPHAL_HDR_LUT_MODE_2D,
223     VPHAL_HDR_LUT_MODE_3D,
224     VPHAL_HDR_LUT_MODE_NUM
225 } VPHAL_HDR_LUT_MODE;
226 C_ASSERT(VPHAL_HDR_LUT_MODE_NUM == 3);
227 
228 //!
229 //! Structure VPHAL_EOTF_TYPE
230 //! \brief Electronic-Optimal Transfer Function type
231 //!
232 typedef enum _VPHAL_HDR_EOTF_TYPE
233 {
234     VPHAL_HDR_EOTF_INVALID = -1,
235     VPHAL_HDR_EOTF_TRADITIONAL_GAMMA_SDR = 0,
236     VPHAL_HDR_EOTF_TRADITIONAL_GAMMA_HDR,
237     VPHAL_HDR_EOTF_SMPTE_ST2084,
238     VPHAL_HDR_EOTF_BT1886,
239     VPHAL_HDR_EOTF_FUTURE_EOTF
240 } VPHAL_HDR_EOTF_TYPE;
241 
242 //!
243 //! Structure VPHAL_CCM_TYPE
244 //! \brief Color Correction Matrix Type
245 //!
246 typedef enum _VPHAL_HDR_CCM_TYPE
247 {
248     VPHAL_HDR_CCM_NONE = 0,
249     VPHAL_HDR_CCM_BT2020_TO_BT601_BT709_MATRIX,
250     VPHAL_HDR_CCM_BT601_BT709_TO_BT2020_MATRIX,
251     VPHAL_HDR_CCM_BT2020_TO_MONITOR_MATRIX,
252     VPHAL_HDR_CCM_MONITOR_TO_BT2020_MATRIX,
253     VPHAL_HDR_CCM_MONITOR_TO_BT709_MATRIX
254 } VPHAL_HDR_CCM_TYPE;
255 
256 //!
257 //! Structure VPHAL_CSC_TYPE
258 //! \brief Color Space Coversion Type
259 //!
260 typedef enum _VPHAL_HDR_CSC_TYPE
261 {
262     VPHAL_HDR_CSC_NONE = 0,
263     VPHAL_HDR_CSC_YUV_TO_RGB_BT601,
264     VPHAL_HDR_CSC_YUV_TO_RGB_BT709,
265     VPHAL_HDR_CSC_YUV_TO_RGB_BT2020,
266     VPHAL_HDR_CSC_RGB_TO_YUV_BT601,
267     VPHAL_HDR_CSC_RGB_TO_YUV_BT709,
268     VPHAL_HDR_CSC_RGB_TO_YUV_BT709_FULLRANGE,
269     VPHAL_HDR_CSC_RGB_TO_YUV_BT2020
270 } VPHAL_HDR_CSC_TYPE;
271 
272 //!
273 //! Structure VPHAL_HDR_PARAMS
274 //! \brief High Dynamic Range parameters
275 //!
276 typedef struct _VPHAL_HDR_PARAMS
277 {
278     VPHAL_HDR_EOTF_TYPE EOTF                 = VPHAL_HDR_EOTF_INVALID;    //!< Electronic-Optimal Transfer Function
279     uint16_t display_primaries_x[3]          = {0};                       //!< Display Primaries X chromaticity coordinates
280     uint16_t display_primaries_y[3]          = {0};                       //!< Display Primaries Y chromaticity coordinates
281     uint16_t white_point_x                   = 0;                         //!< X Chromaticity coordinate of White Point
282     uint16_t white_point_y                   = 0;                         //!< Y Chromaticity coordinate of White Point
283     uint16_t max_display_mastering_luminance = 0;                         //!< The nominal maximum display luminance of the mastering display
284     uint16_t min_display_mastering_luminance = 0;                         //!< The nominal minimum display luminance of the mastering display
285     uint16_t MaxCLL                          = 0;                         //!< Max Content Light Level
286     uint16_t MaxFALL                         = 0;                         //!< Max Frame Average Light Level
287     bool     bAutoMode                       = false;                     //!< Hdr auto mode.
288     bool     bPathKernel                     = false;                     //!< Hdr path config to use kernel
289 } VPHAL_HDR_PARAMS, *PVPHAL_HDR_PARAMS;
290 
291 #endif  // __VP_COMMON_HDR_H__
292