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_defs.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 __VP_COMMON_DEFS_H__ 29 #define __VP_COMMON_DEFS_H__ 30 31 #include "media_common_defs.h" 32 33 #define ADDRESS_PAGE_ALIGNMENT_MASK_X64 0xFFFFFFFFFFFFF000ULL 34 #define ADDRESS_PAGE_ALIGNMENT_MASK_X86 0xFFFFF000 35 36 //! 37 //! \def OUT_OF_BOUNDS(a, min, max) 38 //! Calcualte if \a a out the range of [\a min, \a max]. 39 //! 40 #define OUT_OF_BOUNDS(a, min, max) (((a) < (min)) || ((a) > (max))) 41 42 //! 43 //! \def RECT1_CONTAINS_RECT2(rect1, rect2) 44 //! Compare if rectangle \a rect1 contains rectangle \a rect2 in coordinate 45 //! 46 #define RECT1_CONTAINS_RECT2(rect1, rect2) \ 47 (((rect1).left <= (rect2).left) && ((rect1).top <= (rect2).top) && \ 48 ((rect1).right >= (rect2).right) && ((rect1).bottom >= (rect2).bottom)) 49 50 //! 51 //! \def RECT1_CONTAINS_RECT2_ONEPIXELBIAS(rect1, rect2) 52 //! Compare if rectangle \a rect1 contains rectangle \a rect2 in coordinate, One pixel bias is allowed 53 //! 54 #define RECT1_CONTAINS_RECT2_ONEPIXELBIAS(rect1, rect2) \ 55 (((rect1).left <= ((rect2).left + 1)) && ((rect1).top <= ((rect2).top + 1)) && \ 56 (((rect1).right + 1) >= (rect2).right) && (((rect1).bottom + 1) >= (rect2).bottom)) 57 58 #define VPHAL_MEMORY_OBJECT_CONTROL uint32_t 59 60 // YUV input ranges 61 #define YUV_RANGE_16_235 1 62 #define YUV_RANGE_0_255 2 63 64 // ProcAmp Default Values 65 #define PROCAMP_BRIGHTNESS_MIN -100.0F 66 #define PROCAMP_BRIGHTNESS_MAX 100.0F 67 #define PROCAMP_BRIGHTNESS_DEFAULT 0.0F 68 #define PROCAMP_BRIGHTNESS_STEP 0.1F 69 #define PROCAMP_CONTRAST_MIN 0.0F 70 #define PROCAMP_CONTRAST_MAX 10.0F 71 #define PROCAMP_CONTRAST_DEFAULT 1.0F 72 #define PROCAMP_CONTRAST_STEP 0.01F 73 #define PROCAMP_HUE_MIN -180.0F 74 #define PROCAMP_HUE_MAX 180.0F 75 #define PROCAMP_HUE_DEFAULT 0.0F 76 #define PROCAMP_HUE_STEP 0.1F 77 #define PROCAMP_SATURATION_MIN 0.0F 78 #define PROCAMP_SATURATION_MAX 10.0F 79 #define PROCAMP_SATURATION_DEFAULT 1.0F 80 #define PROCAMP_SATURATION_STEP 0.01F 81 82 // Denoise Default Values 83 #define NOISEREDUCTION_MIN 0.0F 84 #define NOISEREDUCTION_MAX 64.0F 85 #define NOISEREDUCTION_DEFAULT 0.0F 86 #define NOISEREDUCTION_STEP 1.0F 87 88 // Skin Tone Detection/Enhancement values 89 #define STE_MIN 0.0F 90 #define STE_MAX 9.0F 91 #define STE_DEFAULT 3.0F 92 #define STE_STEP 1.0F 93 94 // Total Color Correction values 95 #define TCC_MIN 0.0F 96 #define TCC_MAX 255.0F 97 #define TCC_DEFAULT 160.0F 98 #define TCC_STEP 1.0F 99 100 // Adaptive Contrast Enhancement values 101 #define ACE_LEVEL_DEFAULT 5 102 #define ACE_STRENGTH_DEFAULT 1 103 104 // Sharpness Values 105 #define EDGEENHANCEMENT_MIN 0.0F 106 #define EDGEENHANCEMENT_MAX 64.0F 107 #define EDGEENHANCEMENT_DEFAULT 44.0F 108 #define EDGEENHANCEMENT_STEP 1.0F 109 #define IEF_STRONG_EDGE_WEIGHT 7 110 #define IEF_REGULAR_WEIGHT 2 111 #define IEF_STRONG_EDGE_THRESHOLD 8 112 113 #define VPHAL_MAX_SOURCES 65 //!< worst case: 64 sub-streams + 1 pri video 114 #define VPHAL_MAX_TARGETS 8 //!< multi output support 115 116 #define VPHAL_TOP_FIELD 0 117 #define VPHAL_BOTTOM_FIELD 1 118 #define VPHAL_TOP_FIELD_FIRST 0 119 #define VPHAL_BOTTOM_FIELD_FIRST 1 120 121 //*----------------------------------------------------------------------------- 122 //| DEFINITIONS 123 //*----------------------------------------------------------------------------- 124 // Incremental size for allocating/reallocating resource 125 #define VPHAL_BUFFER_SIZE_INCREMENT 128 126 127 // VPP internal resource NotLockable flag macro 128 #define VPP_INTER_RESOURCE_NOTLOCKABLE true 129 #define VPP_INTER_RESOURCE_LOCKABLE false 130 131 // Media Features width 132 #define VPHAL_RNDR_8K_WIDTH (7680) 133 #define VPHAL_RNDR_16K_HEIGHT_LIMIT (16352) 134 135 // Media Features height 136 #define VPHAL_RNDR_2K_HEIGHT 1080 137 // The reason that the definition is not (VPHAL_RNDR_2K_HEIGHT*2) is because some 4K clips have 1200 height. 138 #define VPHAL_RNDR_4K_HEIGHT 1200 139 #define VPHAL_RNDR_4K_MAX_HEIGHT 3112 140 #define VPHAL_RNDR_4K_MAX_WIDTH 4096 141 #define VPHAL_RNDR_6K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 3) 142 #define VPHAL_RNDR_8K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 4) 143 #define VPHAL_RNDR_10K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 5) 144 #define VPHAL_RNDR_12K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 6) 145 #define VPHAL_RNDR_14K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 7) 146 #define VPHAL_RNDR_16K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 8) 147 #define VPHAL_RNDR_18K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 9) 148 #define VPHAL_RNDR_20K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 10) 149 #define VPHAL_RNDR_22K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 11) 150 #define VPHAL_RNDR_24K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 12) 151 #define VPHAL_RNDR_26K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 13) 152 #define VPHAL_RNDR_28K_HEIGHT (VPHAL_RNDR_2K_HEIGHT * 14) 153 154 //! 155 //! \def MEDIA_IS_HDCONTENT(dwWidth, dwHeight) 156 //! Determine if the size of content is HD 157 //! 158 #define MEDIA_SDCONTENT_MAX_WIDTH 720 159 #define MEDIA_SDCONTENT_MAX_PAL_HEIGHT 576 160 #define MEDIA_SDCONTENT_MAX_SW_WIDTH 768 161 #define MEDIA_IS_HDCONTENT(dwWidth, dwHeight) ((dwWidth > MEDIA_SDCONTENT_MAX_SW_WIDTH) || (dwHeight > MEDIA_SDCONTENT_MAX_PAL_HEIGHT)) 162 163 //! 164 //! \brief Base VP kernel list 165 //! 166 enum VpKernelID 167 { 168 // FC 169 kernelCombinedFc = 0, 170 171 // 2 VEBOX KERNELS 172 kernelVeboxSecureBlockCopy, 173 kernelVeboxUpdateDnState, 174 175 // User Ptr 176 kernelUserPtr, 177 // Fast 1toN 178 kernelFast1toN, 179 180 // HDR 181 kernelHdrMandatory, 182 kernelHdrPreprocess, 183 184 // mediacopy-render copy 185 kernelRenderCopy, 186 187 kernelL0FcCommon, 188 kernelL0FcFP, 189 kernelL0Fc444PL3Input, 190 191 baseKernelMaxNumID 192 }; 193 194 enum VpKernelIDNext 195 { 196 vpKernelIDNextBase = 0x200, 197 kernelHdr3DLutCalc = vpKernelIDNextBase, 198 kernelHdr3DLutCalcL0, 199 kernelHVSCalc, 200 vpKernelIDNextMax 201 }; 202 203 typedef struct _VPHAL_COMPOSITE_CACHE_CNTL 204 { 205 bool bL3CachingEnabled; 206 VPHAL_MEMORY_OBJECT_CONTROL PrimaryInputSurfMemObjCtl; 207 VPHAL_MEMORY_OBJECT_CONTROL InputSurfMemObjCtl; 208 VPHAL_MEMORY_OBJECT_CONTROL TargetSurfMemObjCtl; 209 } VPHAL_COMPOSITE_CACHE_CNTL, *PVPHAL_COMPOSITE_CACHE_CNTL; 210 211 //! 212 //! \brief Vphal Output chroma configuration enum 213 //! 214 typedef enum _VPHAL_CHROMA_SUBSAMPLING 215 { 216 CHROMA_SUBSAMPLING_TOP_CENTER = 0, 217 CHROMA_SUBSAMPLING_CENTER_CENTER, 218 CHROMA_SUBSAMPLING_BOTTOM_CENTER, 219 CHROMA_SUBSAMPLING_TOP_LEFT, 220 CHROMA_SUBSAMPLING_CENTER_LEFT, 221 CHROMA_SUBSAMPLING_BOTTOM_LEFT 222 } VPHAL_CHROMA_SUBSAMPLING; 223 224 //! 225 //! \brief Vphal Gamma Values configuration enum 226 //! 227 typedef enum _VPHAL_GAMMA_VALUE 228 { 229 GAMMA_1P0 = 0, 230 GAMMA_2P2, 231 GAMMA_2P6 232 } VPHAL_GAMMA_VALUE; 233 234 typedef struct _VPHAL_DNDI_CACHE_CNTL 235 { 236 bool bL3CachingEnabled; 237 VPHAL_MEMORY_OBJECT_CONTROL CurrentInputSurfMemObjCtl; 238 VPHAL_MEMORY_OBJECT_CONTROL PreviousInputSurfMemObjCtl; 239 VPHAL_MEMORY_OBJECT_CONTROL STMMInputSurfMemObjCtl; 240 VPHAL_MEMORY_OBJECT_CONTROL STMMOutputSurfMemObjCtl; 241 VPHAL_MEMORY_OBJECT_CONTROL DnOutSurfMemObjCtl; 242 VPHAL_MEMORY_OBJECT_CONTROL CurrentOutputSurfMemObjCtl; 243 VPHAL_MEMORY_OBJECT_CONTROL StatisticsOutputSurfMemObjCtl; 244 VPHAL_MEMORY_OBJECT_CONTROL LaceOrAceOrRgbHistogramSurfCtrl; 245 VPHAL_MEMORY_OBJECT_CONTROL AlphaOrVignetteSurfMemObjCtl; 246 VPHAL_MEMORY_OBJECT_CONTROL SkinScoreSurfMemObjCtl; 247 VPHAL_MEMORY_OBJECT_CONTROL LaceLookUpTablesSurfMemObjCtl; 248 VPHAL_MEMORY_OBJECT_CONTROL Vebox3DLookUpTablesSurfMemObjCtl; 249 } VPHAL_DNDI_CACHE_CNTL, *PVPHAL_DNDI_CACHE_CNTL; 250 251 typedef struct _VPHAL_LACE_CACHE_CNTL 252 { 253 // LACE would reuse the bL3CachingEnabled of VEBOX's cache control 254 VPHAL_MEMORY_OBJECT_CONTROL FrameHistogramSurfaceMemObjCtl; 255 VPHAL_MEMORY_OBJECT_CONTROL AggregatedHistogramSurfaceMemObjCtl; 256 VPHAL_MEMORY_OBJECT_CONTROL StdStatisticsSurfaceMemObjCtl; 257 VPHAL_MEMORY_OBJECT_CONTROL PwlfInSurfaceMemObjCtl; 258 VPHAL_MEMORY_OBJECT_CONTROL PwlfOutSurfaceMemObjCtl; 259 VPHAL_MEMORY_OBJECT_CONTROL WeitCoefSurfaceMemObjCtl; 260 VPHAL_MEMORY_OBJECT_CONTROL GlobalToneMappingCurveLUTSurfaceMemObjCtl; 261 } VPHAL_LACE_CACHE_CNTL, *PVPHAL_LACE_CACHE_CNTL; 262 263 typedef struct _VPHAL_16_ALIGN_CACHE_CNTL 264 { 265 bool bL3CachingEnabled; 266 VPHAL_MEMORY_OBJECT_CONTROL SourceSurfMemObjCtl; 267 VPHAL_MEMORY_OBJECT_CONTROL TargetSurfMemObjCtl; 268 VPHAL_MEMORY_OBJECT_CONTROL SamplerParamsSurfMemObjCtl; 269 VPHAL_MEMORY_OBJECT_CONTROL SamplerParamsStatsSurfMemObjCtl; 270 } VPHAL_16_ALIGN_CACHE_CNTL, *PVPHAL_16_ALIGN_CACHE_CNTL; 271 272 typedef struct _VPHAL_FAST1TON_CACHE_CNTL 273 { 274 bool bL3CachingEnabled; 275 VPHAL_MEMORY_OBJECT_CONTROL SourceSurfMemObjCtl; 276 VPHAL_MEMORY_OBJECT_CONTROL TargetSurfMemObjCtl; 277 VPHAL_MEMORY_OBJECT_CONTROL SamplerParamsSurfMemObjCtl; 278 VPHAL_MEMORY_OBJECT_CONTROL SamplerParamsStatsSurfMemObjCtl; 279 } VPHAL_FAST1TON_CACHE_CNTL, *PVPHAL_FAST1TON_CACHE_CNTL; 280 281 typedef struct _VPHAL_HDR_CACHE_CNTL 282 { 283 bool bL3CachingEnabled; 284 VPHAL_MEMORY_OBJECT_CONTROL SourceSurfMemObjCtl; 285 VPHAL_MEMORY_OBJECT_CONTROL TargetSurfMemObjCtl; 286 VPHAL_MEMORY_OBJECT_CONTROL Lut2DSurfMemObjCtl; 287 VPHAL_MEMORY_OBJECT_CONTROL Lut3DSurfMemObjCtl; 288 VPHAL_MEMORY_OBJECT_CONTROL CoeffSurfMemObjCtl; 289 } VPHAL_HDR_CACHE_CNTL, *PVPHAL_HDR_CACHE_CNTL; 290 291 //! 292 //! \brief Feature specific cache control settings 293 //! 294 typedef struct _VPHAL_RENDER_CACHE_CNTL 295 { 296 // Input 297 bool bDnDi; 298 bool bCompositing; 299 bool bLace; 300 301 // Output 302 VPHAL_DNDI_CACHE_CNTL DnDi; 303 VPHAL_COMPOSITE_CACHE_CNTL Composite; 304 VPHAL_LACE_CACHE_CNTL Lace; 305 } VPHAL_RENDER_CACHE_CNTL, *PVPHAL_RENDER_CACHE_CNTL; 306 307 //! 308 //! \brief Vphal Palette Type Mode enum 309 //! 310 typedef enum _VPHAL_PALETTE_TYPE 311 { 312 VPHAL_PALETTE_NONE = 0, 313 VPHAL_PALETTE_YCbCr_8, //!< 8-bit depth - AYUV palette 314 VPHAL_PALETTE_ARGB_8, //!< 8-bit depth - ARGB palette 315 VPHAL_PALETTE_AVYU_8 //!< 8-bit depth - YUY2 palette 316 } VPHAL_PALETTE_TYPE; 317 318 //! 319 //! \brief Vphal Chroma Siting enum 320 //! 321 typedef enum _VPHAL_CHROMA_SITING 322 { 323 CHROMA_SITING_NONE = 0, 324 CHROMA_SITING_HORZ_LEFT = 1 << 0, 325 CHROMA_SITING_HORZ_CENTER = 1 << 1, 326 CHROMA_SITING_HORZ_RIGHT = 1 << 2, 327 CHROMA_SITING_VERT_TOP = 1 << 4, 328 CHROMA_SITING_VERT_CENTER = 1 << 5, 329 CHROMA_SITING_VERT_BOTTOM = 1 << 6, 330 } VPHAL_CHROMA_SITING; 331 332 //! 333 //! \brief Vphal Rotation Mode enum 334 //! 335 typedef enum _VPHAL_ROTATION 336 { 337 VPHAL_ROTATION_IDENTITY = ROTATION_IDENTITY, //!< Rotation 0 degrees 338 VPHAL_ROTATION_90 = ROTATION_90, //!< Rotation 90 degrees 339 VPHAL_ROTATION_180 = ROTATION_180, //!< Rotation 180 degrees 340 VPHAL_ROTATION_270 = ROTATION_270, //!< Rotation 270 degrees 341 VPHAL_MIRROR_HORIZONTAL = ROTATION_MIRROR_HORIZONTAL, //!< Horizontal Mirror 342 VPHAL_MIRROR_VERTICAL = ROTATION_MIRROR_VERTICAL, //!< Vertical Mirror 343 VPHAL_ROTATE_90_MIRROR_VERTICAL = ROTATION_90_MIRROR_VERTICAL, //!< 90 + V Mirror 344 VPHAL_ROTATE_90_MIRROR_HORIZONTAL = ROTATION_90_MIRROR_HORIZONTAL //!< 90 + H Mirror 345 } VPHAL_ROTATION; 346 347 //! 348 //! \brief Color Spaces enum 349 //! 350 typedef MEDIA_CSPACE VPHAL_CSPACE; 351 352 //! 353 //! \brief Surface types enum 354 //! IMPORTANT : SurfaceType_Layer[] must be updated to match this enum type 355 //! 356 typedef enum _VPHAL_SURFACE_TYPE 357 { 358 SURF_NONE = 0, 359 SURF_IN_BACKGROUND, 360 SURF_IN_PRIMARY, 361 SURF_IN_SUBSTREAM, 362 SURF_IN_REFERENCE, 363 SURF_OUT_RENDERTARGET, 364 SURF_TYPE_COUNT //!< Keep this line at the end 365 } VPHAL_SURFACE_TYPE; 366 C_ASSERT(SURF_TYPE_COUNT == 6); //!< When adding, update assert & vphal_solo_scenario.cpp 367 368 //! 369 //! Structure VPHAL_GAMMA_TYPE 370 //! \brief GAMMA Function type 371 //! 372 typedef enum _VPHAL_GAMMA_TYPE 373 { 374 VPHAL_GAMMA_NONE = 0, 375 VPHAL_GAMMA_TRADITIONAL_GAMMA, 376 VPHAL_GAMMA_SMPTE_ST2084, 377 VPHAL_GAMMA_BT1886, 378 VPHAL_GAMMA_SRGB, 379 VPHAL_GAMMA_Count 380 } VPHAL_GAMMA_TYPE; 381 C_ASSERT(VPHAL_GAMMA_Count == 5); //!< When adding, update assert 382 383 //! 384 //! \def IS_COLOR_SPACE_BT2020_YUV(_a) 385 //! Check if the color space is BT2020 YUV 386 //! 387 #define IS_COLOR_SPACE_BT2020_YUV(_a) (_a == CSpace_BT2020 || \ 388 _a == CSpace_BT2020_FullRange) 389 390 //! 391 //! \def IS_COLOR_SPACE_BT2020_RGB(_a) 392 //! Check if the color space is BT2020 RGB 393 //! 394 #define IS_COLOR_SPACE_BT2020_RGB(_a) (_a == CSpace_BT2020_RGB || \ 395 _a == CSpace_BT2020_stRGB) 396 397 //! 398 //! \def IS_COLOR_SPACE_BT2020(_a) 399 //! Check if the color space is BT2020 400 //! 401 #define IS_COLOR_SPACE_BT2020(_a) (IS_COLOR_SPACE_BT2020_YUV(_a) || \ 402 IS_COLOR_SPACE_BT2020_RGB(_a)) 403 404 //! 405 //! \brief Sample Type enum 406 //! 407 typedef enum _VPHAL_SAMPLE_TYPE 408 { 409 SAMPLE_PROGRESSIVE, 410 SAMPLE_SINGLE_TOP_FIELD, 411 SAMPLE_SINGLE_BOTTOM_FIELD, 412 SAMPLE_INTERLEAVED_EVEN_FIRST_TOP_FIELD, 413 SAMPLE_INTERLEAVED_EVEN_FIRST_BOTTOM_FIELD, 414 SAMPLE_INTERLEAVED_ODD_FIRST_TOP_FIELD, 415 SAMPLE_INTERLEAVED_ODD_FIRST_BOTTOM_FIELD, 416 SAMPLE_INVALID 417 } VPHAL_SAMPLE_TYPE; 418 C_ASSERT(SAMPLE_INVALID == 7); //!< When adding, update assert & vphal_solo_scenario.cpp 419 420 //! 421 //! \brief Frame Format enum 422 //! 423 typedef enum _VPHAL_FRAME_FORMAT 424 { 425 FRAME_FORMAT_PROGRESSIVE, 426 FRAME_FORMAT_INTERLEAVED, 427 FRAME_FORMAT_FIELD 428 } VPHAL_FRAME_FORMAT; 429 430 //! 431 //! \brief Interlaced Scaling Mode enum 432 //! 433 typedef enum _VPHAL_ISCALING_TYPE 434 { 435 ISCALING_NONE, 436 ISCALING_INTERLEAVED_TO_INTERLEAVED, 437 ISCALING_INTERLEAVED_TO_FIELD, 438 ISCALING_FIELD_TO_INTERLEAVED, 439 ISCALING_FIELD_TO_FIELD 440 } VPHAL_ISCALING_TYPE; 441 C_ASSERT(ISCALING_FIELD_TO_FIELD == 4); 442 443 //! 444 //! \ brief HVS DN Mode enum 445 //! 446 typedef enum _VPHAL_HVSDN_MODE 447 { 448 HVSDENOISE_AUTO_BDRATE = 0, 449 HVSDENOISE_AUTO_SUBJECTIVE, 450 HVSDENOISE_MANUAL 451 } VPHAL_HVSDN_MODE; 452 453 //! 454 //! \brief DI Mode enum 455 //! 456 typedef enum _VPHAL_DI_MODE 457 { 458 DI_MODE_BOB, 459 DI_MODE_ADI 460 } VPHAL_DI_MODE; 461 C_ASSERT(DI_MODE_ADI == 1); //!< When adding, update assert & vphal_solo_scenario.cpp 462 463 //! 464 //! \brief Blend Type enum 465 //! 466 typedef enum _VPHAL_BLEND_TYPE 467 { 468 BLEND_NONE = 0, 469 BLEND_SOURCE, 470 BLEND_PARTIAL, 471 BLEND_CONSTANT, 472 BLEND_CONSTANT_SOURCE, 473 BLEND_CONSTANT_PARTIAL, 474 BLEND_XOR_MONO 475 } VPHAL_BLEND_TYPE; 476 C_ASSERT(BLEND_CONSTANT == 3); //!< When adding, update assert & vphal_solo_scenario.cpp 477 478 //! 479 //! \brief Scaling Mode enum 480 //! 481 typedef enum _VPHAL_SCALING_MODE 482 { 483 VPHAL_SCALING_NEAREST = 0, 484 VPHAL_SCALING_BILINEAR, 485 VPHAL_SCALING_AVS, 486 VPHAL_SCALING_ADV_QUALITY // !< Advance Perf mode 487 } VPHAL_SCALING_MODE; 488 C_ASSERT(VPHAL_SCALING_ADV_QUALITY == 3); //!< When adding, update assert & vphal_solo_scenario.cpp 489 490 //! 491 //! \brief Composition Report Mode enum 492 //! 493 typedef enum _VPHAL_COMPOSITION_REPORT_MODE 494 { 495 VPHAL_NO_COMPOSITION, //!< No composition , Error Reporting cases 496 VPHAL_INPLACE_COMPOSITION, //!< Inplace Composition 497 VPHAL_LEGACY_COMPOSITION //!< Legacy Composition 498 } VPHAL_COMPOSITION_REPORT_MODE; 499 500 typedef enum _VPHAL_DI_REPORT_MODE 501 { 502 VPHAL_DI_REPORT_PROGRESSIVE, //!< Progressive output 503 VPHAL_DI_REPORT_BOB, //!< True BOB output 504 VPHAL_DI_REPORT_ADI_BOB, //!< DNDI BOB output 505 VPHAL_DI_REPORT_ADI, //!< ADI output 506 VPHAL_DI_REPORT_FMD //!< FMD output 507 } VPHAL_DI_REPORT_MODE; 508 509 //! 510 //! \brief Colorpack enum 511 //! 512 typedef enum _VPHAL_COLORPACK 513 { 514 VPHAL_COLORPACK_400 = 0, 515 VPHAL_COLORPACK_420, 516 VPHAL_COLORPACK_411, 517 VPHAL_COLORPACK_422, 518 VPHAL_COLORPACK_444, 519 VPHAL_COLORPACK_UNKNOWN 520 } VPHAL_COLORPACK, 521 *PVPHAL_COLORPACK; 522 523 //! 524 //! \brief VEBOX 3DLut interpolation mode 525 //! 526 typedef enum _VPHAL_3DLUT_INTERPOLATION 527 { 528 VPHAL_3DLUT_INTERPOLATION_DEFAULT = 0, //!< Default 3DLUT interpolation method. 529 VPHAL_3DLUT_INTERPOLATION_TRILINEAR = 1, //!< 3DLUT trilinear interpolation method. 530 VPHAL_3DLUT_INTERPOLATION_TETRAHEDRAL = 2 //!< 3DLUT tetrahedral interpolation method. 531 } VPHAL_3DLUT_INTERPOLATION; 532 533 //! 534 //! \brief Output Pipe Mode enum 535 //! \details The output pipe that writes the RenderTarget surface 536 //! 537 typedef enum _VPHAL_OUTPUT_PIPE_MODE 538 { 539 VPHAL_OUTPUT_PIPE_MODE_INVALID = -1, //!< None output pipe selected. This is an invalid state 540 VPHAL_OUTPUT_PIPE_MODE_COMP = 0, //!< Composition output pipe. RenderTarget will be written by Composition 541 VPHAL_OUTPUT_PIPE_MODE_SFC = 1, //!< SFC output pipe. RenderTarget will be written by SFC 542 VPHAL_OUTPUT_PIPE_MODE_VEBOX = 2 //!< Vebox output pipe. RenderTarget will be written by Vebox 543 } VPHAL_OUTPUT_PIPE_MODE, 544 *PVPHAL_OUTPUT_PIPE_MODE; 545 546 typedef enum _VPHAL_SCALING_PREFERENCE 547 { 548 VPHAL_SCALING_PREFER_SFC = 0, // SFC is default 549 VPHAL_SCALING_PREFER_COMP, // For Gen9/10, Composition AVS get better quality than SFC AVS 550 VPHAL_SCALING_PREFER_SFC_FOR_VEBOX // if VEBOX is required, use VEBOX + SFC, otherwise use Composistion 551 } VPHAL_SCALING_PREFERENCE; 552 C_ASSERT(VPHAL_SCALING_PREFER_SFC_FOR_VEBOX == 2); //!< When adding, update assert & vphal_solo_scenario.cpp 553 554 //! 555 //! \brief Gamut Mode enum 556 //! 557 typedef enum _VPHAL_GAMUT_MODE 558 { 559 GAMUT_MODE_NONE, 560 GAMUT_MODE_BASIC, 561 GAMUT_MODE_ADVANCED 562 } VPHAL_GAMUT_MODE; 563 C_ASSERT(GAMUT_MODE_ADVANCED == 2); //!< When adding, update assert & vphal_solo_scenario.cpp 564 565 //----------------------------------------------------------------------------- 566 // Forward declaration - 567 // IMPORTANT - DDI interfaces are NOT to access internal VPHAL states 568 //----------------------------------------------------------------------------- 569 typedef struct _RENDERHAL_INTERFACE *PRENDERHAL_INTERFACE; 570 typedef class MhwVeboxInterface *PMHW_VEBOX_INTERFACE; 571 typedef class MhwSfcInterface *PMHW_SFC_INTERFACE; 572 typedef struct VPHAL_SURFACE *PVPHAL_SURFACE; 573 574 class VphalRenderer; 575 576 class MhwCpInterface; 577 578 //! 579 //! Union VPHAL_COLOR_SAMPLE_8 580 //! \brief Vphal Color Sample 8 bit 581 //! 582 typedef union _VPHAL_COLOR_SAMPLE_8 583 { 584 // ARGB 585 struct 586 { 587 uint8_t B; 588 uint8_t G; 589 uint8_t R; 590 uint8_t A; 591 }; 592 593 // AVYU (YUY2 samples) 594 struct 595 { 596 uint8_t U; 597 uint8_t Y; 598 uint8_t V; 599 uint8_t a; 600 }; 601 602 // AYCbCr (NV12 samples) 603 struct 604 { 605 uint8_t Cr; //!< V 606 uint8_t Cb; //!< U 607 uint8_t YY; //!< Y 608 uint8_t Alpha; 609 }; 610 611 uint32_t dwValue; 612 } VPHAL_COLOR_SAMPLE_8, *PVPHAL_COLOR_SAMPLE_8; 613 614 //! 615 //! Union VPHAL_COLOR_SAMPLE_16 616 //! \brief Vphal Color Sample 16 bit 617 //! 618 typedef union _VPHAL_COLOR_SAMPLE_16 619 { 620 // ARGB 621 struct 622 { 623 int16_t B; 624 int16_t G; 625 int16_t R; 626 int16_t A; 627 }; 628 629 // AVYU 630 struct 631 { 632 int16_t U; 633 int16_t Y; 634 int16_t V; 635 int16_t a; 636 }; 637 638 // AYCbCr 639 struct 640 { 641 int16_t Cr; //!< V 642 int16_t Cb; //!< U 643 int16_t YY; //!< Y 644 int16_t Alpha; 645 }; 646 647 uint32_t Value; 648 } VPHAL_COLOR_SAMPLE_16, *PVPHAL_COLOR_SAMPLE_16; 649 650 //! 651 //! Structure VPHAL_PLANE_OFFSET 652 //! \brief Vphal Plane OffSet 653 //! 654 typedef struct _VPHAL_PLANE_OFFSET 655 { 656 int iLockSurfaceOffset; //!< Locked surface offset 657 int iSurfaceOffset; //!< Plane surface offset 658 int iXOffset; //!< X offset - horizontal offset in pixels 659 int iYOffset; //!< Y offset - vertical offset in pixels 660 } VPHAL_PLANE_OFFSET, *PVPHAL_PLANE_OFFSET; 661 662 //! 663 //! Union VPHAL_HALF_PRECISION_FLOAT 664 //! \brief Vphal half precision float type 665 //! 666 typedef union _VPHAL_HALF_PRECISION_FLOAT 667 { 668 struct 669 { 670 uint16_t Mantissa : 10; 671 uint16_t Exponent : 5; 672 uint16_t Sign : 1; 673 }; 674 675 uint16_t value; 676 } VPHAL_HALF_PRECISION_FLOAT, PVPHAL_HALF_PRECISION_FLOAT; 677 678 //! 679 //! Structure VPHAL_PALETTE 680 //! \brief Vphal Palette 681 //! \details Palette entries: 682 //! - 0 : empty palette 683 //! - -1 : palette allocated but not loaded 684 //! - >0 : palette in use 685 //! 686 typedef struct _VPHAL_PALETTE 687 { 688 VPHAL_PALETTE_TYPE PaletteType; //!< Type of palette 689 VPHAL_CSPACE ColorSpace; //!< ColorSpace of Palette 690 bool bHasAlpha; //!< Alpha is valid 691 int32_t iTotalEntries; //!< Palette entries allocated 692 int32_t iNumEntries; //!< Palette entries in use 693 union 694 { 695 PVPHAL_COLOR_SAMPLE_8 pPalette8; 696 PVPHAL_COLOR_SAMPLE_16 pPalette16; 697 }; 698 } VPHAL_PALETTE, *PVPHAL_PALETTE; 699 700 //! 701 //! Structure VPHAL_BLENDING_PARAMS 702 //! \brief Layer Blending parameters 703 //! 704 typedef struct _VPHAL_BLENDING_PARAMS 705 { 706 VPHAL_BLEND_TYPE BlendType = BLEND_NONE; 707 float fAlpha = 0.0; 708 } VPHAL_BLENDING_PARAMS, *PVPHAL_BLENDING_PARAMS; 709 710 //! 711 //! Structure VPHAL_LUMAKEY_PARAMS 712 //! \brief Luma Keying parameters 713 //! 714 typedef struct _VPHAL_LUMAKEY_PARAMS 715 { 716 int16_t LumaLow = 0; 717 int16_t LumaHigh = 0; 718 } VPHAL_LUMAKEY_PARAMS, *PVPHAL_LUMAKEY_PARAMS; 719 720 //! 721 //! Structure VPHAL_PROCAMP_PARAMS 722 //! \brief Procamp parameters 723 //! 724 typedef struct _VPHAL_PROCAMP_PARAMS 725 { 726 bool bEnabled = false; 727 float fBrightness = 0.0; 728 float fContrast = 0.0; 729 float fHue = 0.0; 730 float fSaturation = 0.0; 731 } VPHAL_PROCAMP_PARAMS, *PVPHAL_PROCAMP_PARAMS; 732 733 //! 734 //! Structure VPHAL_IEF_PARAMS 735 //! \brief IEF parameters - Image Enhancement (Detail) Filter 736 //! 737 typedef struct _VPHAL_IEF_PARAMS 738 { 739 bool bEnabled = false; 740 bool bSmoothMode = false; 741 bool bSkintoneTuned = false; 742 bool bEmphasizeSkinDetail = false; 743 float fIEFFactor = 0.0; 744 uint16_t StrongEdgeWeight = 0; 745 uint16_t RegularWeight = 0; 746 uint16_t StrongEdgeThreshold = 0; 747 void *pExtParam = nullptr; 748 } VPHAL_IEF_PARAMS, *PVPHAL_IEF_PARAMS; 749 750 //! 751 //! Structure VPHAL_DI_PARAMS 752 //! \brief Deinterlacing parameters 753 //! 754 typedef struct _VPHAL_DI_PARAMS 755 { 756 VPHAL_DI_MODE DIMode = DI_MODE_BOB; //!< DeInterlacing mode 757 bool bEnableFMD = false; //!< FMD 758 bool bSingleField = false; //!< Used in frame Recon - if 30fps (one call per sample pair) 759 bool bSCDEnable = false; //!< Scene change detection 760 } VPHAL_DI_PARAMS, *PVPHAL_DI_PARAMS; 761 762 //! 763 //! \brief Noise Level Enumeration 764 //! 765 typedef enum _VPHAL_NOISELEVEL 766 { 767 NOISELEVEL_DEFAULT, 768 NOISELEVEL_VC1_HD 769 } VPHAL_NOISELEVEL; 770 C_ASSERT(NOISELEVEL_VC1_HD == 1); //!< When adding, update assert & vphal_solo_scenario.cpp 771 772 //! 773 //! Structure VPHAL_HVSDENOISE_PARAMS 774 //! \brief HVS Denoise Parameters - Human Vision System Based Denoise 775 //! 776 typedef struct _VPHAL_HVSDENOISE_PARAMS 777 { 778 uint16_t QP = 0; 779 uint16_t Strength = 0; 780 VPHAL_HVSDN_MODE Mode = HVSDENOISE_AUTO_BDRATE; 781 void *pHVSDenoiseParam = nullptr; 782 uint32_t dwDenoiseParamSize = 0; 783 uint32_t dwGlobalNoiseLevel = 0; //!< Global Noise Level for Y 784 uint32_t dwGlobalNoiseLevelU = 0; //!< Global Noise Level for U 785 uint32_t dwGlobalNoiseLevelV = 0; //!< Global Noise Level for V 786 uint16_t TgneEnable = 0; 787 uint16_t FirstFrame = 0; 788 uint16_t TgneFirstFrame = 0; 789 uint16_t Fallback = 0; 790 uint16_t EnableChroma = 0; 791 uint16_t EnableTemporalGNE = 0; 792 uint16_t RCMethod = 0; 793 uint16_t TgtKbps = 0; 794 uint16_t Width = 0; 795 uint16_t Height = 0; 796 uint32_t Sgne_Level = 0; 797 uint32_t Sgne_LevelU = 0; 798 uint32_t Sgne_LevelV = 0; 799 uint32_t Sgne_Count = 0; 800 uint32_t Sgne_CountU = 0; 801 uint32_t Sgne_CountV = 0; 802 uint32_t PrevNslvTemporal = 0; 803 uint32_t PrevNslvTemporalU = 0; 804 uint32_t PrevNslvTemporalV = 0; 805 } VPHAL_HVSDENOISE_PARAMS, *PVPHAL_HVSDENOISE_PARAMS; 806 807 //! 808 //! Structure VPHAL_SLIMIPU_DENOISE_PARAM 809 //! \brief SLIMIPU Denoise Parameters 810 //! 811 typedef struct _VPHAL_SLIMIPU_DENOISE_PARAM 812 { 813 uint32_t MemSizeInBytes; 814 void *pSystemMem; 815 } VPHAL_SLIMIPU_DENOISE_PARAM, *PVPHAL_SLIMIPU_DENOISE_PARAM; 816 817 //! 818 //! Structure VPHAL_DENOISE_PARAMS 819 //! \brief Denoise parameters 820 //! 821 typedef struct _VPHAL_DENOISE_PARAMS 822 { 823 bool bEnableChroma = false; 824 bool bEnableLuma = false; 825 bool bAutoDetect = false; 826 float fDenoiseFactor = 0.0; 827 VPHAL_NOISELEVEL NoiseLevel = NOISELEVEL_DEFAULT; 828 bool bEnableHVSDenoise = false; 829 VPHAL_HVSDENOISE_PARAMS HVSDenoise = {}; 830 bool bEnableSlimIPUDenoise = false; 831 VPHAL_SLIMIPU_DENOISE_PARAM SlimIPUDenoise = {}; 832 bool operator==(const struct _VPHAL_DENOISE_PARAMS &b) 833 { 834 return bEnableChroma == b.bEnableChroma && 835 bEnableLuma == b.bEnableLuma && 836 bAutoDetect == b.bAutoDetect && 837 bEnableHVSDenoise == false && 838 b.bEnableHVSDenoise == false && 839 bEnableSlimIPUDenoise == false && 840 b.bEnableSlimIPUDenoise == false; 841 } 842 } VPHAL_DENOISE_PARAMS, *PVPHAL_DENOISE_PARAMS; 843 844 //! 845 //! Structure VPHAL_STE_PARAMS 846 //! \brief STE parameters - Skin Tone Enhancement 847 //! 848 typedef struct _VPHAL_STE_PARAMS 849 { 850 uint32_t dwSTEFactor = 0; 851 } VPHAL_STE_PARAMS, *PVPHAL_STE_PARAMS; 852 853 //! 854 //! Structure VPHAL_STE_PARAMS 855 //! \brief STE parameters - Skin Tone Enhancement 856 //! 857 typedef struct _VPHAL_STD_PARAMS 858 { 859 uint32_t paraSizeInBytes = 0; 860 void *param = nullptr; 861 unsigned long long sysMem = 0; 862 bool bOutputSkinScore = false; 863 } VPHAL_STD_PARAMS, *PVPHAL_STD_PARAMS; 864 865 //! 866 //! Structure VPHAL_TCC_PARAMS 867 //! \brief TCC parameters - Total Color Control 868 //! 869 typedef struct _VPHAL_TCC_PARAMS 870 { 871 uint8_t Red = 0; 872 uint8_t Green = 0; 873 uint8_t Blue = 0; 874 uint8_t Cyan = 0; 875 uint8_t Magenta = 0; 876 uint8_t Yellow = 0; 877 } VPHAL_TCC_PARAMS, *PVPHAL_TCC_PARAMS; 878 879 //! 880 //! Structure VPHAL_COLORPIPE_PARAMS 881 //! \brief IECP Parameters - Color Pipe 882 //! 883 typedef struct _VPHAL_COLORPIPE_PARAMS 884 { 885 bool bEnableACE = false; 886 bool bEnableSTE = false; 887 bool bEnableSTD = false; // Is vebox STD alone enabled 888 bool bEnableTCC = false; 889 bool bAceLevelChanged = false; 890 uint32_t dwAceLevel = 0; 891 uint32_t dwAceStrength = 0; 892 VPHAL_STE_PARAMS SteParams = {}; 893 VPHAL_STD_PARAMS StdParams = {}; 894 VPHAL_TCC_PARAMS TccParams = {}; 895 } VPHAL_COLORPIPE_PARAMS, *PVPHAL_COLORPIPE_PARAMS; 896 897 //! 898 //! Structure VPHAL_3DLUT_PARAMS 899 //! \brief 3DLUT parameters - 3DLUT 900 //! 901 typedef struct _VPHAL_3DLUT_PARAMS 902 { 903 PVPHAL_SURFACE pExt3DLutSurface = nullptr; // Pointer to the 3DLUT surface which app passes to driver. 904 uint32_t LutSize = 0; // Size of 3DLUT, i.e, how many entries LUT has. 905 uint32_t ChannelMapping = 0; // Channel Mapping for the 3DLUT input to 3DLUT output. 906 uint16_t BitDepthPerChannel = 0; // Bit Depth Per Channel(4 channels for 3DLUT). 907 uint16_t ByteCountPerEntry = 0; // Byte Count Per Entry including reserved bytes. 908 909 VPHAL_3DLUT_INTERPOLATION InterpolationMethod = VPHAL_3DLUT_INTERPOLATION_DEFAULT; // VEBox 3DLut interpolation mode 910 } VPHAL_3DLUT_PARAMS, *PVPHAL_3DLUT_PARAMS; 911 912 //! 913 //! Structure VPHAL_GAMUT_PARAMS 914 //! \brief IECP Gamut Mapping Parameters 915 //! 916 typedef struct _VPHAL_GAMUT_PARAMS 917 { 918 VPHAL_GAMUT_MODE GCompMode; 919 VPHAL_GAMUT_MODE GExpMode; 920 VPHAL_GAMMA_VALUE GammaValue; 921 uint32_t dwAttenuation; //!< U2.10 [0, 1024] 0 = No down scaling, 1024 = Full down scaling 922 float displayRGBW_x[4]; 923 float displayRGBW_y[4]; 924 bool bColorBalance; 925 int32_t colorBalanceMatrix[3][3]; 926 } VPHAL_GAMUT_PARAMS, *PVPHAL_GAMUT_PARAMS; 927 928 //! 929 //! Structure VPHAL_NLAS_PARAMS 930 //! \brief NLAS parameters - Non-Anamorphic Scaling 931 //! 932 typedef struct _VPHAL_NLAS_PARAMS 933 { 934 float fVerticalCrop; 935 float fHLinearRegion; 936 float fNonLinearCrop; 937 } VPHAL_NLAS_PARAMS, *PVPHAL_NLAS_PARAMS; 938 939 typedef struct _VPHAL_VIDEO_COLOR_RGBA 940 { 941 float R; 942 float G; 943 float B; 944 float A; 945 } VPHAL_VIDEO_COLOR_RGBA; 946 947 //! 948 //! Structure VPHAL_COLORFILL_PARAMS 949 //! \brief ColorFill parameters 950 //! 951 typedef struct _VPHAL_COLORFILL_PARAMS 952 { 953 bool bYCbCr = false; 954 uint32_t Color = 0; 955 VPHAL_VIDEO_COLOR_RGBA Color1 = {}; 956 VPHAL_CSPACE CSpace = CSpace_None; 957 bool bDisableColorfillinSFC = false; 958 bool bOnePixelBiasinSFC = false; 959 } VPHAL_COLORFILL_PARAMS, *PVPHAL_COLORFILL_PARAMS; 960 961 //! 962 //! Structure VPHAL_ALPHA_FILL_MODE 963 //! \brief Alpha mode 964 //! 965 typedef enum _VPHAL_ALPHA_FILL_MODE 966 { 967 VPHAL_ALPHA_FILL_MODE_NONE = 0, 968 VPHAL_ALPHA_FILL_MODE_OPAQUE, 969 VPHAL_ALPHA_FILL_MODE_BACKGROUND, 970 VPHAL_ALPHA_FILL_MODE_SOURCE_STREAM, 971 } VPHAL_ALPHA_FILL_MODE; 972 973 //! 974 //! Structure VPHAL_ALPHA_PARAMS 975 //! \brief Alpha parameters 976 //! 977 typedef struct _VPHAL_ALPHA_PARAMS 978 { 979 float fAlpha; 980 VPHAL_ALPHA_FILL_MODE AlphaMode; 981 } VPHAL_ALPHA_PARAMS, *PVPHAL_ALPHA_PARAMS; 982 983 //! 984 //! Structure VPHAL_SPLIT_SCREEN_DEMO_POSITION 985 //! \brief Split-Screen Demo Mode Position 986 //! 987 typedef enum _VPHAL_SPLIT_SCREEN_DEMO_POSITION 988 { 989 SPLIT_SCREEN_DEMO_DISABLED = 0, 990 SPLIT_SCREEN_DEMO_LEFT, 991 SPLIT_SCREEN_DEMO_RIGHT, 992 SPLIT_SCREEN_DEMO_TOP, 993 SPLIT_SCREEN_DEMO_BOTTOM, 994 SPLIT_SCREEN_DEMO_END_POS_LIST 995 } VPHAL_SPLIT_SCREEN_DEMO_POSITION; 996 997 //! 998 //! Structure VPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS 999 //! \brief Split-Screen Demo Mode Parameters 1000 //! 1001 typedef struct _VPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS 1002 { 1003 VPHAL_SPLIT_SCREEN_DEMO_POSITION Position; //!< Position of split mode area (disable features) 1004 bool bDisableACE : 1; //!< Disable ACE 1005 bool bDisableAVS : 1; //!< Disable AVS 1006 bool bDisableDN : 1; //!< Disable DN 1007 bool bDisableFMD : 1; //!< Disable FMD 1008 bool bDisableIEF : 1; //!< Disable IEF 1009 bool bDisableProcamp : 1; //!< Disable Procamp 1010 bool bDisableSTE : 1; //!< Disable STE 1011 bool bDisableTCC : 1; //!< Disable TCC 1012 bool bDisableIS : 1; //!< Disable IS 1013 bool bDisableDrDb : 1; //!< Disable DRDB 1014 bool bDisableDNUV : 1; //!< Disable DNUV 1015 bool bDisableFRC : 1; //!< Disable FRC 1016 bool bDisableLACE : 1; //!< Disable LACE 1017 } VPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS, *PVPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS; 1018 1019 //! 1020 //! Structure VPHAL_RENDER_PARAMS 1021 //! \brief VPHAL Rendering Parameters 1022 //! 1023 struct VPHAL_RENDER_PARAMS 1024 { 1025 // Input/output surfaces 1026 uint32_t uSrcCount = 0; //!< Num sources 1027 VPHAL_SURFACE *pSrc[VPHAL_MAX_SOURCES] = {}; //!< Source Samples 1028 uint32_t uDstCount = 0; //!< Num Targets 1029 VPHAL_SURFACE *pTarget[VPHAL_MAX_TARGETS] = {}; //!< Render Target 1030 1031 // Additional parameters not included in PVPHAL_SURFACE 1032 PRECT pConstriction = nullptr; //!< Constriction rectangle 1033 PVPHAL_COLORFILL_PARAMS pColorFillParams = nullptr; //!< ColorFill - BG only 1034 bool bTurboMode = false; //!< Enable Media Turbo Mode 1035 bool bStereoMode = false; //!< Stereo BLT mode 1036 PVPHAL_ALPHA_PARAMS pCompAlpha = nullptr; //!< Alpha for composited surfaces 1037 bool bDisableDemoMode = false; //!< Enable/Disable demo mode function calls 1038 PVPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS pSplitScreenDemoModeParams = nullptr; //!< Split-screen demo mode for VP features 1039 bool bIsDefaultStream = false; //!< Identifier to differentiate default stream 1040 1041 // Debugging parameters 1042 MOS_COMPONENT Component = COMPONENT_UNKNOWN; //!< DDI component (for DEBUGGING only) 1043 1044 // Status Report 1045 bool bReportStatus = false; //!< Report current media BB status (Pre-Processing) 1046 uint32_t StatusFeedBackID = 0; //!< Unique Staus ID; 1047 #if (_DEBUG || _RELEASE_INTERNAL) 1048 bool bTriggerGPUHang = false; //!< Trigger GPU HANG 1049 #endif 1050 1051 bool bCalculatingAlpha = false; //!< Alpha calculation parameters 1052 1053 // extension parameters 1054 void *pExtensionData = nullptr; //!< Extension data 1055 1056 bool bPathKernel = false; // HDR path config if use kernel 1057 bool bAPGWorkloadEnable = false; //!< Identify Whether APG workload Enabled or not 1058 1059 bool bDisableVeboxFor8K = false; 1060 bool bUseVEHdrSfc = false; // use SFC for to perform CSC/Scaling/RGBSwap of HDR streaming; if false, use composite render. 1061 bool bNonFirstFrame = false; // first frame or not: first frame false, otherwise true considering zeromemory parameters. 1062 bool bOptimizeCpuTiming = false; //!< Optimize Cpu Timing 1063 1064 bool bForceToRender = false; // Force to render to perform scaling. 1065 VPHAL_RENDER_PARAMSVPHAL_RENDER_PARAMS1066 VPHAL_RENDER_PARAMS() : uSrcCount(0), 1067 pSrc(), 1068 uDstCount(0), 1069 pTarget(), 1070 pConstriction(nullptr), 1071 pColorFillParams(nullptr), 1072 bTurboMode(false), 1073 bStereoMode(false), 1074 pCompAlpha(nullptr), 1075 bDisableDemoMode(false), 1076 pSplitScreenDemoModeParams(nullptr), 1077 bIsDefaultStream(false), 1078 Component(), 1079 bReportStatus(false), 1080 StatusFeedBackID(0), 1081 #if (_DEBUG || _RELEASE_INTERNAL) 1082 bTriggerGPUHang(false), 1083 #endif 1084 bCalculatingAlpha(false), 1085 pExtensionData(nullptr), 1086 bPathKernel(false), 1087 bUseVEHdrSfc(false), 1088 bNonFirstFrame(false) 1089 { 1090 } 1091 }; 1092 1093 typedef VPHAL_RENDER_PARAMS *PVPHAL_RENDER_PARAMS; 1094 typedef const VPHAL_RENDER_PARAMS *PCVPHAL_RENDER_PARAMS; 1095 1096 //! 1097 //! Structure VPHAL_GET_SURFACE_INFO 1098 //! \brief VPHAL Get Surface Infomation Parameters 1099 //! 1100 1101 typedef struct VPHAL_GET_SURFACE_INFO *PVPHAL_GET_SURFACE_INFO; 1102 struct VPHAL_GET_SURFACE_INFO 1103 { 1104 uint32_t ArraySlice; 1105 uint32_t MipSlice; 1106 MOS_S3D_CHANNEL S3dChannel; 1107 }; 1108 1109 #endif // __VP_COMMON_DEFS_H__