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