1 /* 2 * Copyright (c) 2009-2021, 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 vphal_common.h 24 //! \brief clarify common utilities for vphal 25 //! \details clarify common utilities for vphal including: 26 //! some marcro, enum, union, structure, function 27 //! 28 #ifndef __VPHAL_COMMON_H__ 29 #define __VPHAL_COMMON_H__ 30 31 #if EMUL || VPHAL_LIB 32 33 #include "support.h" 34 35 #endif // EMUL || VPHAL_LIB 36 37 #include "mos_os.h" 38 #include "vphal_common_hdr.h" 39 #include "media_common_defs.h" 40 41 #ifdef __cplusplus 42 extern "C" { 43 #endif 44 45 //! 46 //! \def DBG_TEXT(txt) 47 //! Allow certain \a txt fields to be present only on DEBUG builds. 48 //! 49 #if _DEBUG 50 #define DBG_TEXT(txt) txt 51 #else 52 #define DBG_TEXT(txt) "" 53 #endif 54 55 #ifndef ABS 56 //! 57 //! \def ABS( x ) 58 //! Calcualte absolute value of \a x. 59 //! 60 #define ABS(a) (((a) < 0) ? (-(a)) : (a)) 61 #endif 62 63 //! 64 //! \def OUT_OF_BOUNDS(a, min, max) 65 //! Calcualte if \a a out the range of [\a min, \a max]. 66 //! 67 #define OUT_OF_BOUNDS(a, min, max) ( ((a) < (min)) || ((a) > (max)) ) 68 69 //! 70 //! \def WITHIN_BOUNDS(a, min, max) 71 //! Calcualte if \a a within the range of [\a min, \a max]. 72 //! 73 #define WITHIN_BOUNDS(a, min, max) ( ((a) >= (min)) && ((a) <= (max)) ) 74 75 //! 76 //! \def VPHAL_ABS(x) 77 //! Calcualte the Abslute value of \a x. 78 //! 79 #define VPHAL_ABS(x) (((x) > 0) ? (x) : -(x)) 80 81 #define VPHAL_PI 3.14159265358979324f //!< Definition the const pi 82 83 //! 84 //! \def SAME_SIZE_RECT(rect1, rect2) 85 //! Compare if the size of two rectangles is the same 86 //! 87 #define SAME_SIZE_RECT(rect1, rect2) \ 88 (((rect1).right - (rect1).left == (rect2).right - (rect2).left) && \ 89 ((rect1).bottom - (rect1).top == (rect2).bottom - (rect2).top)) 90 91 //! 92 //! \def RECT1_EQUALS_RECT2(rect1, rect2) 93 //! Compare if two rectangles has the same coordinate 94 //! 95 #define RECT1_EQUALS_RECT2(rect1, rect2) \ 96 (((rect1).left == (rect2).left) && ((rect1).top == (rect2).top) && \ 97 ((rect1).right == (rect2).right) && ((rect1).bottom == (rect2).bottom)) 98 99 //! 100 //! \def RECT1_CONTAINS_RECT2(rect1, rect2) 101 //! Compare if rectangle \a rect1 contains rectangle \a rect2 in coordinate 102 //! 103 #define RECT1_CONTAINS_RECT2(rect1, rect2) \ 104 (((rect1).left <= (rect2).left) && ((rect1).top <= (rect2).top) && \ 105 ((rect1).right >= (rect2).right) && ((rect1).bottom >= (rect2).bottom)) 106 107 //! 108 //! \def RECT1_CONTAINS_RECT2_ONEPIXELBIAS(rect1, rect2) 109 //! Compare if rectangle \a rect1 contains rectangle \a rect2 in coordinate, One pixel bias is allowed 110 //! 111 #define RECT1_CONTAINS_RECT2_ONEPIXELBIAS(rect1, rect2) \ 112 (((rect1).left <= ((rect2).left + 1)) && ((rect1).top <= ((rect2).top + 1)) && \ 113 (((rect1).right + 1) >= (rect2).right) && (((rect1).bottom + 1) >= (rect2).bottom)) 114 115 //! 116 //! \def RECT1_OUTSIDE_RECT2(rect1, rect2) 117 //! Compare if the rectangle \a rect1 is outside the rectangle \a rect2 at least partly in coordinate 118 //! 119 #define RECT1_OUTSIDE_RECT2(rect1, rect2) \ 120 (((rect1).left >= (rect2).right) || ((rect1).top >= (rect2).bottom) || \ 121 ((rect1).right <= (rect2).left) || ((rect1).bottom <= (rect2).top)) 122 123 //! 124 // \def DEGREE_TO_RADIAN(degree) 125 // Convert a degree value \a degree to radian. 126 //! 127 #define DEGREE_TO_RADIAN(degree) (degree) * (VPHAL_PI) / 180 128 #define AVS_TBL_COEF_PREC 6 //!< Table coef precision (after decimal point 129 #define SAME_SAMPLE_THRESHOLD 1000 //!< When checking whether 2 timestamps are the same, leave room for some error 130 131 //! 132 //! \def MEDIA_IS_HDCONTENT(dwWidth, dwHeight) 133 //! Determine if the size of content is HD 134 //! 135 #define MEDIA_SDCONTENT_MAX_WIDTH 720 136 #define MEDIA_SDCONTENT_MAX_PAL_HEIGHT 576 137 #define MEDIA_SDCONTENT_MAX_SW_WIDTH 768 138 #define MEDIA_IS_HDCONTENT(dwWidth, dwHeight) ((dwWidth > MEDIA_SDCONTENT_MAX_SW_WIDTH) || (dwHeight > MEDIA_SDCONTENT_MAX_PAL_HEIGHT)) 139 140 //! \brief Surface cache attributes 141 //! 142 #define VPHAL_SET_SURF_MEMOBJCTL(VpField, GmmUsageEnum) \ 143 { \ 144 Usage = GmmUsageEnum; \ 145 MemObjCtrl = pOsInterface->pfnCachePolicyGetMemoryObject(Usage, pOsInterface->pfnGetGmmClientContext(pOsInterface)); \ 146 VpField = MemObjCtrl.DwordValue; \ 147 } 148 149 #define VPHAL_MEMORY_OBJECT_CONTROL uint32_t 150 151 // ProcAmp Default Values 152 #define PROCAMP_BRIGHTNESS_MIN -100.0F 153 #define PROCAMP_BRIGHTNESS_MAX 100.0F 154 #define PROCAMP_BRIGHTNESS_DEFAULT 0.0F 155 #define PROCAMP_BRIGHTNESS_STEP 0.1F 156 #define PROCAMP_CONTRAST_MIN 0.0F 157 #define PROCAMP_CONTRAST_MAX 10.0F 158 #define PROCAMP_CONTRAST_DEFAULT 1.0F 159 #define PROCAMP_CONTRAST_STEP 0.01F 160 #define PROCAMP_HUE_MIN -180.0F 161 #define PROCAMP_HUE_MAX 180.0F 162 #define PROCAMP_HUE_DEFAULT 0.0F 163 #define PROCAMP_HUE_STEP 0.1F 164 #define PROCAMP_SATURATION_MIN 0.0F 165 #define PROCAMP_SATURATION_MAX 10.0F 166 #define PROCAMP_SATURATION_DEFAULT 1.0F 167 #define PROCAMP_SATURATION_STEP 0.01F 168 169 // Denoise Default Values 170 #define NOISEREDUCTION_MIN 0.0F 171 #define NOISEREDUCTION_MAX 64.0F 172 #define NOISEREDUCTION_DEFAULT 0.0F 173 #define NOISEREDUCTION_STEP 1.0F 174 175 // Sharpness Values 176 #define EDGEENHANCEMENT_MIN 0.0F 177 #define EDGEENHANCEMENT_MAX 64.0F 178 #define EDGEENHANCEMENT_DEFAULT 44.0F 179 #define EDGEENHANCEMENT_STEP 1.0F 180 #define IEF_STRONG_EDGE_WEIGHT 7 181 #define IEF_REGULAR_WEIGHT 2 182 #define IEF_STRONG_EDGE_THRESHOLD 8 183 184 // Skin Tone Detection/Enhancement values 185 #define STE_MIN 0.0F 186 #define STE_MAX 9.0F 187 #define STE_DEFAULT 3.0F 188 #define STE_STEP 1.0F 189 190 // Total Color Correction values 191 #define TCC_MIN 0.0F 192 #define TCC_MAX 255.0F 193 #define TCC_DEFAULT 160.0F 194 #define TCC_STEP 1.0F 195 196 // Adaptive Contrast Enhancement values 197 #define ACE_LEVEL_DEFAULT 5 198 #define ACE_STRENGTH_DEFAULT 1 199 200 // Compositing Block size 201 #define VPHAL_COMP_BLOCK_WIDTH 16 202 #define VPHAL_COMP_BLOCK_HEIGHT 16 203 204 // NLAS Default Values 205 #define NLAS_VERTICALCROP_MIN 0.0F 206 #define NLAS_VERTICALCROP_MAX 1.0F 207 #define NLAS_VERTICALCROP_DEFAULT 0.0F 208 #define NLAS_VERTICALCROP_STEP 0.001F 209 #define NLAS_HLINEARREGION_MIN 0.0F 210 #define NLAS_HLINEARREGION_MAX 1.0F 211 #define NLAS_HLINEARREGION_DEFAULT 1.0F 212 #define NLAS_HLINEARREGION_STEP 0.001F 213 #define NLAS_NONLINEARCROP_MIN 0.0F 214 #define NLAS_NONLINEARCROP_MAX 1.0F 215 #define NLAS_NONLINEARCROP_DEFAULT 0.0F 216 #define NLAS_NONLINEARCROP_STEP 0.001F 217 218 #define VPHAL_MAX_SOURCES 65 //!< worst case: 64 sub-streams + 1 pri video 219 #define VPHAL_MAX_CHANNELS 2 220 #define VPHAL_MAX_TARGETS 8 //!< multi output support 221 #define VPHAL_MAX_FUTURE_FRAMES 18 //!< maximum future frames supported in VPHAL 222 223 #define VPHAL_TOP_FIELD 0 224 #define VPHAL_BOTTOM_FIELD 1 225 #define VPHAL_TOP_FIELD_FIRST 0 226 #define VPHAL_BOTTOM_FIELD_FIRST 1 227 228 typedef struct _VPHAL_COMPOSITE_CACHE_CNTL 229 { 230 bool bL3CachingEnabled; 231 VPHAL_MEMORY_OBJECT_CONTROL PrimaryInputSurfMemObjCtl; 232 VPHAL_MEMORY_OBJECT_CONTROL InputSurfMemObjCtl; 233 VPHAL_MEMORY_OBJECT_CONTROL TargetSurfMemObjCtl; 234 } VPHAL_COMPOSITE_CACHE_CNTL, *PVPHAL_COMPOSITE_CACHE_CNTL; 235 236 typedef struct _VPHAL_DNDI_CACHE_CNTL 237 { 238 bool bL3CachingEnabled; 239 VPHAL_MEMORY_OBJECT_CONTROL CurrentInputSurfMemObjCtl; 240 VPHAL_MEMORY_OBJECT_CONTROL PreviousInputSurfMemObjCtl; 241 VPHAL_MEMORY_OBJECT_CONTROL STMMInputSurfMemObjCtl; 242 VPHAL_MEMORY_OBJECT_CONTROL STMMOutputSurfMemObjCtl; 243 VPHAL_MEMORY_OBJECT_CONTROL DnOutSurfMemObjCtl; 244 VPHAL_MEMORY_OBJECT_CONTROL CurrentOutputSurfMemObjCtl; 245 VPHAL_MEMORY_OBJECT_CONTROL StatisticsOutputSurfMemObjCtl; 246 VPHAL_MEMORY_OBJECT_CONTROL LaceOrAceOrRgbHistogramSurfCtrl; 247 VPHAL_MEMORY_OBJECT_CONTROL AlphaOrVignetteSurfMemObjCtl; 248 VPHAL_MEMORY_OBJECT_CONTROL SkinScoreSurfMemObjCtl; 249 VPHAL_MEMORY_OBJECT_CONTROL LaceLookUpTablesSurfMemObjCtl; 250 VPHAL_MEMORY_OBJECT_CONTROL Vebox3DLookUpTablesSurfMemObjCtl; 251 } VPHAL_DNDI_CACHE_CNTL, *PVPHAL_DNDI_CACHE_CNTL; 252 253 typedef struct _VPHAL_LACE_CACHE_CNTL 254 { 255 // LACE would reuse the bL3CachingEnabled of VEBOX's cache control 256 VPHAL_MEMORY_OBJECT_CONTROL FrameHistogramSurfaceMemObjCtl; 257 VPHAL_MEMORY_OBJECT_CONTROL AggregatedHistogramSurfaceMemObjCtl; 258 VPHAL_MEMORY_OBJECT_CONTROL StdStatisticsSurfaceMemObjCtl; 259 VPHAL_MEMORY_OBJECT_CONTROL PwlfInSurfaceMemObjCtl; 260 VPHAL_MEMORY_OBJECT_CONTROL PwlfOutSurfaceMemObjCtl; 261 VPHAL_MEMORY_OBJECT_CONTROL WeitCoefSurfaceMemObjCtl; 262 VPHAL_MEMORY_OBJECT_CONTROL GlobalToneMappingCurveLUTSurfaceMemObjCtl; 263 } VPHAL_LACE_CACHE_CNTL, *PVPHAL_LACE_CACHE_CNTL; 264 265 typedef struct _VPHAL_16_ALIGN_CACHE_CNTL 266 { 267 bool bL3CachingEnabled; 268 VPHAL_MEMORY_OBJECT_CONTROL SourceSurfMemObjCtl; 269 VPHAL_MEMORY_OBJECT_CONTROL TargetSurfMemObjCtl; 270 VPHAL_MEMORY_OBJECT_CONTROL SamplerParamsSurfMemObjCtl; 271 VPHAL_MEMORY_OBJECT_CONTROL SamplerParamsStatsSurfMemObjCtl; 272 }VPHAL_16_ALIGN_CACHE_CNTL, *PVPHAL_16_ALIGN_CACHE_CNTL; 273 274 typedef struct _VPHAL_FAST1TON_CACHE_CNTL 275 { 276 bool bL3CachingEnabled; 277 VPHAL_MEMORY_OBJECT_CONTROL SourceSurfMemObjCtl; 278 VPHAL_MEMORY_OBJECT_CONTROL TargetSurfMemObjCtl; 279 VPHAL_MEMORY_OBJECT_CONTROL SamplerParamsSurfMemObjCtl; 280 VPHAL_MEMORY_OBJECT_CONTROL SamplerParamsStatsSurfMemObjCtl; 281 }VPHAL_FAST1TON_CACHE_CNTL, *PVPHAL_FAST1TON_CACHE_CNTL; 282 283 typedef struct _VPHAL_HDR_CACHE_CNTL 284 { 285 bool bL3CachingEnabled; 286 VPHAL_MEMORY_OBJECT_CONTROL SourceSurfMemObjCtl; 287 VPHAL_MEMORY_OBJECT_CONTROL TargetSurfMemObjCtl; 288 VPHAL_MEMORY_OBJECT_CONTROL Lut2DSurfMemObjCtl; 289 VPHAL_MEMORY_OBJECT_CONTROL Lut3DSurfMemObjCtl; 290 VPHAL_MEMORY_OBJECT_CONTROL CoeffSurfMemObjCtl; 291 } VPHAL_HDR_CACHE_CNTL, *PVPHAL_HDR_CACHE_CNTL; 292 293 //! 294 //! \brief Feature specific cache control settings 295 //! 296 typedef struct _VPHAL_RENDER_CACHE_CNTL 297 { 298 // Input 299 bool bDnDi; 300 bool bCompositing; 301 bool bLace; 302 303 // Output 304 VPHAL_DNDI_CACHE_CNTL DnDi; 305 VPHAL_COMPOSITE_CACHE_CNTL Composite; 306 VPHAL_LACE_CACHE_CNTL Lace; 307 } VPHAL_RENDER_CACHE_CNTL, *PVPHAL_RENDER_CACHE_CNTL; 308 309 //! 310 //! \brief Vphal Rotation Mode enum 311 //! 312 typedef enum _VPHAL_ROTATION 313 { 314 VPHAL_ROTATION_IDENTITY = ROTATION_IDENTITY , //!< Rotation 0 degrees 315 VPHAL_ROTATION_90 = ROTATION_90 , //!< Rotation 90 degrees 316 VPHAL_ROTATION_180 = ROTATION_180 , //!< Rotation 180 degrees 317 VPHAL_ROTATION_270 = ROTATION_270 , //!< Rotation 270 degrees 318 VPHAL_MIRROR_HORIZONTAL = ROTATION_MIRROR_HORIZONTAL , //!< Horizontal Mirror 319 VPHAL_MIRROR_VERTICAL = ROTATION_MIRROR_VERTICAL , //!< Vertical Mirror 320 VPHAL_ROTATE_90_MIRROR_VERTICAL = ROTATION_90_MIRROR_VERTICAL , //!< 90 + V Mirror 321 VPHAL_ROTATE_90_MIRROR_HORIZONTAL = ROTATION_90_MIRROR_HORIZONTAL //!< 90 + H Mirror 322 } VPHAL_ROTATION; 323 324 //! 325 //! \brief Vphal Palette Type Mode enum 326 //! 327 typedef enum _VPHAL_PALETTE_TYPE 328 { 329 VPHAL_PALETTE_NONE = 0, 330 VPHAL_PALETTE_YCbCr_8, //!< 8-bit depth - AYUV palette 331 VPHAL_PALETTE_ARGB_8, //!< 8-bit depth - ARGB palette 332 VPHAL_PALETTE_AVYU_8 //!< 8-bit depth - YUY2 palette 333 } VPHAL_PALETTE_TYPE; 334 335 //! 336 //! \brief Vphal Chroma Siting enum 337 //! 338 typedef enum _VPHAL_CHROMA_SITING 339 { 340 CHROMA_SITING_NONE = 0, 341 CHROMA_SITING_HORZ_LEFT = 1 << 0, 342 CHROMA_SITING_HORZ_CENTER = 1 << 1, 343 CHROMA_SITING_HORZ_RIGHT = 1 << 2, 344 CHROMA_SITING_VERT_TOP = 1 << 4, 345 CHROMA_SITING_VERT_CENTER = 1 << 5, 346 CHROMA_SITING_VERT_BOTTOM = 1 << 6, 347 } VPHAL_CHROMA_SITING; 348 349 //! 350 //! \brief Vphal Output chroma configuration enum 351 //! 352 typedef enum _VPHAL_CHROMA_SUBSAMPLING 353 { 354 CHROMA_SUBSAMPLING_TOP_CENTER = 0, 355 CHROMA_SUBSAMPLING_CENTER_CENTER, 356 CHROMA_SUBSAMPLING_BOTTOM_CENTER, 357 CHROMA_SUBSAMPLING_TOP_LEFT, 358 CHROMA_SUBSAMPLING_CENTER_LEFT, 359 CHROMA_SUBSAMPLING_BOTTOM_LEFT 360 } VPHAL_CHROMA_SUBSAMPLING; 361 362 //! 363 //! \brief Vphal Gamma Values configuration enum 364 //! 365 typedef enum _VPHAL_GAMMA_VALUE 366 { 367 GAMMA_1P0 = 0, 368 GAMMA_2P2, 369 GAMMA_2P6 370 } VPHAL_GAMMA_VALUE; 371 372 typedef enum _VPHAL_DP_ROTATION_MODE 373 { 374 VPHAL_DP_ROTATION_NV12_AVG = 0, //!< nv12 -> yuy2 by chroma average 375 VPHAL_DP_ROTATION_NV12_NV12 , //!< nv12 -> nv12 376 VPHAL_DP_ROTATION_NV12_REP , //!< nv12 -> yuy2 by chroma repeat 377 VPHAL_DP_ROTATION_NV12_YUY2_NOT_SET //!< nv12 -> yuy2 by chroma average or repeat, decided by scaling mode 378 } VPHAL_DP_ROTATION_MODE; 379 380 //! 381 //! \brief Surface types enum 382 //! IMPORTANT : SurfaceType_Layer[] must be updated to match this enum type 383 //! 384 typedef enum _VPHAL_SURFACE_TYPE 385 { 386 SURF_NONE = 0, 387 SURF_IN_BACKGROUND, 388 SURF_IN_PRIMARY, 389 SURF_IN_SUBSTREAM, 390 SURF_IN_REFERENCE, 391 SURF_OUT_RENDERTARGET, 392 SURF_TYPE_COUNT //!< Keep this line at the end 393 } VPHAL_SURFACE_TYPE; 394 C_ASSERT(SURF_TYPE_COUNT == 6); //!< When adding, update assert & vphal_solo_scenario.cpp 395 396 //! 397 //! \brief Color Spaces enum 398 //! 399 typedef MEDIA_CSPACE VPHAL_CSPACE; 400 401 //! 402 //! Structure VPHAL_GAMMA_TYPE 403 //! \brief GAMMA Function type 404 //! 405 typedef enum _VPHAL_GAMMA_TYPE 406 { 407 VPHAL_GAMMA_NONE = 0, 408 VPHAL_GAMMA_TRADITIONAL_GAMMA, 409 VPHAL_GAMMA_SMPTE_ST2084, 410 VPHAL_GAMMA_BT1886, 411 VPHAL_GAMMA_SRGB, 412 VPHAL_GAMMA_Count 413 } VPHAL_GAMMA_TYPE; 414 C_ASSERT(VPHAL_GAMMA_Count == 5); //!< When adding, update assert 415 416 //! 417 //! \def IS_COLOR_SPACE_BT2020_YUV(_a) 418 //! Check if the color space is BT2020 YUV 419 //! 420 #define IS_COLOR_SPACE_BT2020_YUV(_a) (_a == CSpace_BT2020 || \ 421 _a == CSpace_BT2020_FullRange) 422 423 //! 424 //! \def IS_COLOR_SPACE_BT2020_RGB(_a) 425 //! Check if the color space is BT2020 RGB 426 //! 427 #define IS_COLOR_SPACE_BT2020_RGB(_a) (_a == CSpace_BT2020_RGB || \ 428 _a == CSpace_BT2020_stRGB) 429 430 //! 431 //! \def IS_COLOR_SPACE_BT2020(_a) 432 //! Check if the color space is BT2020 433 //! 434 #define IS_COLOR_SPACE_BT2020(_a) (IS_COLOR_SPACE_BT2020_YUV(_a) || \ 435 IS_COLOR_SPACE_BT2020_RGB(_a)) 436 437 //! 438 //! \def IS_RGB_LIMITED_RANGE(_a) 439 //! Check if RGB limited range 440 //! 441 #define IS_RGB_LIMITED_RANGE(_a) (_a == CSpace_stRGB || \ 442 _a == CSpace_BT2020_stRGB) 443 444 //! 445 //! \def IS_RGB_FULL_RANGE(_a) 446 //! Check if RGB full range 447 //! 448 #define IS_RGB_FULL_RANGE(_a) (_a == CSpace_sRGB || \ 449 _a == CSpace_BT2020_sRGB) 450 451 //! 452 //! \def IS_YUV_LIMITED_RANGE(_a) 453 //! Check if YUV limited range 454 //! 455 #define IS_YUV_LIMITED_RANGE(_a) (_a == CSpace_BT601 || \ 456 _a == CSpace_BT709 || \ 457 _a == CSpace_BT601Gray || \ 458 _a == CSpace_BT2020) 459 460 //! 461 //! \def IS_YUV_FULL_RANGE(_a) 462 //! Check if YUV full range 463 //! 464 #define IS_YUV_FULL_RANGE(_a) (_a == CSpace_BT601_FullRange || \ 465 _a == CSpace_BT709_FullRange || \ 466 _a == CSpace_BT601Gray_FullRange || \ 467 _a == CSpace_BT2020_FullRange) 468 469 //! 470 //! \brief Sample Type enum 471 //! 472 typedef enum _VPHAL_SAMPLE_TYPE 473 { 474 SAMPLE_PROGRESSIVE, 475 SAMPLE_SINGLE_TOP_FIELD, 476 SAMPLE_SINGLE_BOTTOM_FIELD, 477 SAMPLE_INTERLEAVED_EVEN_FIRST_TOP_FIELD, 478 SAMPLE_INTERLEAVED_EVEN_FIRST_BOTTOM_FIELD, 479 SAMPLE_INTERLEAVED_ODD_FIRST_TOP_FIELD, 480 SAMPLE_INTERLEAVED_ODD_FIRST_BOTTOM_FIELD, 481 SAMPLE_INVALID 482 } VPHAL_SAMPLE_TYPE; 483 C_ASSERT(SAMPLE_INVALID == 7); //!< When adding, update assert & vphal_solo_scenario.cpp 484 485 //! 486 //! \brief Frame Format enum 487 //! 488 typedef enum _VPHAL_FRAME_FORMAT 489 { 490 FRAME_FORMAT_PROGRESSIVE, 491 FRAME_FORMAT_INTERLEAVED, 492 FRAME_FORMAT_FIELD 493 } VPHAL_FRAME_FORMAT; 494 495 //! 496 //! \brief Interlaced Scaling Mode enum 497 //! 498 typedef enum _VPHAL_ISCALING_TYPE 499 { 500 ISCALING_NONE, 501 ISCALING_INTERLEAVED_TO_INTERLEAVED, 502 ISCALING_INTERLEAVED_TO_FIELD, 503 ISCALING_FIELD_TO_INTERLEAVED, 504 ISCALING_FIELD_TO_FIELD 505 } VPHAL_ISCALING_TYPE; 506 C_ASSERT(ISCALING_FIELD_TO_FIELD == 4); 507 508 //! 509 //! \brief DI Mode enum 510 //! 511 typedef enum _VPHAL_DI_MODE 512 { 513 DI_MODE_BOB, 514 DI_MODE_ADI 515 } VPHAL_DI_MODE; 516 C_ASSERT(DI_MODE_ADI == 1); //!< When adding, update assert & vphal_solo_scenario.cpp 517 518 //! 519 //! \ brief HVS DN Mode enum 520 //! 521 typedef enum _VPHAL_HVSDN_MODE 522 { 523 HVSDENOISE_AUTO_BDRATE = 0, 524 HVSDENOISE_AUTO_SUBJECTIVE, 525 HVSDENOISE_MANUAL 526 } VPHAL_HVSDN_MODE; 527 528 //! 529 //! \brief Blend Type enum 530 //! 531 typedef enum _VPHAL_BLEND_TYPE 532 { 533 BLEND_NONE = 0, 534 BLEND_SOURCE, 535 BLEND_PARTIAL, 536 BLEND_CONSTANT, 537 BLEND_CONSTANT_SOURCE, 538 BLEND_CONSTANT_PARTIAL, 539 BLEND_XOR_MONO 540 } VPHAL_BLEND_TYPE; 541 C_ASSERT(BLEND_CONSTANT == 3); //!< When adding, update assert & vphal_solo_scenario.cpp 542 543 //! 544 //! \brief Scaling Mode enum 545 //! 546 typedef enum _VPHAL_SCALING_MODE 547 { 548 VPHAL_SCALING_NEAREST = 0, 549 VPHAL_SCALING_BILINEAR, 550 VPHAL_SCALING_AVS, 551 VPHAL_SCALING_ADV_QUALITY // !< Advance Perf mode 552 } VPHAL_SCALING_MODE; 553 C_ASSERT(VPHAL_SCALING_ADV_QUALITY == 3); //!< When adding, update assert & vphal_solo_scenario.cpp 554 555 typedef enum _VPHAL_SCALING_PREFERENCE 556 { 557 VPHAL_SCALING_PREFER_SFC = 0, // SFC is default 558 VPHAL_SCALING_PREFER_COMP, // For Gen9/10, Composition AVS get better quality than SFC AVS 559 VPHAL_SCALING_PREFER_SFC_FOR_VEBOX // if VEBOX is required, use VEBOX + SFC, otherwise use Composistion 560 } VPHAL_SCALING_PREFERENCE; 561 C_ASSERT(VPHAL_SCALING_PREFER_SFC_FOR_VEBOX == 2); //!< When adding, update assert & vphal_solo_scenario.cpp 562 563 //! 564 //! \brief Gamut Mode enum 565 //! 566 typedef enum _VPHAL_GAMUT_MODE 567 { 568 GAMUT_MODE_NONE, 569 GAMUT_MODE_BASIC, 570 GAMUT_MODE_ADVANCED 571 } VPHAL_GAMUT_MODE; 572 C_ASSERT(GAMUT_MODE_ADVANCED == 2); //!< When adding, update assert & vphal_solo_scenario.cpp 573 574 //! 575 //! \brief Composition Report Mode enum 576 //! 577 typedef enum _VPHAL_COMPOSITION_REPORT_MODE 578 { 579 VPHAL_NO_COMPOSITION, //!< No composition , Error Reporting cases 580 VPHAL_INPLACE_COMPOSITION, //!< Inplace Composition 581 VPHAL_LEGACY_COMPOSITION //!< Legacy Composition 582 } VPHAL_COMPOSITION_REPORT_MODE; 583 //! 584 //! \brief DI Report Mode enum 585 //! 586 typedef enum _VPHAL_DI_REPORT_MODE 587 { 588 VPHAL_DI_REPORT_PROGRESSIVE, //!< Progressive output 589 VPHAL_DI_REPORT_BOB, //!< True BOB output 590 VPHAL_DI_REPORT_ADI_BOB, //!< DNDI BOB output 591 VPHAL_DI_REPORT_ADI, //!< ADI output 592 VPHAL_DI_REPORT_FMD //!< FMD output 593 } VPHAL_DI_REPORT_MODE; 594 595 //! 596 //! \brief Colorpack enum 597 //! 598 typedef enum _VPHAL_COLORPACK 599 { 600 VPHAL_COLORPACK_400 = 0, 601 VPHAL_COLORPACK_420, 602 VPHAL_COLORPACK_411, 603 VPHAL_COLORPACK_422, 604 VPHAL_COLORPACK_444, 605 VPHAL_COLORPACK_UNKNOWN 606 } VPHAL_COLORPACK, *PVPHAL_COLORPACK; 607 608 //! 609 //! \brief Output Pipe Mode enum 610 //! \details The output pipe that writes the RenderTarget surface 611 //! 612 typedef enum _VPHAL_OUTPUT_PIPE_MODE 613 { 614 VPHAL_OUTPUT_PIPE_MODE_INVALID = -1, //!< None output pipe selected. This is an invalid state 615 VPHAL_OUTPUT_PIPE_MODE_COMP = 0, //!< Composition output pipe. RenderTarget will be written by Composition 616 VPHAL_OUTPUT_PIPE_MODE_SFC = 1, //!< SFC output pipe. RenderTarget will be written by SFC 617 VPHAL_OUTPUT_PIPE_MODE_VEBOX = 2 //!< Vebox output pipe. RenderTarget will be written by Vebox 618 } VPHAL_OUTPUT_PIPE_MODE, *PVPHAL_OUTPUT_PIPE_MODE; 619 620 //! 621 //! \def SET_VPHAL_OUTPUT_PIPE(_a, _Pipe) 622 //! Set the output pipe 623 //! 624 #define SET_VPHAL_OUTPUT_PIPE(_a, _Pipe) \ 625 { \ 626 (_a->OutputPipe = _Pipe); \ 627 VPHAL_RENDER_NORMALMESSAGE("VPHAL_OUTPUT_PIPE %d", _Pipe); \ 628 } 629 630 //! 631 //! \def IS_VPHAL_OUTPUT_PIPE_INVALID(_a) 632 //! Sheck if the output pipe is invalid 633 //! 634 #define IS_VPHAL_OUTPUT_PIPE_INVALID(_a) (_a->OutputPipe == VPHAL_OUTPUT_PIPE_MODE_INVALID) 635 636 //! 637 //! \def IS_VPHAL_OUTPUT_PIPE_COMP(_a) 638 //! Check if the output pipe is Composition 639 //! 640 #define IS_VPHAL_OUTPUT_PIPE_COMP(_a) (_a->OutputPipe == VPHAL_OUTPUT_PIPE_MODE_COMP) 641 642 //! 643 //! \def IS_VPHAL_OUTPUT_PIPE_SFC(_a) 644 //! Check if the output pipe is SFC 645 //! 646 #define IS_VPHAL_OUTPUT_PIPE_SFC(_a) (_a->OutputPipe == VPHAL_OUTPUT_PIPE_MODE_SFC) 647 648 //! 649 //! \def IS_VPHAL_OUTPUT_PIPE_VEBOX(_a) 650 //! Check if the output pipe is Vebox 651 //! 652 #define IS_VPHAL_OUTPUT_PIPE_VEBOX(_a) (_a->OutputPipe == VPHAL_OUTPUT_PIPE_MODE_VEBOX) 653 654 //! 655 //! \def SET_VPHAL_COMPONENT(_a, _Component) 656 //! Set the Component 657 //! 658 #define SET_VPHAL_COMPONENT(_a, _Component) (_a->Component = _Component) // Set the Component 659 660 //! 661 //! \def SET_VPHAL_MMC_STATE(_a, _bEnableMMC) 662 //! Set the Component 663 //! 664 #define SET_VPHAL_MMC_STATE(_a, _bEnableMMC) (_a->bEnableMMC = _bEnableMMC) // Set the Component 665 666 //----------------------------------------------------------------------------- 667 // Forward declaration - 668 // IMPORTANT - DDI interfaces are NOT to access internal VPHAL states 669 //----------------------------------------------------------------------------- 670 typedef struct _RENDERHAL_INTERFACE *PRENDERHAL_INTERFACE; 671 typedef class MhwVeboxInterface *PMHW_VEBOX_INTERFACE; 672 typedef class MhwSfcInterface *PMHW_SFC_INTERFACE; 673 typedef struct VPHAL_SURFACE *PVPHAL_SURFACE; 674 675 class VphalRenderer; 676 677 class MhwCpInterface; 678 679 //! 680 //! Union VPHAL_COLOR_SAMPLE_8 681 //! \brief Vphal Color Sample 8 bit 682 //! 683 typedef union _VPHAL_COLOR_SAMPLE_8 684 { 685 // ARGB 686 struct 687 { 688 uint8_t B; 689 uint8_t G; 690 uint8_t R; 691 uint8_t A; 692 }; 693 694 // AVYU (YUY2 samples) 695 struct 696 { 697 uint8_t U; 698 uint8_t Y; 699 uint8_t V; 700 uint8_t a; 701 }; 702 703 // AYCbCr (NV12 samples) 704 struct 705 { 706 uint8_t Cr; //!< V 707 uint8_t Cb; //!< U 708 uint8_t YY; //!< Y 709 uint8_t Alpha; 710 }; 711 712 uint32_t dwValue; 713 } VPHAL_COLOR_SAMPLE_8, *PVPHAL_COLOR_SAMPLE_8; 714 715 //! 716 //! Union VPHAL_COLOR_SAMPLE_16 717 //! \brief Vphal Color Sample 16 bit 718 //! 719 typedef union _VPHAL_COLOR_SAMPLE_16 720 { 721 // ARGB 722 struct 723 { 724 int16_t B; 725 int16_t G; 726 int16_t R; 727 int16_t A; 728 }; 729 730 // AVYU 731 struct 732 { 733 int16_t U; 734 int16_t Y; 735 int16_t V; 736 int16_t a; 737 }; 738 739 // AYCbCr 740 struct 741 { 742 int16_t Cr; //!< V 743 int16_t Cb; //!< U 744 int16_t YY; //!< Y 745 int16_t Alpha; 746 }; 747 748 uint32_t Value; 749 } VPHAL_COLOR_SAMPLE_16, *PVPHAL_COLOR_SAMPLE_16; 750 751 //! 752 //! Structure VPHAL_PLANE_OFFSET 753 //! \brief Vphal Plane OffSet 754 //! 755 typedef struct _VPHAL_PLANE_OFFSET 756 { 757 int iLockSurfaceOffset;//!< Locked surface offset 758 int iSurfaceOffset; //!< Plane surface offset 759 int iXOffset; //!< X offset - horizontal offset in pixels 760 int iYOffset; //!< Y offset - vertical offset in pixels 761 } VPHAL_PLANE_OFFSET, *PVPHAL_PLANE_OFFSET; 762 763 //! 764 //! Structure VPHAL_PALETTE 765 //! \brief Vphal Palette 766 //! \details Palette entries: 767 //! - 0 : empty palette 768 //! - -1 : palette allocated but not loaded 769 //! - >0 : palette in use 770 //! 771 typedef struct _VPHAL_PALETTE 772 { 773 VPHAL_PALETTE_TYPE PaletteType; //!< Type of palette 774 VPHAL_CSPACE ColorSpace; //!< ColorSpace of Palette 775 bool bHasAlpha; //!< Alpha is valid 776 int32_t iTotalEntries; //!< Palette entries allocated 777 int32_t iNumEntries; //!< Palette entries in use 778 union 779 { 780 PVPHAL_COLOR_SAMPLE_8 pPalette8; 781 PVPHAL_COLOR_SAMPLE_16 pPalette16; 782 }; 783 } VPHAL_PALETTE, *PVPHAL_PALETTE; 784 785 //! 786 //! Union VPHAL_HALF_PRECISION_FLOAT 787 //! \brief Vphal half precision float type 788 //! 789 typedef union _VPHAL_HALF_PRECISION_FLOAT 790 { 791 struct 792 { 793 uint16_t Mantissa : 10; 794 uint16_t Exponent : 5; 795 uint16_t Sign : 1; 796 }; 797 798 uint16_t value; 799 } VPHAL_HALF_PRECISION_FLOAT, PVPHAL_HALF_PRECISION_FLOAT; 800 801 //! 802 //! Structure VPHAL_BLENDING_PARAMS 803 //! \brief Layer Blending parameters 804 //! 805 typedef struct _VPHAL_BLENDING_PARAMS 806 { 807 VPHAL_BLEND_TYPE BlendType; 808 float fAlpha; 809 } VPHAL_BLENDING_PARAMS, *PVPHAL_BLENDING_PARAMS; 810 811 //! 812 //! Structure VPHAL_LUMAKEY_PARAMS 813 //! \brief Luma Keying parameters 814 //! 815 typedef struct _VPHAL_LUMAKEY_PARAMS 816 { 817 int16_t LumaLow; 818 int16_t LumaHigh; 819 } VPHAL_LUMAKEY_PARAMS, *PVPHAL_LUMAKEY_PARAMS; 820 821 //! 822 //! Structure VPHAL_PROCAMP_PARAMS 823 //! \brief Procamp parameters 824 //! 825 typedef struct _VPHAL_PROCAMP_PARAMS 826 { 827 bool bEnabled; 828 float fBrightness; 829 float fContrast; 830 float fHue; 831 float fSaturation; 832 } VPHAL_PROCAMP_PARAMS, *PVPHAL_PROCAMP_PARAMS; 833 834 //! 835 //! Structure VPHAL_IEF_PARAMS 836 //! \brief IEF parameters - Image Enhancement (Detail) Filter 837 //! 838 typedef struct _VPHAL_IEF_PARAMS 839 { 840 bool bEnabled; 841 bool bSmoothMode; 842 bool bSkintoneTuned; 843 bool bEmphasizeSkinDetail; 844 float fIEFFactor; 845 uint16_t StrongEdgeWeight; 846 uint16_t RegularWeight; 847 uint16_t StrongEdgeThreshold; 848 void* pExtParam; 849 } VPHAL_IEF_PARAMS, *PVPHAL_IEF_PARAMS; 850 851 //! 852 //! Structure VPHAL_DI_PARAMS 853 //! \brief Deinterlacing parameters 854 //! 855 typedef struct _VPHAL_DI_PARAMS 856 { 857 VPHAL_DI_MODE DIMode; //!< DeInterlacing mode 858 bool bEnableFMD; //!< FMD 859 bool bSingleField; //!< Used in frame Recon - if 30fps (one call per sample pair) 860 bool bSCDEnable; //!< Scene change detection 861 } VPHAL_DI_PARAMS, *PVPHAL_DI_PARAMS; 862 863 //! 864 //! \brief Noise Level Enumeration 865 //! 866 typedef enum _VPHAL_NOISELEVEL 867 { 868 NOISELEVEL_DEFAULT, 869 NOISELEVEL_VC1_HD 870 } VPHAL_NOISELEVEL; 871 C_ASSERT(NOISELEVEL_VC1_HD == 1); //!< When adding, update assert & vphal_solo_scenario.cpp 872 873 //! 874 //! Structure VPHAL_HVSDENOISE_PARAMS 875 //! \brief HVS Denoise Parameters - Human Vision System Based Denoise 876 //! 877 typedef struct _VPHAL_HVSDENOISE_PARAMS 878 { 879 uint16_t QP = 0; 880 uint16_t Strength = 0; 881 VPHAL_HVSDN_MODE Mode = HVSDENOISE_AUTO_BDRATE; 882 void* pHVSDenoiseParam = nullptr; 883 uint32_t dwDenoiseParamSize = 0; 884 uint32_t dwGlobalNoiseLevel = 0; //!< Global Noise Level for Y 885 uint32_t dwGlobalNoiseLevelU = 0; //!< Global Noise Level for U 886 uint32_t dwGlobalNoiseLevelV = 0; //!< Global Noise Level for V 887 uint16_t TgneEnable = 0; 888 uint16_t FirstFrame = 0; 889 uint16_t TgneFirstFrame = 0; 890 uint16_t Fallback = 0; 891 uint16_t EnableChroma = 0; 892 uint16_t EnableTemporalGNE = 0; 893 } VPHAL_HVSDENOISE_PARAMS, *PVPHAL_HVSDENOISE_PARAMS; 894 895 //! 896 //! Structure VPHAL_SLIMIPU_DENOISE_PARAM 897 //! \brief SLIMIPU Denoise Parameters 898 //! 899 typedef struct _VPHAL_SLIMIPU_DENOISE_PARAM 900 { 901 uint32_t MemSizeInBytes; 902 void * pSystemMem; 903 } VPHAL_SLIMIPU_DENOISE_PARAM, *PVPHAL_SLIMIPU_DENOISE_PARAM; 904 905 //! 906 //! Structure VPHAL_DENOISE_PARAMS 907 //! \brief Denoise parameters 908 //! 909 typedef struct _VPHAL_DENOISE_PARAMS 910 { 911 bool bEnableChroma = false; 912 bool bEnableLuma = false; 913 bool bAutoDetect = false; 914 float fDenoiseFactor = 0.0; 915 VPHAL_NOISELEVEL NoiseLevel = NOISELEVEL_DEFAULT; 916 bool bEnableHVSDenoise = false; 917 VPHAL_HVSDENOISE_PARAMS HVSDenoise = {}; 918 bool bEnableSlimIPUDenoise = false; 919 VPHAL_SLIMIPU_DENOISE_PARAM SlimIPUDenoise = {}; 920 } VPHAL_DENOISE_PARAMS, *PVPHAL_DENOISE_PARAMS; 921 922 //! 923 //! Structure VPHAL_STE_PARAMS 924 //! \brief STE parameters - Skin Tone Enhancement 925 //! 926 typedef struct _VPHAL_STE_PARAMS 927 { 928 uint32_t dwSTEFactor; 929 } VPHAL_STE_PARAMS, *PVPHAL_STE_PARAMS; 930 931 //! 932 //! Structure VPHAL_TCC_PARAMS 933 //! \brief TCC parameters - Total Color Control 934 //! 935 typedef struct _VPHAL_TCC_PARAMS 936 { 937 uint8_t Red; 938 uint8_t Green; 939 uint8_t Blue; 940 uint8_t Cyan; 941 uint8_t Magenta; 942 uint8_t Yellow; 943 } VPHAL_TCC_PARAMS, *PVPHAL_TCC_PARAMS; 944 945 //! 946 //! Structure VPHAL_COLORPIPE_PARAMS 947 //! \brief IECP Parameters - Color Pipe 948 //! 949 typedef struct _VPHAL_COLORPIPE_PARAMS 950 { 951 bool bEnableACE; 952 bool bEnableSTE; 953 bool bEnableTCC; 954 bool bAceLevelChanged; 955 uint32_t dwAceLevel; 956 uint32_t dwAceStrength; 957 VPHAL_STE_PARAMS SteParams; 958 VPHAL_TCC_PARAMS TccParams; 959 } VPHAL_COLORPIPE_PARAMS, *PVPHAL_COLORPIPE_PARAMS; 960 961 //! 962 //! \brief Vphal 3DLUT Channel Mapping enum 963 //! 964 typedef enum _VPHAL_3DLUT_CHANNEL_MAPPING 965 { 966 CHANNEL_MAPPING_RGB_RGB = 0, 967 CHANNEL_MAPPING_YUV_RGB = 1 << 0, 968 CHANNEL_MAPPING_VUY_RGB = 1 << 1, 969 } VPHAL_3DLUT_CHANNEL_MAPPING; 970 971 //! 972 //! Structure VPHAL_3DLUT_PARAMS 973 //! \brief 3DLUT parameters - 3DLUT 974 //! 975 typedef struct _VPHAL_3DLUT_PARAMS 976 { 977 PVPHAL_SURFACE pExt3DLutSurface; // Pointer to the 3DLUT surface which app passes to driver. 978 uint32_t LutSize; // Size of 3DLUT, i.e, how many entries LUT has. 979 uint32_t ChannelMapping; // Channel Mapping for the 3DLUT input to 3DLUT output. 980 uint16_t BitDepthPerChannel; // Bit Depth Per Channel(4 channels for 3DLUT). 981 uint16_t ByteCountPerEntry; // Byte Count Per Entry including reserved bytes. 982 } VPHAL_3DLUT_PARAMS, * PVPHAL_3DLUT_PARAMS; 983 984 //! 985 //! Structure VPHAL_SURFACE 986 //! \brief DDI-VPHAL surface definition 987 //! 988 struct VPHAL_SURFACE 989 { 990 // Color Information 991 VPHAL_CSPACE ColorSpace = CSpace_None; //!<Color Space 992 bool ExtendedGamut = false; //!<Extended Gamut Flag 993 int32_t iPalette = 0; //!<Palette Allocation 994 VPHAL_PALETTE Palette = {}; //!<Palette data 995 996 // Rendering parameters 997 RECT rcSrc = { 0, 0, 0, 0 }; //!< Source rectangle 998 RECT rcDst = { 0, 0, 0, 0 }; //!< Destination rectangle 999 RECT rcMaxSrc = { 0, 0, 0, 0 }; //!< Max source rectangle 1000 PVPHAL_BLENDING_PARAMS pBlendingParams = nullptr; //!< Blending parameters 1001 PVPHAL_LUMAKEY_PARAMS pLumaKeyParams = nullptr; //!< Luma keying parameters 1002 PVPHAL_PROCAMP_PARAMS pProcampParams = nullptr;; //!< Procamp parameters 1003 PVPHAL_IEF_PARAMS pIEFParams = nullptr; //!< IEF parameters 1004 bool bCalculatingAlpha = false; //!< Alpha calculation parameters 1005 bool bQueryVariance = false; //!< enable variance query 1006 bool bDirectionalScalar = false; //!< Vebox Directional Scalar 1007 bool bFastColorFill = false; //!< enable fast color fill without copy surface 1008 bool bMaxRectChanged = false; //!< indicate rcMaxSrc been updated 1009 bool b16UsrPtr = false; //!< is 16 byte aligned system linear memory. 1010 bool bVEBOXCroppingUsed = false; //!< Vebox crop case need use rcSrc as vebox input. 1011 bool bXORComp = false; //!< is mono-chroma composite mode. 1012 1013 // Interlaced Scaling 1014 bool bInterlacedScaling = false; //!< Interlaced scaling 1015 bool bFieldWeaving = false; //!< Field Weaving 1016 VPHAL_ISCALING_TYPE InterlacedScalingType = ISCALING_NONE; //!< Interlaced scaling type for new interlaced scaling mode 1017 1018 // Advanced Processing 1019 PVPHAL_DI_PARAMS pDeinterlaceParams = nullptr; 1020 PVPHAL_DENOISE_PARAMS pDenoiseParams = nullptr; //!< Denoise 1021 PVPHAL_COLORPIPE_PARAMS pColorPipeParams = nullptr; //!< ColorPipe 1022 1023 // Frame ID and reference samples -> for advanced processing 1024 int32_t FrameID = 0; 1025 uint32_t uFwdRefCount = 0; 1026 uint32_t uBwdRefCount = 0; 1027 PVPHAL_SURFACE pFwdRef = nullptr; 1028 PVPHAL_SURFACE pBwdRef = nullptr; 1029 1030 // VPHAL_SURFACE Linked list 1031 PVPHAL_SURFACE pNext = nullptr; 1032 1033 //-------------------------------------- 1034 // FIELDS TO BE SETUP BY VPHAL int32_tERNALLY 1035 //-------------------------------------- 1036 uint32_t dwWidth = 0; //!< Surface width 1037 uint32_t dwHeight = 0; //!< Surface height 1038 uint32_t dwPitch = 0; //!< Surface pitch 1039 MOS_TILE_TYPE TileType = MOS_TILE_X; //!< Tile Type 1040 MOS_TILE_MODE_GMM TileModeGMM = MOS_TILE_LINEAR_GMM; //!< Tile Mode from GMM Definition 1041 bool bGMMTileEnabled = false; //!< GMM Tile Mode Flag 1042 bool bOverlay= false; //!< Overlay Surface 1043 bool bFlipChain = false; //!< FlipChain Surface 1044 VPHAL_PLANE_OFFSET YPlaneOffset = { 0, 0, 0, 0 }; //!< Y surface plane offset 1045 VPHAL_PLANE_OFFSET UPlaneOffset = { 0, 0, 0, 0 }; //!< U surface plane offset 1046 VPHAL_PLANE_OFFSET VPlaneOffset = { 0, 0, 0, 0 }; //!< V surface plane offset 1047 int32_t iLayerID = 0; //!< Layer index (0-based index) 1048 VPHAL_SCALING_MODE ScalingMode = VPHAL_SCALING_NEAREST; //!< Scaling Mode 1049 VPHAL_SCALING_PREFERENCE ScalingPreference = VPHAL_SCALING_PREFER_SFC; //!< Scaling preference 1050 bool bIEF = false; //!< IEF flag 1051 uint32_t dwSlicePitch = 0; //!< SlicePitch of a 3D surface(GT-PIN support) 1052 1053 //-------------------------------------- 1054 // FIELDS TO BE PROVIDED BY DDI 1055 //-------------------------------------- 1056 // Sample information 1057 MOS_FORMAT Format = Format_None; //!< Surface format 1058 VPHAL_SURFACE_TYPE SurfType = SURF_NONE; //!< Surface type (context) 1059 VPHAL_SAMPLE_TYPE SampleType = SAMPLE_PROGRESSIVE; //!< Interlaced/Progressive sample type 1060 uint32_t dwDepth = 0; //!< Surface depth 1061 MOS_S3D_CHANNEL Channel = MOS_S3D_NONE; //!< Channel 1062 uint32_t dwOffset = 0; //!< Surface Offset (Y/Base) 1063 MOS_RESOURCE OsResource = {}; //!< Surface resource 1064 VPHAL_ROTATION Rotation = VPHAL_ROTATION_IDENTITY; //!< 0: 0 degree, 1: 90 degree, 2: 180 degree, 3: 270 degreee 1065 1066 // Chroma siting 1067 uint32_t ChromaSiting = CHROMA_SITING_NONE; 1068 bool bChromaSiting = false; //!< Chromasiting flag 1069 1070 // Surface compression mode, enable flags 1071 bool bCompressible = false; // The surface is compressible, means there are additional 128 bit for MMC no matter it is compressed or not 1072 // The bIsCompressed in surface allocation structure should use this flag to initialize to allocate a compressible surface 1073 bool bIsCompressed = false; // The surface is compressed, VEBox output can only support horizontal mode, but input can be horizontal / vertical 1074 MOS_RESOURCE_MMC_MODE CompressionMode = MOS_MMC_DISABLED; 1075 uint32_t CompressionFormat = 0; 1076 1077 bool bUseSampleUnorm = false; //!< true: sample unorm is used, false: DScaler or AVS is used. 1078 bool bUseSamplerLumakey = false; //!< true: sampler lumakey is used, false: lumakey is disabled or EU computed lumakey is used. 1079 //------------------------------------------ 1080 // HDR related parameters, provided by DDI 1081 //------------------------------------------ 1082 PVPHAL_HDR_PARAMS pHDRParams = nullptr; 1083 VPHAL_GAMMA_TYPE GammaType = VPHAL_GAMMA_NONE; //!<Gamma Type 1084 bool bPreAPGWorkloadEnable = false; //!< Previous Surface Execution Path 1085 1086 // 3DLUT parameters 1087 PVPHAL_3DLUT_PARAMS p3DLutParams = nullptr; //!< 3DLut Mapping Params 1088 }; 1089 1090 //! 1091 //! Structure VPHAL_GAMUT_PARAMS 1092 //! \brief IECP Gamut Mapping Parameters 1093 //! 1094 typedef struct _VPHAL_GAMUT_PARAMS 1095 { 1096 VPHAL_GAMUT_MODE GCompMode; 1097 VPHAL_GAMUT_MODE GExpMode; 1098 VPHAL_GAMMA_VALUE GammaValue; 1099 uint32_t dwAttenuation; //!< U2.10 [0, 1024] 0 = No down scaling, 1024 = Full down scaling 1100 float displayRGBW_x[4]; 1101 float displayRGBW_y[4]; 1102 } VPHAL_GAMUT_PARAMS, *PVPHAL_GAMUT_PARAMS; 1103 1104 //! 1105 //! Structure VPHAL_NLAS_PARAMS 1106 //! \brief NLAS parameters - Non-Anamorphic Scaling 1107 //! 1108 typedef struct _VPHAL_NLAS_PARAMS 1109 { 1110 float fVerticalCrop; 1111 float fHLinearRegion; 1112 float fNonLinearCrop; 1113 } VPHAL_NLAS_PARAMS, *PVPHAL_NLAS_PARAMS; 1114 1115 //! 1116 //! Structure VPHAL_COLORFILL_PARAMS 1117 //! \brief ColorFill parameters 1118 //! 1119 typedef struct _VPHAL_COLORFILL_PARAMS 1120 { 1121 bool bYCbCr; 1122 uint32_t Color; 1123 VPHAL_CSPACE CSpace; 1124 bool bDisableColorfillinSFC; 1125 bool bOnePixelBiasinSFC; 1126 } VPHAL_COLORFILL_PARAMS, *PVPHAL_COLORFILL_PARAMS; 1127 1128 //! 1129 //! Structure VPHAL_ALPHA_FILL_MODE 1130 //! \brief Alpha mode 1131 //! 1132 typedef enum _VPHAL_ALPHA_FILL_MODE 1133 { 1134 VPHAL_ALPHA_FILL_MODE_NONE = 0, 1135 VPHAL_ALPHA_FILL_MODE_OPAQUE, 1136 VPHAL_ALPHA_FILL_MODE_BACKGROUND, 1137 VPHAL_ALPHA_FILL_MODE_SOURCE_STREAM, 1138 } VPHAL_ALPHA_FILL_MODE; 1139 1140 //! 1141 //! Structure VPHAL_ALPHA_PARAMS 1142 //! \brief Alpha parameters 1143 //! 1144 typedef struct _VPHAL_ALPHA_PARAMS 1145 { 1146 float fAlpha; 1147 VPHAL_ALPHA_FILL_MODE AlphaMode; 1148 } VPHAL_ALPHA_PARAMS, *PVPHAL_ALPHA_PARAMS; 1149 1150 //! 1151 //! Structure VPHAL_CONSTRICTION_PARAMS 1152 //! \brief Constriction parameters 1153 //! 1154 typedef struct _VPHAL_CONSTRICTION_PARAMS 1155 { 1156 RECT rcConstriction; 1157 } VPHAL_CONSTRICTION_PARAMS, *PVPHAL_CONSTRICTION_PARAMS; 1158 1159 //! 1160 //! Structure VPHAL_SPLIT_SCREEN_DEMO_POSITION 1161 //! \brief Split-Screen Demo Mode Position 1162 //! 1163 typedef enum _VPHAL_SPLIT_SCREEN_DEMO_POSITION 1164 { 1165 SPLIT_SCREEN_DEMO_DISABLED = 0, 1166 SPLIT_SCREEN_DEMO_LEFT, 1167 SPLIT_SCREEN_DEMO_RIGHT, 1168 SPLIT_SCREEN_DEMO_TOP, 1169 SPLIT_SCREEN_DEMO_BOTTOM, 1170 SPLIT_SCREEN_DEMO_END_POS_LIST 1171 } VPHAL_SPLIT_SCREEN_DEMO_POSITION; 1172 1173 //! 1174 //! Structure VPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS 1175 //! \brief Split-Screen Demo Mode Parameters 1176 //! 1177 typedef struct _VPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS 1178 { 1179 VPHAL_SPLIT_SCREEN_DEMO_POSITION Position; //!< Position of split mode area (disable features) 1180 bool bDisableACE : 1; //!< Disable ACE 1181 bool bDisableAVS : 1; //!< Disable AVS 1182 bool bDisableDN : 1; //!< Disable DN 1183 bool bDisableFMD : 1; //!< Disable FMD 1184 bool bDisableIEF : 1; //!< Disable IEF 1185 bool bDisableProcamp : 1; //!< Disable Procamp 1186 bool bDisableSTE : 1; //!< Disable STE 1187 bool bDisableTCC : 1; //!< Disable TCC 1188 bool bDisableIS : 1; //!< Disable IS 1189 bool bDisableDrDb : 1; //!< Disable DRDB 1190 bool bDisableDNUV : 1; //!< Disable DNUV 1191 bool bDisableFRC : 1; //!< Disable FRC 1192 bool bDisableLACE : 1; //!< Disable LACE 1193 } VPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS, *PVPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS; 1194 1195 //! 1196 //! Structure VPHAL_RENDER_PARAMS 1197 //! \brief VPHAL Rendering Parameters 1198 //! 1199 struct VPHAL_RENDER_PARAMS 1200 { 1201 // Input/output surfaces 1202 uint32_t uSrcCount; //!< Num sources 1203 VPHAL_SURFACE *pSrc[VPHAL_MAX_SOURCES]; //!< Source Samples 1204 uint32_t uDstCount; //!< Num Targets 1205 VPHAL_SURFACE *pTarget[VPHAL_MAX_TARGETS];//!< Render Target 1206 1207 // Additional parameters not included in PVPHAL_SURFACE 1208 PRECT pConstriction; //!< Constriction rectangle 1209 PVPHAL_COLORFILL_PARAMS pColorFillParams; //!< ColorFill - BG only 1210 bool bTurboMode; //!< Enable Media Turbo Mode 1211 bool bStereoMode; //!< Stereo BLT mode 1212 PVPHAL_ALPHA_PARAMS pCompAlpha; //!< Alpha for composited surfaces 1213 bool bDisableDemoMode; //!< Enable/Disable demo mode function calls 1214 PVPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS pSplitScreenDemoModeParams; //!< Split-screen demo mode for VP features 1215 bool bIsDefaultStream; //!< Identifier to differentiate default stream 1216 1217 // Debugging parameters 1218 MOS_COMPONENT Component; //!< DDI component (for DEBUGGING only) 1219 1220 // Status Report 1221 bool bReportStatus; //!< Report current media BB status (Pre-Processing) 1222 uint32_t StatusFeedBackID; //!< Unique Staus ID; 1223 #if (_DEBUG || _RELEASE_INTERNAL) 1224 bool bTriggerGPUHang; //!< Trigger GPU HANG 1225 #endif 1226 1227 bool bCalculatingAlpha; //!< Alpha calculation parameters 1228 1229 // extension parameters 1230 void *pExtensionData; //!< Extension data 1231 1232 bool bPathKernel; // HDR path config if use kernel 1233 bool bAPGWorkloadEnable = false; //!< Identify Whether APG workload Enabled or not 1234 1235 bool bDisableVeboxFor8K = false; 1236 bool bUseVEHdrSfc = false; // use SFC for to perform CSC/Scaling/RGBSwap of HDR streaming; if false, use composite render. 1237 bool bNonFirstFrame = false; // first frame or not: first frame false, otherwise true considering zeromemory parameters. 1238 bool bOptimizeCpuTiming = false; //!< Optimize Cpu Timing 1239 VPHAL_RENDER_PARAMSVPHAL_RENDER_PARAMS1240 VPHAL_RENDER_PARAMS() : 1241 uSrcCount(0), 1242 pSrc(), 1243 uDstCount(0), 1244 pTarget(), 1245 pConstriction(nullptr), 1246 pColorFillParams(nullptr), 1247 bTurboMode(false), 1248 bStereoMode(false), 1249 pCompAlpha(nullptr), 1250 bDisableDemoMode(false), 1251 pSplitScreenDemoModeParams(nullptr), 1252 bIsDefaultStream(false), 1253 Component(), 1254 bReportStatus(false), 1255 StatusFeedBackID(0), 1256 #if (_DEBUG || _RELEASE_INTERNAL) 1257 bTriggerGPUHang(false), 1258 #endif 1259 bCalculatingAlpha(false), 1260 pExtensionData(nullptr), 1261 bPathKernel(false), 1262 bUseVEHdrSfc(false), 1263 bNonFirstFrame(false) 1264 { 1265 } 1266 1267 }; 1268 1269 typedef VPHAL_RENDER_PARAMS *PVPHAL_RENDER_PARAMS; 1270 typedef const VPHAL_RENDER_PARAMS *PCVPHAL_RENDER_PARAMS; 1271 1272 //! 1273 //! \brief Performs Color Space Convert for Sample 8 bit 1274 //! \details Performs Color Space Convert from Src Color Spase to Dst Color Spase 1275 //! \param [out] pOutput 1276 //! Pointer to VPHAL_COLOR_SAMPLE_8 1277 //! \param [in] pInput 1278 //! Pointer to VPHAL_COLOR_SAMPLE_8 1279 //! \param [in] srcCspace 1280 //! Source Color Space 1281 //! \param [in] dstCspace 1282 //! Dest Color Space 1283 //! \return bool 1284 //! Return true if successful, otherwise false 1285 //! 1286 bool VpHal_CSC_8( 1287 VPHAL_COLOR_SAMPLE_8 *pOutput, 1288 VPHAL_COLOR_SAMPLE_8 *pInput, 1289 VPHAL_CSPACE srcCspace, 1290 VPHAL_CSPACE dstCspace); 1291 1292 //! 1293 //! \brief 1294 //! \details Get CSC matrix in a form usable by Vebox, SFC and IECP kernels 1295 //! \param [in] SrcCspace 1296 //! Source Cspace 1297 //! \param [in] DstCspace 1298 //! Destination Cspace 1299 //! \param [out] pfCscCoeff 1300 //! [3x3] Coefficients matrix 1301 //! \param [out] pfCscInOffset 1302 //! [3x1] Input Offset matrix 1303 //! \param [out] pfCscOutOffset 1304 //! [3x1] Output Offset matrix 1305 //! \return void 1306 //! 1307 void VpHal_GetCscMatrix( 1308 VPHAL_CSPACE SrcCspace, 1309 VPHAL_CSPACE DstCspace, 1310 float* pfCscCoeff, 1311 float* pfCscInOffset, 1312 float* pfCscOutOffset); 1313 1314 //! 1315 //! \brief sinc 1316 //! \details Calculate sinc(x) 1317 //! \param [in] x 1318 //! float 1319 //! \return float 1320 //! sinc(x) 1321 //! 1322 float VpHal_Sinc(float x); 1323 1324 //! 1325 //! \brief Lanczos 1326 //! \details Calculate lanczos(x) 1327 //! Basic formula is: lanczos(x)= VpHal_Sinc(x) * VpHal_Sinc(x / fLanczosT) 1328 //! \param [in] x 1329 //! float 1330 //! \param [in] dwNumEntries 1331 //! dword 1332 //! \param [in] fLanczosT 1333 //! 1334 //! \return float 1335 //! lanczos(x) 1336 //! 1337 float VpHal_Lanczos( 1338 float x, 1339 uint32_t dwNumEntries, 1340 float fLanczosT); 1341 1342 //! 1343 //! Structure VPHAL_GET_SURFACE_INFO 1344 //! \brief VPHAL Get Surface Infomation Parameters 1345 //! 1346 1347 typedef struct VPHAL_GET_SURFACE_INFO *PVPHAL_GET_SURFACE_INFO; 1348 struct VPHAL_GET_SURFACE_INFO 1349 { 1350 uint32_t ArraySlice; 1351 uint32_t MipSlice; 1352 MOS_S3D_CHANNEL S3dChannel; 1353 }; 1354 1355 //! 1356 //! \brief Get Surface Info from OsResource 1357 //! \details Update surface info in PVPHAL_SURFACE based on allocated OsResource 1358 //! \param [in] pOsInterface 1359 //! Pointer to MOS_INTERFACE 1360 //! \param [in] pInfo 1361 //! Pointer to VPHAL_GET_SURFACE_INFO 1362 //! \param [in,out] pSurface 1363 //! Pointer to VPHAL_SURFACE 1364 //! \return MOS_STATUS 1365 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 1366 //! 1367 MOS_STATUS VpHal_GetSurfaceInfo( 1368 PMOS_INTERFACE pOsInterface, 1369 PVPHAL_GET_SURFACE_INFO pInfo, 1370 PVPHAL_SURFACE pSurface); 1371 1372 //! 1373 //! \brief Allocates the Surface 1374 //! \details Allocates the Surface 1375 //! - if the surface is not already allocated OR 1376 //! - resource dimenisions OR format changed 1377 //! \param [in] pOsInterface 1378 //! Pointer to MOS_INTERFACE 1379 //! \param [in,out] pSurface 1380 //! Pointer to VPHAL_SURFACE 1381 //! \param [in] pSurfaceName 1382 //! Pointer to surface name 1383 //! \param [in] Format 1384 //! Expected MOS_FORMAT 1385 //! \param [in] DefaultResType 1386 //! Expected Resource Type 1387 //! \param [in] DefaultTileType 1388 //! Expected Surface Tile Type 1389 //! \param [in] dwWidth 1390 //! Expected Surface Width 1391 //! \param [in] dwHeight 1392 //! Expected Surface Height 1393 //! \param [in] bCompressible 1394 //! Surface being compressible or not 1395 //! \param [in] CompressionMode 1396 //! Compression Mode 1397 //! \param [out] pbAllocated 1398 //! true if allocated, false for not 1399 //! \param [in] resUsageType 1400 //! resource usage type for caching 1401 //! \param [in] tileModeByForce 1402 //! Forced tile mode 1403 //! \param [in] memType 1404 //! vidoe memory location 1405 //! \return MOS_STATUS 1406 //! MOS_STATUS_SUCCESS if success. Error code otherwise 1407 //! 1408 MOS_STATUS VpHal_ReAllocateSurface( 1409 PMOS_INTERFACE pOsInterface, // [in] Pointer to OS Interface 1410 PVPHAL_SURFACE pSurface, // [in/out]Pointer to surface 1411 PCCHAR pSurfaceName, // [in] Pointer to surface name 1412 MOS_FORMAT Format, // [in] Surface Format 1413 MOS_GFXRES_TYPE DefaultResType, // [in] Default Resource Type to use if resource has not be allocated yet 1414 MOS_TILE_TYPE DefaultTileType, // [in] Default Resource Tile Type to use if resource has not be allocated yet 1415 uint32_t dwWidth, // [in] Resource Width 1416 uint32_t dwHeight, // [in] Resource Height 1417 bool bCompressible, // [in] Flag indaicated reource is compressible or not 1418 MOS_RESOURCE_MMC_MODE CompressionMode, // [in] Compression mode 1419 bool* pbAllocated, // [out] Flag indicating new allocation 1420 MOS_HW_RESOURCE_DEF resUsageType = MOS_HW_RESOURCE_DEF_MAX, // [in] resource usage type 1421 MOS_TILE_MODE_GMM tileModeByForce = MOS_TILE_UNSET_GMM, // [in] Flag to indicate if GMM flag tile64 need set 1422 Mos_MemPool memType = MOS_MEMPOOL_VIDEOMEMORY, // [in] Flag to indicate the memType 1423 bool isNotLockable = false); // [in] Flag to indicate whether resource being not lockable 1424 1425 //! 1426 //! \brief Reads the Surface contents and copy to the Dst Buffer 1427 //! \details Reads the Surface contents and copy to the Dst Buffer 1428 //! - 1 lock surface 1429 //! - 2 copy surface data to pDst 1430 //! - 3 unlock surface 1431 //! \param [in] pOsInterface 1432 //! Pointer to MOS_INTERFACE 1433 //! \param [in] pSurface 1434 //! Pointer to VPHAL_SURFACE 1435 //! \param [in] uBpp 1436 //! bit per pixel of surface contents 1437 //! \param [out] pDst 1438 //! output buffer to store Surface contents 1439 //! \return MOS_STATUS 1440 //! MOS_STATUS_SUCCESS if success. Error code otherwise 1441 //! 1442 MOS_STATUS VpHal_ReadSurface ( 1443 PMOS_INTERFACE pOsInterface, 1444 PVPHAL_SURFACE pSurface, 1445 uint32_t uBpp, 1446 uint8_t* pDst); 1447 1448 //! 1449 //! \brief Copy Data from input Buffer to the Surface contents 1450 //! \details Copy Data from input Buffer to the Surface contents 1451 //! - 1 lock surface 1452 //! - 2 copy data from pSrc to Surface 1453 //! - 3 unlock surface 1454 //! \param [in] pOsInterface 1455 //! Pointer to MOS_INTERFACE 1456 //! \param [out] pSurface 1457 //! Pointer to VPHAL_SURFACE 1458 //! \param [in] uBpp 1459 //! bit per pixel of input buffer 1460 //! \param [in] pSrc 1461 //! Input buffer to store Surface contents 1462 //! \return MOS_STATUS 1463 //! MOS_STATUS_SUCCESS if success. Error code otherwise 1464 //! 1465 MOS_STATUS VpHal_WriteSurface ( 1466 PMOS_INTERFACE pOsInterface, 1467 PVPHAL_SURFACE pSurface, 1468 uint32_t uBpp, 1469 const uint8_t* pSrc); 1470 1471 //! 1472 //! \brief Get the color pack type of a surface 1473 //! \details Map mos surface format to color pack format and return. 1474 //! For unknown format return VPHAL_COLORPACK_UNKNOWN 1475 //! \param [in] Format 1476 //! MOS_FORMAT of a surface 1477 //! \return VPHAL_COLORPACK 1478 //! Color pack type of the surface 1479 //! 1480 VPHAL_COLORPACK VpHal_GetSurfaceColorPack ( 1481 MOS_FORMAT Format); 1482 1483 //! 1484 //! \brief Decide whether Chroma up sampling is needed 1485 //! \param [in] pSource 1486 //! Pointer to Source Surface 1487 //! \param [in] pTarget 1488 //! Pointer to Target Surface 1489 //! \return bool 1490 //! Return true if Chroma up sampling is needed, otherwise false 1491 //! 1492 bool VpHal_IsChromaUpSamplingNeeded( 1493 PVPHAL_SURFACE pSource, 1494 PVPHAL_SURFACE pTarget); 1495 1496 //! 1497 //! \brief Decide whether Chroma down sampling is needed 1498 //! \param [in] pSource 1499 //! Pointer to Source Surface 1500 //! \param [in] pTarget 1501 //! Pointer to Target Surface 1502 //! \return bool 1503 //! Return true if Chroma down sampling is needed, otherwise false 1504 //! 1505 bool VpHal_IsChromaDownSamplingNeeded( 1506 PVPHAL_SURFACE pSource, 1507 PVPHAL_SURFACE pTarget); 1508 1509 //! \brief Get the bit depth of a surface 1510 //! \details Get bit depth of input mos surface format and return. 1511 //! For unknown format return 0 1512 //! \param [in] Format 1513 //! MOS_FORMAT of a surface 1514 //! \return uint32_t 1515 //! Bit depth of the surface 1516 //! 1517 uint32_t VpHal_GetSurfaceBitDepth( 1518 MOS_FORMAT Format); 1519 1520 //! 1521 //! \brief Get the scale ratio 1522 //! \details Get the scale ratio from input surface to output surface 1523 //! \param [in] pSource 1524 //! Pointer to input Surface 1525 //! \param [in] pTarget 1526 //! Pointer to output Surface 1527 //! \param [out] pfScaleX 1528 //! Pointer to scaling ratio x 1529 //! \param [out] pfScaleY 1530 //! Pointer to scaling ratio y 1531 //! \return void 1532 //! 1533 void VpHal_GetScalingRatio( 1534 PVPHAL_SURFACE pSource, 1535 PVPHAL_SURFACE pTarget, 1536 float* pfScaleX, 1537 float* pfScaleY); 1538 1539 //! \brief Transfer float type to half precision float type 1540 //! \details Transfer float type to half precision float (16bit) type 1541 //! \param [in] fInput 1542 //! input FP32 number 1543 //! \return uint16_t 1544 //! half precision float value in bit 1545 //! 1546 uint16_t VpHal_FloatToHalfFloat( 1547 float fInput); 1548 1549 //! 1550 //! \brief Initial the Type/TileType fields in Alloc Params structure 1551 //! \details Initial the Type/TileType fields in Alloc Params structure 1552 //! - Use the last type from GMM resource 1553 //! \param [in, out] pAllocParams 1554 //! Pointer to MOS_ALLOC_GFXRES_PARAMS 1555 //! \param [in] pSurface 1556 //! Pointer to VPHAL_SURFACE 1557 //! \param [in] DefaultResType 1558 //! Expected Resource Type 1559 //! \param [in] DefaultTileType 1560 //! Expected Surface Tile Type 1561 //! 1562 void VpHal_AllocParamsInitType( 1563 PMOS_ALLOC_GFXRES_PARAMS pAllocParams, 1564 PVPHAL_SURFACE pSurface, 1565 MOS_GFXRES_TYPE DefaultResType, 1566 MOS_TILE_TYPE DefaultTileType); 1567 1568 MOS_SURFACE VpHal_ConvertVphalSurfaceToMosSurface( 1569 PVPHAL_SURFACE pSurface); 1570 1571 bool IsSyncFreeNeededForMMCSurface(PVPHAL_SURFACE pSurface, PMOS_INTERFACE pOsInterface); 1572 1573 //! 1574 //! \brief VEBOX IECP parameters 1575 //! 1576 class VPHAL_VEBOX_IECP_PARAMS 1577 { 1578 public: 1579 PVPHAL_COLORPIPE_PARAMS pColorPipeParams; 1580 PVPHAL_PROCAMP_PARAMS pProcAmpParams; 1581 MOS_FORMAT dstFormat; 1582 MOS_FORMAT srcFormat; 1583 1584 // CSC params 1585 bool bCSCEnable; // Enable CSC transform 1586 float* pfCscCoeff; // [3x3] CSC Coeff matrix 1587 float* pfCscInOffset; // [3x1] CSC Input Offset matrix 1588 float* pfCscOutOffset; // [3x1] CSC Output Offset matrix 1589 bool bAlphaEnable; // Alpha Enable Param 1590 uint16_t wAlphaValue; // Color Pipe Alpha Value 1591 1592 // Front End CSC params 1593 bool bFeCSCEnable; // Enable Front End CSC transform 1594 float* pfFeCscCoeff; // [3x3] Front End CSC Coeff matrix 1595 float* pfFeCscInOffset; // [3x1] Front End CSC Input Offset matrix 1596 float* pfFeCscOutOffset; // [3x1] Front End CSC Output Offset matrix 1597 VPHAL_VEBOX_IECP_PARAMS()1598 VPHAL_VEBOX_IECP_PARAMS() 1599 { 1600 pColorPipeParams = nullptr; 1601 pProcAmpParams = nullptr; 1602 dstFormat = Format_Any; 1603 srcFormat = Format_Any; 1604 bCSCEnable = false; 1605 pfCscCoeff = nullptr; 1606 pfCscInOffset = nullptr; 1607 pfCscOutOffset = nullptr; 1608 bAlphaEnable = false; 1609 wAlphaValue = 0; 1610 1611 bFeCSCEnable = false; 1612 pfFeCscCoeff = nullptr; 1613 pfFeCscInOffset = nullptr; 1614 pfFeCscOutOffset = nullptr; 1615 } ~VPHAL_VEBOX_IECP_PARAMS()1616 virtual ~VPHAL_VEBOX_IECP_PARAMS() 1617 { 1618 pColorPipeParams = nullptr; 1619 pProcAmpParams = nullptr; 1620 } Init()1621 virtual void Init() 1622 { 1623 pColorPipeParams = nullptr; 1624 pProcAmpParams = nullptr; 1625 1626 dstFormat = Format_Any; 1627 srcFormat = Format_Any; 1628 1629 bCSCEnable = false; 1630 pfCscCoeff = nullptr; 1631 pfCscInOffset = nullptr; 1632 pfCscOutOffset = nullptr; 1633 bAlphaEnable = false; 1634 wAlphaValue = 0; 1635 } GetExtParams()1636 virtual void *GetExtParams() { return nullptr; } 1637 }; 1638 #ifdef __cplusplus 1639 } 1640 #endif 1641 1642 #endif // __VPHAL_COMMON_H__ 1643