| /* |
| * Copyright (c) 2009-2021, Intel Corporation |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a |
| * copy of this software and associated documentation files (the "Software"), |
| * to deal in the Software without restriction, including without limitation |
| * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
| * and/or sell copies of the Software, and to permit persons to whom the |
| * Software is furnished to do so, subject to the following conditions: |
| * |
| * The above copyright notice and this permission notice shall be included |
| * in all copies or substantial portions of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
| * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
| * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR |
| * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, |
| * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
| * OTHER DEALINGS IN THE SOFTWARE. |
| */ |
| //! |
| //! \file vphal_common.h |
| //! \brief clarify common utilities for vphal |
| //! \details clarify common utilities for vphal including: |
| //! some marcro, enum, union, structure, function |
| //! |
| #ifndef __VPHAL_COMMON_H__ |
| #define __VPHAL_COMMON_H__ |
| |
| #if EMUL || VPHAL_LIB |
| |
| #include "support.h" |
| |
| #endif // EMUL || VPHAL_LIB |
| |
| #include "mos_os.h" |
| #include "vphal_common_hdr.h" |
| #include "media_common_defs.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| //! |
| //! \def DBG_TEXT(txt) |
| //! Allow certain \a txt fields to be present only on DEBUG builds. |
| //! |
| #if _DEBUG |
| #define DBG_TEXT(txt) txt |
| #else |
| #define DBG_TEXT(txt) "" |
| #endif |
| |
| #ifndef ABS |
| //! |
| //! \def ABS( x ) |
| //! Calcualte absolute value of \a x. |
| //! |
| #define ABS(a) (((a) < 0) ? (-(a)) : (a)) |
| #endif |
| |
| //! |
| //! \def OUT_OF_BOUNDS(a, min, max) |
| //! Calcualte if \a a out the range of [\a min, \a max]. |
| //! |
| #define OUT_OF_BOUNDS(a, min, max) ( ((a) < (min)) || ((a) > (max)) ) |
| |
| //! |
| //! \def WITHIN_BOUNDS(a, min, max) |
| //! Calcualte if \a a within the range of [\a min, \a max]. |
| //! |
| #define WITHIN_BOUNDS(a, min, max) ( ((a) >= (min)) && ((a) <= (max)) ) |
| |
| //! |
| //! \def VPHAL_ABS(x) |
| //! Calcualte the Abslute value of \a x. |
| //! |
| #define VPHAL_ABS(x) (((x) > 0) ? (x) : -(x)) |
| |
| #define VPHAL_PI 3.14159265358979324f //!< Definition the const pi |
| |
| //! |
| //! \def SAME_SIZE_RECT(rect1, rect2) |
| //! Compare if the size of two rectangles is the same |
| //! |
| #define SAME_SIZE_RECT(rect1, rect2) \ |
| (((rect1).right - (rect1).left == (rect2).right - (rect2).left) && \ |
| ((rect1).bottom - (rect1).top == (rect2).bottom - (rect2).top)) |
| |
| //! |
| //! \def RECT1_EQUALS_RECT2(rect1, rect2) |
| //! Compare if two rectangles has the same coordinate |
| //! |
| #define RECT1_EQUALS_RECT2(rect1, rect2) \ |
| (((rect1).left == (rect2).left) && ((rect1).top == (rect2).top) && \ |
| ((rect1).right == (rect2).right) && ((rect1).bottom == (rect2).bottom)) |
| |
| //! |
| //! \def RECT1_CONTAINS_RECT2(rect1, rect2) |
| //! Compare if rectangle \a rect1 contains rectangle \a rect2 in coordinate |
| //! |
| #define RECT1_CONTAINS_RECT2(rect1, rect2) \ |
| (((rect1).left <= (rect2).left) && ((rect1).top <= (rect2).top) && \ |
| ((rect1).right >= (rect2).right) && ((rect1).bottom >= (rect2).bottom)) |
| |
| //! |
| //! \def RECT1_OUTSIDE_RECT2(rect1, rect2) |
| //! Compare if the rectangle \a rect1 is outside the rectangle \a rect2 at least partly in coordinate |
| //! |
| #define RECT1_OUTSIDE_RECT2(rect1, rect2) \ |
| (((rect1).left >= (rect2).right) || ((rect1).top >= (rect2).bottom) || \ |
| ((rect1).right <= (rect2).left) || ((rect1).bottom <= (rect2).top)) |
| |
| //! |
| // \def DEGREE_TO_RADIAN(degree) |
| // Convert a degree value \a degree to radian. |
| //! |
| #define DEGREE_TO_RADIAN(degree) (degree) * (VPHAL_PI) / 180 |
| #define AVS_TBL_COEF_PREC 6 //!< Table coef precision (after decimal point |
| #define SAME_SAMPLE_THRESHOLD 1000 //!< When checking whether 2 timestamps are the same, leave room for some error |
| |
| //! |
| //! \def MEDIA_IS_HDCONTENT(dwWidth, dwHeight) |
| //! Determine if the size of content is HD |
| //! |
| #define MEDIA_SDCONTENT_MAX_WIDTH 720 |
| #define MEDIA_SDCONTENT_MAX_PAL_HEIGHT 576 |
| #define MEDIA_SDCONTENT_MAX_SW_WIDTH 768 |
| #define MEDIA_IS_HDCONTENT(dwWidth, dwHeight) ((dwWidth > MEDIA_SDCONTENT_MAX_SW_WIDTH) || (dwHeight > MEDIA_SDCONTENT_MAX_PAL_HEIGHT)) |
| |
| //! \brief Surface cache attributes |
| //! |
| #define VPHAL_SET_SURF_MEMOBJCTL(VpField, GmmUsageEnum) \ |
| { \ |
| Usage = GmmUsageEnum; \ |
| MemObjCtrl = pOsInterface->pfnCachePolicyGetMemoryObject(Usage, pOsInterface->pfnGetGmmClientContext(pOsInterface)); \ |
| VpField = MemObjCtrl.DwordValue; \ |
| } |
| |
| #define VPHAL_MEMORY_OBJECT_CONTROL uint32_t |
| |
| // ProcAmp Default Values |
| #define PROCAMP_BRIGHTNESS_MIN -100.0F |
| #define PROCAMP_BRIGHTNESS_MAX 100.0F |
| #define PROCAMP_BRIGHTNESS_DEFAULT 0.0F |
| #define PROCAMP_BRIGHTNESS_STEP 0.1F |
| #define PROCAMP_CONTRAST_MIN 0.0F |
| #define PROCAMP_CONTRAST_MAX 10.0F |
| #define PROCAMP_CONTRAST_DEFAULT 1.0F |
| #define PROCAMP_CONTRAST_STEP 0.01F |
| #define PROCAMP_HUE_MIN -180.0F |
| #define PROCAMP_HUE_MAX 180.0F |
| #define PROCAMP_HUE_DEFAULT 0.0F |
| #define PROCAMP_HUE_STEP 0.1F |
| #define PROCAMP_SATURATION_MIN 0.0F |
| #define PROCAMP_SATURATION_MAX 10.0F |
| #define PROCAMP_SATURATION_DEFAULT 1.0F |
| #define PROCAMP_SATURATION_STEP 0.01F |
| |
| // Denoise Default Values |
| #define NOISEREDUCTION_MIN 0.0F |
| #define NOISEREDUCTION_MAX 64.0F |
| #define NOISEREDUCTION_DEFAULT 0.0F |
| #define NOISEREDUCTION_STEP 1.0F |
| |
| // Sharpness Values |
| #define EDGEENHANCEMENT_MIN 0.0F |
| #define EDGEENHANCEMENT_MAX 64.0F |
| #define EDGEENHANCEMENT_DEFAULT 44.0F |
| #define EDGEENHANCEMENT_STEP 1.0F |
| #define IEF_STRONG_EDGE_WEIGHT 7 |
| #define IEF_REGULAR_WEIGHT 2 |
| #define IEF_STRONG_EDGE_THRESHOLD 8 |
| |
| // Skin Tone Detection/Enhancement values |
| #define STE_MIN 0.0F |
| #define STE_MAX 9.0F |
| #define STE_DEFAULT 3.0F |
| #define STE_STEP 1.0F |
| |
| // Total Color Correction values |
| #define TCC_MIN 0.0F |
| #define TCC_MAX 255.0F |
| #define TCC_DEFAULT 160.0F |
| #define TCC_STEP 1.0F |
| |
| // Adaptive Contrast Enhancement values |
| #define ACE_LEVEL_DEFAULT 5 |
| #define ACE_STRENGTH_DEFAULT 1 |
| |
| // Compositing Block size |
| #define VPHAL_COMP_BLOCK_WIDTH 16 |
| #define VPHAL_COMP_BLOCK_HEIGHT 16 |
| |
| // NLAS Default Values |
| #define NLAS_VERTICALCROP_MIN 0.0F |
| #define NLAS_VERTICALCROP_MAX 1.0F |
| #define NLAS_VERTICALCROP_DEFAULT 0.0F |
| #define NLAS_VERTICALCROP_STEP 0.001F |
| #define NLAS_HLINEARREGION_MIN 0.0F |
| #define NLAS_HLINEARREGION_MAX 1.0F |
| #define NLAS_HLINEARREGION_DEFAULT 1.0F |
| #define NLAS_HLINEARREGION_STEP 0.001F |
| #define NLAS_NONLINEARCROP_MIN 0.0F |
| #define NLAS_NONLINEARCROP_MAX 1.0F |
| #define NLAS_NONLINEARCROP_DEFAULT 0.0F |
| #define NLAS_NONLINEARCROP_STEP 0.001F |
| |
| #define VPHAL_MAX_SOURCES 17 //!< worst case: 16 sub-streams + 1 pri video |
| #define VPHAL_MAX_CHANNELS 2 |
| #define VPHAL_MAX_TARGETS 8 //!< multi output support |
| #define VPHAL_MAX_FUTURE_FRAMES 18 //!< maximum future frames supported in VPHAL |
| |
| #define VPHAL_TOP_FIELD 0 |
| #define VPHAL_BOTTOM_FIELD 1 |
| #define VPHAL_TOP_FIELD_FIRST 0 |
| #define VPHAL_BOTTOM_FIELD_FIRST 1 |
| |
| typedef struct _VPHAL_COMPOSITE_CACHE_CNTL |
| { |
| bool bL3CachingEnabled; |
| VPHAL_MEMORY_OBJECT_CONTROL PrimaryInputSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL InputSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL TargetSurfMemObjCtl; |
| } VPHAL_COMPOSITE_CACHE_CNTL, *PVPHAL_COMPOSITE_CACHE_CNTL; |
| |
| typedef struct _VPHAL_DNDI_CACHE_CNTL |
| { |
| bool bL3CachingEnabled; |
| VPHAL_MEMORY_OBJECT_CONTROL CurrentInputSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL PreviousInputSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL STMMInputSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL STMMOutputSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL DnOutSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL CurrentOutputSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL StatisticsOutputSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL LaceOrAceOrRgbHistogramSurfCtrl; |
| VPHAL_MEMORY_OBJECT_CONTROL AlphaOrVignetteSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL SkinScoreSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL LaceLookUpTablesSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL Vebox3DLookUpTablesSurfMemObjCtl; |
| } VPHAL_DNDI_CACHE_CNTL, *PVPHAL_DNDI_CACHE_CNTL; |
| |
| typedef struct _VPHAL_LACE_CACHE_CNTL |
| { |
| // LACE would reuse the bL3CachingEnabled of VEBOX's cache control |
| VPHAL_MEMORY_OBJECT_CONTROL FrameHistogramSurfaceMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL AggregatedHistogramSurfaceMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL StdStatisticsSurfaceMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL PwlfInSurfaceMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL PwlfOutSurfaceMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL WeitCoefSurfaceMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL GlobalToneMappingCurveLUTSurfaceMemObjCtl; |
| } VPHAL_LACE_CACHE_CNTL, *PVPHAL_LACE_CACHE_CNTL; |
| |
| typedef struct _VPHAL_16_ALIGN_CACHE_CNTL |
| { |
| bool bL3CachingEnabled; |
| VPHAL_MEMORY_OBJECT_CONTROL SourceSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL TargetSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL SamplerParamsSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL SamplerParamsStatsSurfMemObjCtl; |
| }VPHAL_16_ALIGN_CACHE_CNTL, *PVPHAL_16_ALIGN_CACHE_CNTL; |
| |
| typedef struct _VPHAL_FAST1TON_CACHE_CNTL |
| { |
| bool bL3CachingEnabled; |
| VPHAL_MEMORY_OBJECT_CONTROL SourceSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL TargetSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL SamplerParamsSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL SamplerParamsStatsSurfMemObjCtl; |
| }VPHAL_FAST1TON_CACHE_CNTL, *PVPHAL_FAST1TON_CACHE_CNTL; |
| |
| typedef struct _VPHAL_HDR_CACHE_CNTL |
| { |
| bool bL3CachingEnabled; |
| VPHAL_MEMORY_OBJECT_CONTROL SourceSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL TargetSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL Lut2DSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL Lut3DSurfMemObjCtl; |
| VPHAL_MEMORY_OBJECT_CONTROL CoeffSurfMemObjCtl; |
| } VPHAL_HDR_CACHE_CNTL, *PVPHAL_HDR_CACHE_CNTL; |
| |
| //! |
| //! \brief Feature specific cache control settings |
| //! |
| typedef struct _VPHAL_RENDER_CACHE_CNTL |
| { |
| // Input |
| bool bDnDi; |
| bool bCompositing; |
| bool bLace; |
| |
| // Output |
| VPHAL_DNDI_CACHE_CNTL DnDi; |
| VPHAL_COMPOSITE_CACHE_CNTL Composite; |
| VPHAL_LACE_CACHE_CNTL Lace; |
| } VPHAL_RENDER_CACHE_CNTL, *PVPHAL_RENDER_CACHE_CNTL; |
| |
| //! |
| //! \brief Vphal Rotation Mode enum |
| //! |
| typedef enum _VPHAL_ROTATION |
| { |
| VPHAL_ROTATION_IDENTITY = ROTATION_IDENTITY , //!< Rotation 0 degrees |
| VPHAL_ROTATION_90 = ROTATION_90 , //!< Rotation 90 degrees |
| VPHAL_ROTATION_180 = ROTATION_180 , //!< Rotation 180 degrees |
| VPHAL_ROTATION_270 = ROTATION_270 , //!< Rotation 270 degrees |
| VPHAL_MIRROR_HORIZONTAL = ROTATION_MIRROR_HORIZONTAL , //!< Horizontal Mirror |
| VPHAL_MIRROR_VERTICAL = ROTATION_MIRROR_VERTICAL , //!< Vertical Mirror |
| VPHAL_ROTATE_90_MIRROR_VERTICAL = ROTATION_90_MIRROR_VERTICAL , //!< 90 + V Mirror |
| VPHAL_ROTATE_90_MIRROR_HORIZONTAL = ROTATION_90_MIRROR_HORIZONTAL //!< 90 + H Mirror |
| } VPHAL_ROTATION; |
| |
| //! |
| //! \brief Vphal Palette Type Mode enum |
| //! |
| typedef enum _VPHAL_PALETTE_TYPE |
| { |
| VPHAL_PALETTE_NONE = 0, |
| VPHAL_PALETTE_YCbCr_8, //!< 8-bit depth - AYUV palette |
| VPHAL_PALETTE_ARGB_8, //!< 8-bit depth - ARGB palette |
| VPHAL_PALETTE_AVYU_8 //!< 8-bit depth - YUY2 palette |
| } VPHAL_PALETTE_TYPE; |
| |
| //! |
| //! \brief Vphal Chroma Siting enum |
| //! |
| typedef enum _VPHAL_CHROMA_SITING |
| { |
| CHROMA_SITING_NONE = 0, |
| CHROMA_SITING_HORZ_LEFT = 1 << 0, |
| CHROMA_SITING_HORZ_CENTER = 1 << 1, |
| CHROMA_SITING_HORZ_RIGHT = 1 << 2, |
| CHROMA_SITING_VERT_TOP = 1 << 4, |
| CHROMA_SITING_VERT_CENTER = 1 << 5, |
| CHROMA_SITING_VERT_BOTTOM = 1 << 6, |
| } VPHAL_CHROMA_SITING; |
| |
| //! |
| //! \brief Vphal Output chroma configuration enum |
| //! |
| typedef enum _VPHAL_CHROMA_SUBSAMPLING |
| { |
| CHROMA_SUBSAMPLING_TOP_CENTER = 0, |
| CHROMA_SUBSAMPLING_CENTER_CENTER, |
| CHROMA_SUBSAMPLING_BOTTOM_CENTER, |
| CHROMA_SUBSAMPLING_TOP_LEFT, |
| CHROMA_SUBSAMPLING_CENTER_LEFT, |
| CHROMA_SUBSAMPLING_BOTTOM_LEFT |
| } VPHAL_CHROMA_SUBSAMPLING; |
| |
| //! |
| //! \brief Vphal Gamma Values configuration enum |
| //! |
| typedef enum _VPHAL_GAMMA_VALUE |
| { |
| GAMMA_1P0 = 0, |
| GAMMA_2P2, |
| GAMMA_2P6 |
| } VPHAL_GAMMA_VALUE; |
| |
| typedef enum _VPHAL_DP_ROTATION_MODE |
| { |
| VPHAL_DP_ROTATION_NV12_AVG = 0, //!< nv12 -> yuy2 by chroma average |
| VPHAL_DP_ROTATION_NV12_NV12 , //!< nv12 -> nv12 |
| VPHAL_DP_ROTATION_NV12_REP , //!< nv12 -> yuy2 by chroma repeat |
| VPHAL_DP_ROTATION_NV12_YUY2_NOT_SET //!< nv12 -> yuy2 by chroma average or repeat, decided by scaling mode |
| } VPHAL_DP_ROTATION_MODE; |
| |
| //! |
| //! \brief Surface types enum |
| //! IMPORTANT : SurfaceType_Layer[] must be updated to match this enum type |
| //! |
| typedef enum _VPHAL_SURFACE_TYPE |
| { |
| SURF_NONE = 0, |
| SURF_IN_BACKGROUND, |
| SURF_IN_PRIMARY, |
| SURF_IN_SUBSTREAM, |
| SURF_IN_REFERENCE, |
| SURF_OUT_RENDERTARGET, |
| SURF_TYPE_COUNT //!< Keep this line at the end |
| } VPHAL_SURFACE_TYPE; |
| C_ASSERT(SURF_TYPE_COUNT == 6); //!< When adding, update assert & vphal_solo_scenario.cpp |
| |
| //! |
| //! \brief Color Spaces enum |
| //! |
| typedef MEDIA_CSPACE VPHAL_CSPACE; |
| |
| //! |
| //! Structure VPHAL_GAMMA_TYPE |
| //! \brief GAMMA Function type |
| //! |
| typedef enum _VPHAL_GAMMA_TYPE |
| { |
| VPHAL_GAMMA_NONE = 0, |
| VPHAL_GAMMA_TRADITIONAL_GAMMA, |
| VPHAL_GAMMA_SMPTE_ST2084, |
| VPHAL_GAMMA_BT1886, |
| VPHAL_GAMMA_SRGB, |
| VPHAL_GAMMA_Count |
| } VPHAL_GAMMA_TYPE; |
| C_ASSERT(VPHAL_GAMMA_Count == 5); //!< When adding, update assert |
| |
| //! |
| //! \def IS_COLOR_SPACE_BT2020_YUV(_a) |
| //! Check if the color space is BT2020 YUV |
| //! |
| #define IS_COLOR_SPACE_BT2020_YUV(_a) (_a == CSpace_BT2020 || \ |
| _a == CSpace_BT2020_FullRange) |
| |
| //! |
| //! \def IS_COLOR_SPACE_BT2020_RGB(_a) |
| //! Check if the color space is BT2020 RGB |
| //! |
| #define IS_COLOR_SPACE_BT2020_RGB(_a) (_a == CSpace_BT2020_RGB || \ |
| _a == CSpace_BT2020_stRGB) |
| |
| //! |
| //! \def IS_COLOR_SPACE_BT2020(_a) |
| //! Check if the color space is BT2020 |
| //! |
| #define IS_COLOR_SPACE_BT2020(_a) (IS_COLOR_SPACE_BT2020_YUV(_a) || \ |
| IS_COLOR_SPACE_BT2020_RGB(_a)) |
| |
| //! |
| //! \def IS_RGB_LIMITED_RANGE(_a) |
| //! Check if RGB limited range |
| //! |
| #define IS_RGB_LIMITED_RANGE(_a) (_a == CSpace_stRGB || \ |
| _a == CSpace_BT2020_stRGB) |
| |
| //! |
| //! \def IS_RGB_FULL_RANGE(_a) |
| //! Check if RGB full range |
| //! |
| #define IS_RGB_FULL_RANGE(_a) (_a == CSpace_sRGB || \ |
| _a == CSpace_BT2020_sRGB) |
| |
| //! |
| //! \def IS_YUV_LIMITED_RANGE(_a) |
| //! Check if YUV limited range |
| //! |
| #define IS_YUV_LIMITED_RANGE(_a) (_a == CSpace_BT601 || \ |
| _a == CSpace_BT709 || \ |
| _a == CSpace_BT601Gray || \ |
| _a == CSpace_BT2020) |
| |
| //! |
| //! \def IS_YUV_FULL_RANGE(_a) |
| //! Check if YUV full range |
| //! |
| #define IS_YUV_FULL_RANGE(_a) (_a == CSpace_BT601_FullRange || \ |
| _a == CSpace_BT709_FullRange || \ |
| _a == CSpace_BT601Gray_FullRange || \ |
| _a == CSpace_BT2020_FullRange) |
| |
| //! |
| //! \brief Sample Type enum |
| //! |
| typedef enum _VPHAL_SAMPLE_TYPE |
| { |
| SAMPLE_PROGRESSIVE, |
| SAMPLE_SINGLE_TOP_FIELD, |
| SAMPLE_SINGLE_BOTTOM_FIELD, |
| SAMPLE_INTERLEAVED_EVEN_FIRST_TOP_FIELD, |
| SAMPLE_INTERLEAVED_EVEN_FIRST_BOTTOM_FIELD, |
| SAMPLE_INTERLEAVED_ODD_FIRST_TOP_FIELD, |
| SAMPLE_INTERLEAVED_ODD_FIRST_BOTTOM_FIELD, |
| SAMPLE_INVALID |
| } VPHAL_SAMPLE_TYPE; |
| C_ASSERT(SAMPLE_INVALID == 7); //!< When adding, update assert & vphal_solo_scenario.cpp |
| |
| //! |
| //! \brief Frame Format enum |
| //! |
| typedef enum _VPHAL_FRAME_FORMAT |
| { |
| FRAME_FORMAT_PROGRESSIVE, |
| FRAME_FORMAT_INTERLEAVED, |
| FRAME_FORMAT_FIELD |
| } VPHAL_FRAME_FORMAT; |
| |
| //! |
| //! \brief Interlaced Scaling Mode enum |
| //! |
| typedef enum _VPHAL_ISCALING_TYPE |
| { |
| ISCALING_NONE, |
| ISCALING_INTERLEAVED_TO_INTERLEAVED, |
| ISCALING_INTERLEAVED_TO_FIELD, |
| ISCALING_FIELD_TO_INTERLEAVED, |
| ISCALING_FIELD_TO_FIELD |
| } VPHAL_ISCALING_TYPE; |
| C_ASSERT(ISCALING_FIELD_TO_FIELD == 4); |
| |
| //! |
| //! \brief DI Mode enum |
| //! |
| typedef enum _VPHAL_DI_MODE |
| { |
| DI_MODE_BOB, |
| DI_MODE_ADI |
| } VPHAL_DI_MODE; |
| C_ASSERT(DI_MODE_ADI == 1); //!< When adding, update assert & vphal_solo_scenario.cpp |
| |
| //! |
| //! \ brief HVS DN Mode enum |
| //! |
| typedef enum _VPHAL_HVSDN_MODE |
| { |
| HVSDENOISE_AUTO_BDRATE = 0, |
| HVSDENOISE_AUTO_SUBJECTIVE, |
| HVSDENOISE_MANUAL |
| } VPHAL_HVSDN_MODE; |
| |
| //! |
| //! \brief Blend Type enum |
| //! |
| typedef enum _VPHAL_BLEND_TYPE |
| { |
| BLEND_NONE = 0, |
| BLEND_SOURCE, |
| BLEND_PARTIAL, |
| BLEND_CONSTANT, |
| BLEND_CONSTANT_SOURCE, |
| BLEND_CONSTANT_PARTIAL, |
| BLEND_XOR_MONO |
| } VPHAL_BLEND_TYPE; |
| C_ASSERT(BLEND_CONSTANT == 3); //!< When adding, update assert & vphal_solo_scenario.cpp |
| |
| //! |
| //! \brief Scaling Mode enum |
| //! |
| typedef enum _VPHAL_SCALING_MODE |
| { |
| VPHAL_SCALING_NEAREST = 0, |
| VPHAL_SCALING_BILINEAR, |
| VPHAL_SCALING_AVS, |
| VPHAL_SCALING_ADV_QUALITY // !< Advance Perf mode |
| } VPHAL_SCALING_MODE; |
| C_ASSERT(VPHAL_SCALING_ADV_QUALITY == 3); //!< When adding, update assert & vphal_solo_scenario.cpp |
| |
| typedef enum _VPHAL_SCALING_PREFERENCE |
| { |
| VPHAL_SCALING_PREFER_SFC, // SFC is default |
| VPHAL_SCALING_PREFER_COMP, // For Gen9/10, Composition AVS get better quality than SFC AVS |
| VPHAL_SCALING_PREFER_SFC_FOR_VEBOX // if VEBOX is required, use VEBOX + SFC, otherwise use Composistion |
| } VPHAL_SCALING_PREFERENCE; |
| C_ASSERT(VPHAL_SCALING_PREFER_SFC_FOR_VEBOX == 2); //!< When adding, update assert & vphal_solo_scenario.cpp |
| |
| //! |
| //! \brief Gamut Mode enum |
| //! |
| typedef enum _VPHAL_GAMUT_MODE |
| { |
| GAMUT_MODE_NONE, |
| GAMUT_MODE_BASIC, |
| GAMUT_MODE_ADVANCED |
| } VPHAL_GAMUT_MODE; |
| C_ASSERT(GAMUT_MODE_ADVANCED == 2); //!< When adding, update assert & vphal_solo_scenario.cpp |
| |
| //! |
| //! \brief Composition Report Mode enum |
| //! |
| typedef enum _VPHAL_COMPOSITION_REPORT_MODE |
| { |
| VPHAL_NO_COMPOSITION, //!< No composition , Error Reporting cases |
| VPHAL_INPLACE_COMPOSITION, //!< Inplace Composition |
| VPHAL_LEGACY_COMPOSITION //!< Legacy Composition |
| } VPHAL_COMPOSITION_REPORT_MODE; |
| //! |
| //! \brief DI Report Mode enum |
| //! |
| typedef enum _VPHAL_DI_REPORT_MODE |
| { |
| VPHAL_DI_REPORT_PROGRESSIVE, //!< Progressive output |
| VPHAL_DI_REPORT_BOB, //!< True BOB output |
| VPHAL_DI_REPORT_ADI_BOB, //!< DNDI BOB output |
| VPHAL_DI_REPORT_ADI, //!< ADI output |
| VPHAL_DI_REPORT_FMD //!< FMD output |
| } VPHAL_DI_REPORT_MODE; |
| |
| //! |
| //! \brief Colorpack enum |
| //! |
| typedef enum _VPHAL_COLORPACK |
| { |
| VPHAL_COLORPACK_400 = 0, |
| VPHAL_COLORPACK_420, |
| VPHAL_COLORPACK_411, |
| VPHAL_COLORPACK_422, |
| VPHAL_COLORPACK_444, |
| VPHAL_COLORPACK_UNKNOWN |
| } VPHAL_COLORPACK, *PVPHAL_COLORPACK; |
| |
| //! |
| //! \brief Output Pipe Mode enum |
| //! \details The output pipe that writes the RenderTarget surface |
| //! |
| typedef enum _VPHAL_OUTPUT_PIPE_MODE |
| { |
| VPHAL_OUTPUT_PIPE_MODE_INVALID = -1, //!< None output pipe selected. This is an invalid state |
| VPHAL_OUTPUT_PIPE_MODE_COMP = 0, //!< Composition output pipe. RenderTarget will be written by Composition |
| VPHAL_OUTPUT_PIPE_MODE_SFC = 1, //!< SFC output pipe. RenderTarget will be written by SFC |
| VPHAL_OUTPUT_PIPE_MODE_VEBOX = 2 //!< Vebox output pipe. RenderTarget will be written by Vebox |
| } VPHAL_OUTPUT_PIPE_MODE, *PVPHAL_OUTPUT_PIPE_MODE; |
| |
| //! |
| //! \def SET_VPHAL_OUTPUT_PIPE(_a, _Pipe) |
| //! Set the output pipe |
| //! |
| #define SET_VPHAL_OUTPUT_PIPE(_a, _Pipe) \ |
| { \ |
| (_a->OutputPipe = _Pipe); \ |
| VPHAL_RENDER_NORMALMESSAGE("VPHAL_OUTPUT_PIPE %d", _Pipe); \ |
| } |
| |
| //! |
| //! \def IS_VPHAL_OUTPUT_PIPE_INVALID(_a) |
| //! Sheck if the output pipe is invalid |
| //! |
| #define IS_VPHAL_OUTPUT_PIPE_INVALID(_a) (_a->OutputPipe == VPHAL_OUTPUT_PIPE_MODE_INVALID) |
| |
| //! |
| //! \def IS_VPHAL_OUTPUT_PIPE_COMP(_a) |
| //! Check if the output pipe is Composition |
| //! |
| #define IS_VPHAL_OUTPUT_PIPE_COMP(_a) (_a->OutputPipe == VPHAL_OUTPUT_PIPE_MODE_COMP) |
| |
| //! |
| //! \def IS_VPHAL_OUTPUT_PIPE_SFC(_a) |
| //! Check if the output pipe is SFC |
| //! |
| #define IS_VPHAL_OUTPUT_PIPE_SFC(_a) (_a->OutputPipe == VPHAL_OUTPUT_PIPE_MODE_SFC) |
| |
| //! |
| //! \def IS_VPHAL_OUTPUT_PIPE_VEBOX(_a) |
| //! Check if the output pipe is Vebox |
| //! |
| #define IS_VPHAL_OUTPUT_PIPE_VEBOX(_a) (_a->OutputPipe == VPHAL_OUTPUT_PIPE_MODE_VEBOX) |
| |
| //! |
| //! \def SET_VPHAL_COMPONENT(_a, _Component) |
| //! Set the Component |
| //! |
| #define SET_VPHAL_COMPONENT(_a, _Component) (_a->Component = _Component) // Set the Component |
| |
| //! |
| //! \def SET_VPHAL_MMC_STATE(_a, _bEnableMMC) |
| //! Set the Component |
| //! |
| #define SET_VPHAL_MMC_STATE(_a, _bEnableMMC) (_a->bEnableMMC = _bEnableMMC) // Set the Component |
| |
| //----------------------------------------------------------------------------- |
| // Forward declaration - |
| // IMPORTANT - DDI interfaces are NOT to access internal VPHAL states |
| //----------------------------------------------------------------------------- |
| typedef struct _RENDERHAL_INTERFACE *PRENDERHAL_INTERFACE; |
| typedef class MhwVeboxInterface *PMHW_VEBOX_INTERFACE; |
| typedef class MhwSfcInterface *PMHW_SFC_INTERFACE; |
| class VphalRenderer; |
| |
| class MhwCpInterface; |
| |
| //! |
| //! Union VPHAL_COLOR_SAMPLE_8 |
| //! \brief Vphal Color Sample 8 bit |
| //! |
| typedef union _VPHAL_COLOR_SAMPLE_8 |
| { |
| // ARGB |
| struct |
| { |
| uint8_t B; |
| uint8_t G; |
| uint8_t R; |
| uint8_t A; |
| }; |
| |
| // AVYU (YUY2 samples) |
| struct |
| { |
| uint8_t U; |
| uint8_t Y; |
| uint8_t V; |
| uint8_t a; |
| }; |
| |
| // AYCbCr (NV12 samples) |
| struct |
| { |
| uint8_t Cr; //!< V |
| uint8_t Cb; //!< U |
| uint8_t YY; //!< Y |
| uint8_t Alpha; |
| }; |
| |
| uint32_t dwValue; |
| } VPHAL_COLOR_SAMPLE_8, *PVPHAL_COLOR_SAMPLE_8; |
| |
| //! |
| //! Union VPHAL_COLOR_SAMPLE_16 |
| //! \brief Vphal Color Sample 16 bit |
| //! |
| typedef union _VPHAL_COLOR_SAMPLE_16 |
| { |
| // ARGB |
| struct |
| { |
| int16_t B; |
| int16_t G; |
| int16_t R; |
| int16_t A; |
| }; |
| |
| // AVYU |
| struct |
| { |
| int16_t U; |
| int16_t Y; |
| int16_t V; |
| int16_t a; |
| }; |
| |
| // AYCbCr |
| struct |
| { |
| int16_t Cr; //!< V |
| int16_t Cb; //!< U |
| int16_t YY; //!< Y |
| int16_t Alpha; |
| }; |
| |
| uint32_t Value; |
| } VPHAL_COLOR_SAMPLE_16, *PVPHAL_COLOR_SAMPLE_16; |
| |
| //! |
| //! Structure VPHAL_PLANE_OFFSET |
| //! \brief Vphal Plane OffSet |
| //! |
| typedef struct _VPHAL_PLANE_OFFSET |
| { |
| int iLockSurfaceOffset;//!< Locked surface offset |
| int iSurfaceOffset; //!< Plane surface offset |
| int iXOffset; //!< X offset - horizontal offset in pixels |
| int iYOffset; //!< Y offset - vertical offset in pixels |
| } VPHAL_PLANE_OFFSET, *PVPHAL_PLANE_OFFSET; |
| |
| //! |
| //! Structure VPHAL_PALETTE |
| //! \brief Vphal Palette |
| //! \details Palette entries: |
| //! - 0 : empty palette |
| //! - -1 : palette allocated but not loaded |
| //! - >0 : palette in use |
| //! |
| typedef struct _VPHAL_PALETTE |
| { |
| VPHAL_PALETTE_TYPE PaletteType; //!< Type of palette |
| VPHAL_CSPACE ColorSpace; //!< ColorSpace of Palette |
| bool bHasAlpha; //!< Alpha is valid |
| int32_t iTotalEntries; //!< Palette entries allocated |
| int32_t iNumEntries; //!< Palette entries in use |
| union |
| { |
| PVPHAL_COLOR_SAMPLE_8 pPalette8; |
| PVPHAL_COLOR_SAMPLE_16 pPalette16; |
| }; |
| } VPHAL_PALETTE, *PVPHAL_PALETTE; |
| |
| //! |
| //! Union VPHAL_HALF_PRECISION_FLOAT |
| //! \brief Vphal half precision float type |
| //! |
| typedef union _VPHAL_HALF_PRECISION_FLOAT |
| { |
| struct |
| { |
| uint16_t Mantissa : 10; |
| uint16_t Exponent : 5; |
| uint16_t Sign : 1; |
| }; |
| |
| uint16_t value; |
| } VPHAL_HALF_PRECISION_FLOAT, PVPHAL_HALF_PRECISION_FLOAT; |
| |
| //! |
| //! Structure VPHAL_BLENDING_PARAMS |
| //! \brief Layer Blending parameters |
| //! |
| typedef struct _VPHAL_BLENDING_PARAMS |
| { |
| VPHAL_BLEND_TYPE BlendType; |
| float fAlpha; |
| } VPHAL_BLENDING_PARAMS, *PVPHAL_BLENDING_PARAMS; |
| |
| //! |
| //! Structure VPHAL_LUMAKEY_PARAMS |
| //! \brief Luma Keying parameters |
| //! |
| typedef struct _VPHAL_LUMAKEY_PARAMS |
| { |
| int16_t LumaLow; |
| int16_t LumaHigh; |
| } VPHAL_LUMAKEY_PARAMS, *PVPHAL_LUMAKEY_PARAMS; |
| |
| //! |
| //! Structure VPHAL_PROCAMP_PARAMS |
| //! \brief Procamp parameters |
| //! |
| typedef struct _VPHAL_PROCAMP_PARAMS |
| { |
| bool bEnabled; |
| float fBrightness; |
| float fContrast; |
| float fHue; |
| float fSaturation; |
| } VPHAL_PROCAMP_PARAMS, *PVPHAL_PROCAMP_PARAMS; |
| |
| //! |
| //! Structure VPHAL_IEF_PARAMS |
| //! \brief IEF parameters - Image Enhancement (Detail) Filter |
| //! |
| typedef struct _VPHAL_IEF_PARAMS |
| { |
| bool bEnabled; |
| bool bSmoothMode; |
| bool bSkintoneTuned; |
| bool bEmphasizeSkinDetail; |
| float fIEFFactor; |
| uint16_t StrongEdgeWeight; |
| uint16_t RegularWeight; |
| uint16_t StrongEdgeThreshold; |
| void* pExtParam; |
| } VPHAL_IEF_PARAMS, *PVPHAL_IEF_PARAMS; |
| |
| //! |
| //! Structure VPHAL_DI_PARAMS |
| //! \brief Deinterlacing parameters |
| //! |
| typedef struct _VPHAL_DI_PARAMS |
| { |
| VPHAL_DI_MODE DIMode; //!< DeInterlacing mode |
| bool bEnableFMD; //!< FMD |
| bool bSingleField; //!< Used in frame Recon - if 30fps (one call per sample pair) |
| bool bSCDEnable; //!< Scene change detection |
| } VPHAL_DI_PARAMS, *PVPHAL_DI_PARAMS; |
| |
| //! |
| //! \brief Noise Level Enumeration |
| //! |
| typedef enum _VPHAL_NOISELEVEL |
| { |
| NOISELEVEL_DEFAULT, |
| NOISELEVEL_VC1_HD |
| } VPHAL_NOISELEVEL; |
| C_ASSERT(NOISELEVEL_VC1_HD == 1); //!< When adding, update assert & vphal_solo_scenario.cpp |
| |
| //! |
| //! Structure VPHAL_HVSDENOISE_PARAMS |
| //! \brief HVS Denoise Parameters - Human Vision System Based Denoise |
| //! |
| typedef struct _VPHAL_HVSDENOISE_PARAMS |
| { |
| uint16_t QP; |
| uint16_t Strength; |
| VPHAL_HVSDN_MODE Mode; |
| void* pHVSDenoiseParam; |
| uint32_t dwDenoiseParamSize; |
| } VPHAL_HVSDENOISE_PARAMS, *PVPHAL_HVSDENOISE_PARAMS; |
| |
| //! |
| //! Structure VPHAL_SLIMIPU_DENOISE_PARAM |
| //! \brief SLIMIPU Denoise Parameters |
| //! |
| typedef struct _VPHAL_SLIMIPU_DENOISE_PARAM |
| { |
| uint32_t MemSizeInBytes; |
| void * pSystemMem; |
| } VPHAL_SLIMIPU_DENOISE_PARAM, *PVPHAL_SLIMIPU_DENOISE_PARAM; |
| |
| //! |
| //! Structure VPHAL_DENOISE_PARAMS |
| //! \brief Denoise parameters |
| //! |
| typedef struct _VPHAL_DENOISE_PARAMS |
| { |
| bool bEnableChroma; |
| bool bEnableLuma; |
| bool bAutoDetect; |
| float fDenoiseFactor; |
| VPHAL_NOISELEVEL NoiseLevel; |
| bool bEnableHVSDenoise; |
| VPHAL_HVSDENOISE_PARAMS HVSDenoise; |
| bool bEnableSlimIPUDenoise; |
| VPHAL_SLIMIPU_DENOISE_PARAM SlimIPUDenoise; |
| } VPHAL_DENOISE_PARAMS, *PVPHAL_DENOISE_PARAMS; |
| |
| //! |
| //! Structure VPHAL_STE_PARAMS |
| //! \brief STE parameters - Skin Tone Enhancement |
| //! |
| typedef struct _VPHAL_STE_PARAMS |
| { |
| uint32_t dwSTEFactor; |
| } VPHAL_STE_PARAMS, *PVPHAL_STE_PARAMS; |
| |
| //! |
| //! Structure VPHAL_TCC_PARAMS |
| //! \brief TCC parameters - Total Color Control |
| //! |
| typedef struct _VPHAL_TCC_PARAMS |
| { |
| uint8_t Red; |
| uint8_t Green; |
| uint8_t Blue; |
| uint8_t Cyan; |
| uint8_t Magenta; |
| uint8_t Yellow; |
| } VPHAL_TCC_PARAMS, *PVPHAL_TCC_PARAMS; |
| |
| //! |
| //! Structure VPHAL_COLORPIPE_PARAMS |
| //! \brief IECP Parameters - Color Pipe |
| //! |
| typedef struct _VPHAL_COLORPIPE_PARAMS |
| { |
| bool bEnableACE; |
| bool bEnableSTE; |
| bool bEnableTCC; |
| bool bAceLevelChanged; |
| uint32_t dwAceLevel; |
| uint32_t dwAceStrength; |
| VPHAL_STE_PARAMS SteParams; |
| VPHAL_TCC_PARAMS TccParams; |
| } VPHAL_COLORPIPE_PARAMS, *PVPHAL_COLORPIPE_PARAMS; |
| |
| //! |
| //! Structure VPHAL_SURFACE |
| //! \brief DDI-VPHAL surface definition |
| //! |
| typedef struct VPHAL_SURFACE *PVPHAL_SURFACE; |
| struct VPHAL_SURFACE |
| { |
| // Color Information |
| VPHAL_CSPACE ColorSpace = CSpace_None; //!<Color Space |
| bool ExtendedGamut = false; //!<Extended Gamut Flag |
| int32_t iPalette = 0; //!<Palette Allocation |
| VPHAL_PALETTE Palette = {}; //!<Palette data |
| |
| // Rendering parameters |
| RECT rcSrc = { 0, 0, 0, 0 }; //!< Source rectangle |
| RECT rcDst = { 0, 0, 0, 0 }; //!< Destination rectangle |
| RECT rcMaxSrc = { 0, 0, 0, 0 }; //!< Max source rectangle |
| PVPHAL_BLENDING_PARAMS pBlendingParams = nullptr; //!< Blending parameters |
| PVPHAL_LUMAKEY_PARAMS pLumaKeyParams = nullptr; //!< Luma keying parameters |
| PVPHAL_PROCAMP_PARAMS pProcampParams = nullptr;; //!< Procamp parameters |
| PVPHAL_IEF_PARAMS pIEFParams = nullptr; //!< IEF parameters |
| bool bCalculatingAlpha = false; //!< Alpha calculation parameters |
| bool bQueryVariance = false; //!< enable variance query |
| bool bDirectionalScalar = false; //!< Vebox Directional Scalar |
| bool bFastColorFill = false; //!< enable fast color fill without copy surface |
| bool bMaxRectChanged = false; //!< indicate rcMaxSrc been updated |
| bool b16UsrPtr = false; //!< is 16 byte aligned system linear memory. |
| bool bVEBOXCroppingUsed = false; //!< Vebox crop case need use rcSrc as vebox input. |
| bool bXORComp = false; //!< is mono-chroma composite mode. |
| |
| // Interlaced Scaling |
| bool bInterlacedScaling = false; //!< Interlaced scaling |
| bool bFieldWeaving = false; //!< Field Weaving |
| VPHAL_ISCALING_TYPE InterlacedScalingType = ISCALING_NONE; //!< Interlaced scaling type for new interlaced scaling mode |
| |
| // Advanced Processing |
| PVPHAL_DI_PARAMS pDeinterlaceParams = nullptr; |
| PVPHAL_DENOISE_PARAMS pDenoiseParams = nullptr; //!< Denoise |
| PVPHAL_COLORPIPE_PARAMS pColorPipeParams = nullptr; //!< ColorPipe |
| |
| // Frame ID and reference samples -> for advanced processing |
| int32_t FrameID = 0; |
| uint32_t uFwdRefCount = 0; |
| uint32_t uBwdRefCount = 0; |
| PVPHAL_SURFACE pFwdRef = nullptr; |
| PVPHAL_SURFACE pBwdRef = nullptr; |
| |
| // VPHAL_SURFACE Linked list |
| PVPHAL_SURFACE pNext = nullptr; |
| |
| //-------------------------------------- |
| // FIELDS TO BE SETUP BY VPHAL int32_tERNALLY |
| //-------------------------------------- |
| uint32_t dwWidth = 0; //!< Surface width |
| uint32_t dwHeight = 0; //!< Surface height |
| uint32_t dwPitch = 0; //!< Surface pitch |
| MOS_TILE_TYPE TileType = MOS_TILE_X; //!< Tile Type |
| MOS_TILE_MODE_GMM TileModeGMM = MOS_TILE_LINEAR_GMM; //!< Tile Mode from GMM Definition |
| bool bGMMTileEnabled = false; //!< GMM Tile Mode Flag |
| bool bOverlay= false; //!< Overlay Surface |
| bool bFlipChain = false; //!< FlipChain Surface |
| VPHAL_PLANE_OFFSET YPlaneOffset = { 0, 0, 0, 0 }; //!< Y surface plane offset |
| VPHAL_PLANE_OFFSET UPlaneOffset = { 0, 0, 0, 0 }; //!< U surface plane offset |
| VPHAL_PLANE_OFFSET VPlaneOffset = { 0, 0, 0, 0 }; //!< V surface plane offset |
| int32_t iLayerID = 0; //!< Layer index (0-based index) |
| VPHAL_SCALING_MODE ScalingMode = VPHAL_SCALING_NEAREST; //!< Scaling Mode |
| VPHAL_SCALING_PREFERENCE ScalingPreference = VPHAL_SCALING_PREFER_SFC; //!< Scaling preference |
| bool bIEF = false; //!< IEF flag |
| uint32_t dwSlicePitch = 0; //!< SlicePitch of a 3D surface(GT-PIN support) |
| |
| //-------------------------------------- |
| // FIELDS TO BE PROVIDED BY DDI |
| //-------------------------------------- |
| // Sample information |
| MOS_FORMAT Format = Format_None; //!< Surface format |
| VPHAL_SURFACE_TYPE SurfType = SURF_NONE; //!< Surface type (context) |
| VPHAL_SAMPLE_TYPE SampleType = SAMPLE_PROGRESSIVE; //!< Interlaced/Progressive sample type |
| uint32_t dwDepth = 0; //!< Surface depth |
| MOS_S3D_CHANNEL Channel = MOS_S3D_NONE; //!< Channel |
| uint32_t dwOffset = 0; //!< Surface Offset (Y/Base) |
| MOS_RESOURCE OsResource = {}; //!< Surface resource |
| VPHAL_ROTATION Rotation = VPHAL_ROTATION_IDENTITY; //!< 0: 0 degree, 1: 90 degree, 2: 180 degree, 3: 270 degreee |
| |
| // Chroma siting |
| uint32_t ChromaSiting = CHROMA_SITING_NONE; |
| bool bChromaSiting = false; //!< Chromasiting flag |
| |
| // Surface compression mode, enable flags |
| bool bCompressible = false; // The surface is compressible, means there are additional 128 bit for MMC no matter it is compressed or not |
| // The bIsCompressed in surface allocation structure should use this flag to initialize to allocate a compressible surface |
| bool bIsCompressed = false; // The surface is compressed, VEBox output can only support horizontal mode, but input can be horizontal / vertical |
| MOS_RESOURCE_MMC_MODE CompressionMode = MOS_MMC_DISABLED; |
| uint32_t CompressionFormat = 0; |
| |
| bool bUseSampleUnorm = false; //!< true: sample unorm is used, false: DScaler or AVS is used. |
| bool bUseSamplerLumakey = false; //!< true: sampler lumakey is used, false: lumakey is disabled or EU computed lumakey is used. |
| //------------------------------------------ |
| // HDR related parameters, provided by DDI |
| //------------------------------------------ |
| PVPHAL_HDR_PARAMS pHDRParams = nullptr; |
| VPHAL_GAMMA_TYPE GammaType = VPHAL_GAMMA_NONE; //!<Gamma Type |
| bool bPreAPGWorkloadEnable = false; //!< Previous Surface Execution Path |
| }; |
| |
| //! |
| //! Structure VPHAL_GAMUT_PARAMS |
| //! \brief IECP Gamut Mapping Parameters |
| //! |
| typedef struct _VPHAL_GAMUT_PARAMS |
| { |
| VPHAL_GAMUT_MODE GCompMode; |
| VPHAL_GAMUT_MODE GExpMode; |
| VPHAL_GAMMA_VALUE GammaValue; |
| uint32_t dwAttenuation; //!< U2.10 [0, 1024] 0 = No down scaling, 1024 = Full down scaling |
| float displayRGBW_x[4]; |
| float displayRGBW_y[4]; |
| } VPHAL_GAMUT_PARAMS, *PVPHAL_GAMUT_PARAMS; |
| |
| //! |
| //! Structure VPHAL_NLAS_PARAMS |
| //! \brief NLAS parameters - Non-Anamorphic Scaling |
| //! |
| typedef struct _VPHAL_NLAS_PARAMS |
| { |
| float fVerticalCrop; |
| float fHLinearRegion; |
| float fNonLinearCrop; |
| } VPHAL_NLAS_PARAMS, *PVPHAL_NLAS_PARAMS; |
| |
| //! |
| //! Structure VPHAL_COLORFILL_PARAMS |
| //! \brief ColorFill parameters |
| //! |
| typedef struct _VPHAL_COLORFILL_PARAMS |
| { |
| bool bYCbCr; |
| uint32_t Color; |
| VPHAL_CSPACE CSpace; |
| } VPHAL_COLORFILL_PARAMS, *PVPHAL_COLORFILL_PARAMS; |
| |
| //! |
| //! Structure VPHAL_ALPHA_FILL_MODE |
| //! \brief Alpha mode |
| //! |
| typedef enum _VPHAL_ALPHA_FILL_MODE |
| { |
| VPHAL_ALPHA_FILL_MODE_NONE = 0, |
| VPHAL_ALPHA_FILL_MODE_OPAQUE, |
| VPHAL_ALPHA_FILL_MODE_BACKGROUND, |
| VPHAL_ALPHA_FILL_MODE_SOURCE_STREAM, |
| } VPHAL_ALPHA_FILL_MODE; |
| |
| //! |
| //! Structure VPHAL_ALPHA_PARAMS |
| //! \brief Alpha parameters |
| //! |
| typedef struct _VPHAL_ALPHA_PARAMS |
| { |
| float fAlpha; |
| VPHAL_ALPHA_FILL_MODE AlphaMode; |
| } VPHAL_ALPHA_PARAMS, *PVPHAL_ALPHA_PARAMS; |
| |
| //! |
| //! Structure VPHAL_CONSTRICTION_PARAMS |
| //! \brief Constriction parameters |
| //! |
| typedef struct _VPHAL_CONSTRICTION_PARAMS |
| { |
| RECT rcConstriction; |
| } VPHAL_CONSTRICTION_PARAMS, *PVPHAL_CONSTRICTION_PARAMS; |
| |
| //! |
| //! Structure VPHAL_SPLIT_SCREEN_DEMO_POSITION |
| //! \brief Split-Screen Demo Mode Position |
| //! |
| typedef enum _VPHAL_SPLIT_SCREEN_DEMO_POSITION |
| { |
| SPLIT_SCREEN_DEMO_DISABLED = 0, |
| SPLIT_SCREEN_DEMO_LEFT, |
| SPLIT_SCREEN_DEMO_RIGHT, |
| SPLIT_SCREEN_DEMO_TOP, |
| SPLIT_SCREEN_DEMO_BOTTOM, |
| SPLIT_SCREEN_DEMO_END_POS_LIST |
| } VPHAL_SPLIT_SCREEN_DEMO_POSITION; |
| |
| //! |
| //! Structure VPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS |
| //! \brief Split-Screen Demo Mode Parameters |
| //! |
| typedef struct _VPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS |
| { |
| VPHAL_SPLIT_SCREEN_DEMO_POSITION Position; //!< Position of split mode area (disable features) |
| bool bDisableACE : 1; //!< Disable ACE |
| bool bDisableAVS : 1; //!< Disable AVS |
| bool bDisableDN : 1; //!< Disable DN |
| bool bDisableFMD : 1; //!< Disable FMD |
| bool bDisableIEF : 1; //!< Disable IEF |
| bool bDisableProcamp : 1; //!< Disable Procamp |
| bool bDisableSTE : 1; //!< Disable STE |
| bool bDisableTCC : 1; //!< Disable TCC |
| bool bDisableIS : 1; //!< Disable IS |
| bool bDisableDrDb : 1; //!< Disable DRDB |
| bool bDisableDNUV : 1; //!< Disable DNUV |
| bool bDisableFRC : 1; //!< Disable FRC |
| bool bDisableLACE : 1; //!< Disable LACE |
| } VPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS, *PVPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS; |
| |
| //! |
| //! Structure VPHAL_RENDER_PARAMS |
| //! \brief VPHAL Rendering Parameters |
| //! |
| struct VPHAL_RENDER_PARAMS |
| { |
| // Input/output surfaces |
| uint32_t uSrcCount; //!< Num sources |
| VPHAL_SURFACE *pSrc[VPHAL_MAX_SOURCES]; //!< Source Samples |
| uint32_t uDstCount; //!< Num Targets |
| VPHAL_SURFACE *pTarget[VPHAL_MAX_TARGETS];//!< Render Target |
| |
| // Additional parameters not included in PVPHAL_SURFACE |
| PRECT pConstriction; //!< Constriction rectangle |
| PVPHAL_COLORFILL_PARAMS pColorFillParams; //!< ColorFill - BG only |
| bool bTurboMode; //!< Enable Media Turbo Mode |
| bool bStereoMode; //!< Stereo BLT mode |
| PVPHAL_ALPHA_PARAMS pCompAlpha; //!< Alpha for composited surfaces |
| bool bDisableDemoMode; //!< Enable/Disable demo mode function calls |
| PVPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS pSplitScreenDemoModeParams; //!< Split-screen demo mode for VP features |
| bool bIsDefaultStream; //!< Identifier to differentiate default stream |
| |
| // Debugging parameters |
| MOS_COMPONENT Component; //!< DDI component (for DEBUGGING only) |
| |
| // Status Report |
| bool bReportStatus; //!< Report current media BB status (Pre-Processing) |
| uint32_t StatusFeedBackID; //!< Unique Staus ID; |
| #if (_DEBUG || _RELEASE_INTERNAL) |
| bool bTriggerGPUHang; //!< Trigger GPU HANG |
| #endif |
| |
| bool bCalculatingAlpha; //!< Alpha calculation parameters |
| |
| // extension parameters |
| void *pExtensionData; //!< Extension data |
| |
| bool bPathKernel; // HDR path config if use kernel |
| bool bAPGWorkloadEnable = false; //!< Identify Whether APG workload Enabled or not |
| |
| bool bDisableVeboxFor8K = false; |
| bool bUseVEHdrSfc = false; // use SFC for to perform CSC/Scaling/RGBSwap of HDR streaming; if false, use composite render. |
| bool bNonFirstFrame = false; // first frame or not: first frame false, otherwise true considering zeromemory parameters. |
| |
| VPHAL_RENDER_PARAMS() : |
| uSrcCount(0), |
| pSrc(), |
| uDstCount(0), |
| pTarget(), |
| pConstriction(nullptr), |
| pColorFillParams(nullptr), |
| bTurboMode(false), |
| bStereoMode(false), |
| pCompAlpha(nullptr), |
| bDisableDemoMode(false), |
| pSplitScreenDemoModeParams(nullptr), |
| bIsDefaultStream(false), |
| Component(), |
| bReportStatus(false), |
| StatusFeedBackID(0), |
| #if (_DEBUG || _RELEASE_INTERNAL) |
| bTriggerGPUHang(false), |
| #endif |
| bCalculatingAlpha(false), |
| pExtensionData(nullptr), |
| bPathKernel(false), |
| bUseVEHdrSfc(false), |
| bNonFirstFrame(false) |
| { |
| } |
| |
| }; |
| |
| typedef VPHAL_RENDER_PARAMS *PVPHAL_RENDER_PARAMS; |
| typedef const VPHAL_RENDER_PARAMS *PCVPHAL_RENDER_PARAMS; |
| |
| //! |
| //! \brief Performs Color Space Convert for Sample 8 bit |
| //! \details Performs Color Space Convert from Src Color Spase to Dst Color Spase |
| //! \param [out] pOutput |
| //! Pointer to VPHAL_COLOR_SAMPLE_8 |
| //! \param [in] pInput |
| //! Pointer to VPHAL_COLOR_SAMPLE_8 |
| //! \param [in] srcCspace |
| //! Source Color Space |
| //! \param [in] dstCspace |
| //! Dest Color Space |
| //! \return bool |
| //! Return true if successful, otherwise false |
| //! |
| bool VpHal_CSC_8( |
| VPHAL_COLOR_SAMPLE_8 *pOutput, |
| VPHAL_COLOR_SAMPLE_8 *pInput, |
| VPHAL_CSPACE srcCspace, |
| VPHAL_CSPACE dstCspace); |
| |
| //! |
| //! \brief |
| //! \details Get CSC matrix in a form usable by Vebox, SFC and IECP kernels |
| //! \param [in] SrcCspace |
| //! Source Cspace |
| //! \param [in] DstCspace |
| //! Destination Cspace |
| //! \param [out] pfCscCoeff |
| //! [3x3] Coefficients matrix |
| //! \param [out] pfCscInOffset |
| //! [3x1] Input Offset matrix |
| //! \param [out] pfCscOutOffset |
| //! [3x1] Output Offset matrix |
| //! \return void |
| //! |
| void VpHal_GetCscMatrix( |
| VPHAL_CSPACE SrcCspace, |
| VPHAL_CSPACE DstCspace, |
| float* pfCscCoeff, |
| float* pfCscInOffset, |
| float* pfCscOutOffset); |
| |
| //! |
| //! \brief sinc |
| //! \details Calculate sinc(x) |
| //! \param [in] x |
| //! float |
| //! \return float |
| //! sinc(x) |
| //! |
| float VpHal_Sinc(float x); |
| |
| //! |
| //! \brief Lanczos |
| //! \details Calculate lanczos(x) |
| //! Basic formula is: lanczos(x)= VpHal_Sinc(x) * VpHal_Sinc(x / fLanczosT) |
| //! \param [in] x |
| //! float |
| //! \param [in] dwNumEntries |
| //! dword |
| //! \param [in] fLanczosT |
| //! |
| //! \return float |
| //! lanczos(x) |
| //! |
| float VpHal_Lanczos( |
| float x, |
| uint32_t dwNumEntries, |
| float fLanczosT); |
| |
| //! |
| //! Structure VPHAL_GET_SURFACE_INFO |
| //! \brief VPHAL Get Surface Infomation Parameters |
| //! |
| |
| typedef struct VPHAL_GET_SURFACE_INFO *PVPHAL_GET_SURFACE_INFO; |
| struct VPHAL_GET_SURFACE_INFO |
| { |
| uint32_t ArraySlice; |
| uint32_t MipSlice; |
| MOS_S3D_CHANNEL S3dChannel; |
| }; |
| |
| //! |
| //! \brief Get Surface Info from OsResource |
| //! \details Update surface info in PVPHAL_SURFACE based on allocated OsResource |
| //! \param [in] pOsInterface |
| //! Pointer to MOS_INTERFACE |
| //! \param [in] pInfo |
| //! Pointer to VPHAL_GET_SURFACE_INFO |
| //! \param [in,out] pSurface |
| //! Pointer to VPHAL_SURFACE |
| //! \return MOS_STATUS |
| //! Return MOS_STATUS_SUCCESS if successful, otherwise failed |
| //! |
| MOS_STATUS VpHal_GetSurfaceInfo( |
| PMOS_INTERFACE pOsInterface, |
| PVPHAL_GET_SURFACE_INFO pInfo, |
| PVPHAL_SURFACE pSurface); |
| |
| //! |
| //! \brief Allocates the Surface |
| //! \details Allocates the Surface |
| //! - if the surface is not already allocated OR |
| //! - resource dimenisions OR format changed |
| //! \param [in] pOsInterface |
| //! Pointer to MOS_INTERFACE |
| //! \param [in,out] pSurface |
| //! Pointer to VPHAL_SURFACE |
| //! \param [in] pSurfaceName |
| //! Pointer to surface name |
| //! \param [in] Format |
| //! Expected MOS_FORMAT |
| //! \param [in] DefaultResType |
| //! Expected Resource Type |
| //! \param [in] DefaultTileType |
| //! Expected Surface Tile Type |
| //! \param [in] dwWidth |
| //! Expected Surface Width |
| //! \param [in] dwHeight |
| //! Expected Surface Height |
| //! \param [in] bCompressible |
| //! Surface being compressible or not |
| //! \param [in] CompressionMode |
| //! Compression Mode |
| //! \param [out] pbAllocated |
| //! true if allocated, false for not |
| //! \param [in] resUsageType |
| //! resource usage type for caching |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success. Error code otherwise |
| //! |
| MOS_STATUS VpHal_ReAllocateSurface( |
| PMOS_INTERFACE pOsInterface, // [in] Pointer to OS Interface |
| PVPHAL_SURFACE pSurface, // [in/out]Pointer to surface |
| PCCHAR pSurfaceName, // [in] Pointer to surface name |
| MOS_FORMAT Format, // [in] Surface Format |
| MOS_GFXRES_TYPE DefaultResType, // [in] Default Resource Type to use if resource has not be allocated yet |
| MOS_TILE_TYPE DefaultTileType, // [in] Default Resource Tile Type to use if resource has not be allocated yet |
| uint32_t dwWidth, // [in] Resource Width |
| uint32_t dwHeight, // [in] Resource Height |
| bool bCompressible, // [in] Flag indaicated reource is compressible or not |
| MOS_RESOURCE_MMC_MODE CompressionMode, // [in] Compression mode |
| bool* pbAllocated, // [out] Flag indicating new allocation |
| MOS_HW_RESOURCE_DEF resUsageType = MOS_HW_RESOURCE_DEF_MAX, // [in] resource usage type |
| MOS_TILE_MODE_GMM tileModeByForce = MOS_TILE_UNSET_GMM); // [in] Flag to indicate if GMM flag tile64 need set |
| |
| //! |
| //! \brief Reads the Surface contents and copy to the Dst Buffer |
| //! \details Reads the Surface contents and copy to the Dst Buffer |
| //! - 1 lock surface |
| //! - 2 copy surface data to pDst |
| //! - 3 unlock surface |
| //! \param [in] pOsInterface |
| //! Pointer to MOS_INTERFACE |
| //! \param [in] pSurface |
| //! Pointer to VPHAL_SURFACE |
| //! \param [in] uBpp |
| //! bit per pixel of surface contents |
| //! \param [out] pDst |
| //! output buffer to store Surface contents |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success. Error code otherwise |
| //! |
| MOS_STATUS VpHal_ReadSurface ( |
| PMOS_INTERFACE pOsInterface, |
| PVPHAL_SURFACE pSurface, |
| uint32_t uBpp, |
| uint8_t* pDst); |
| |
| //! |
| //! \brief Copy Data from input Buffer to the Surface contents |
| //! \details Copy Data from input Buffer to the Surface contents |
| //! - 1 lock surface |
| //! - 2 copy data from pSrc to Surface |
| //! - 3 unlock surface |
| //! \param [in] pOsInterface |
| //! Pointer to MOS_INTERFACE |
| //! \param [out] pSurface |
| //! Pointer to VPHAL_SURFACE |
| //! \param [in] uBpp |
| //! bit per pixel of input buffer |
| //! \param [in] pSrc |
| //! Input buffer to store Surface contents |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success. Error code otherwise |
| //! |
| MOS_STATUS VpHal_WriteSurface ( |
| PMOS_INTERFACE pOsInterface, |
| PVPHAL_SURFACE pSurface, |
| uint32_t uBpp, |
| const uint8_t* pSrc); |
| |
| //! |
| //! \brief Get the color pack type of a surface |
| //! \details Map mos surface format to color pack format and return. |
| //! For unknown format return VPHAL_COLORPACK_UNKNOWN |
| //! \param [in] Format |
| //! MOS_FORMAT of a surface |
| //! \return VPHAL_COLORPACK |
| //! Color pack type of the surface |
| //! |
| VPHAL_COLORPACK VpHal_GetSurfaceColorPack ( |
| MOS_FORMAT Format); |
| |
| //! |
| //! \brief Decide whether Chroma up sampling is needed |
| //! \param [in] pSource |
| //! Pointer to Source Surface |
| //! \param [in] pTarget |
| //! Pointer to Target Surface |
| //! \return bool |
| //! Return true if Chroma up sampling is needed, otherwise false |
| //! |
| bool VpHal_IsChromaUpSamplingNeeded( |
| PVPHAL_SURFACE pSource, |
| PVPHAL_SURFACE pTarget); |
| |
| //! |
| //! \brief Decide whether Chroma down sampling is needed |
| //! \param [in] pSource |
| //! Pointer to Source Surface |
| //! \param [in] pTarget |
| //! Pointer to Target Surface |
| //! \return bool |
| //! Return true if Chroma down sampling is needed, otherwise false |
| //! |
| bool VpHal_IsChromaDownSamplingNeeded( |
| PVPHAL_SURFACE pSource, |
| PVPHAL_SURFACE pTarget); |
| |
| //! \brief Get the bit depth of a surface |
| //! \details Get bit depth of input mos surface format and return. |
| //! For unknown format return 0 |
| //! \param [in] Format |
| //! MOS_FORMAT of a surface |
| //! \return uint32_t |
| //! Bit depth of the surface |
| //! |
| uint32_t VpHal_GetSurfaceBitDepth( |
| MOS_FORMAT Format); |
| |
| //! |
| //! \brief Get the scale ratio |
| //! \details Get the scale ratio from input surface to output surface |
| //! \param [in] pSource |
| //! Pointer to input Surface |
| //! \param [in] pTarget |
| //! Pointer to output Surface |
| //! \param [out] pfScaleX |
| //! Pointer to scaling ratio x |
| //! \param [out] pfScaleY |
| //! Pointer to scaling ratio y |
| //! \return void |
| //! |
| void VpHal_GetScalingRatio( |
| PVPHAL_SURFACE pSource, |
| PVPHAL_SURFACE pTarget, |
| float* pfScaleX, |
| float* pfScaleY); |
| |
| //! \brief Transfer float type to half precision float type |
| //! \details Transfer float type to half precision float (16bit) type |
| //! \param [in] fInput |
| //! input FP32 number |
| //! \return uint16_t |
| //! half precision float value in bit |
| //! |
| uint16_t VpHal_FloatToHalfFloat( |
| float fInput); |
| |
| //! |
| //! \brief Initial the Type/TileType fields in Alloc Params structure |
| //! \details Initial the Type/TileType fields in Alloc Params structure |
| //! - Use the last type from GMM resource |
| //! \param [in, out] pAllocParams |
| //! Pointer to MOS_ALLOC_GFXRES_PARAMS |
| //! \param [in] pSurface |
| //! Pointer to VPHAL_SURFACE |
| //! \param [in] DefaultResType |
| //! Expected Resource Type |
| //! \param [in] DefaultTileType |
| //! Expected Surface Tile Type |
| //! |
| void VpHal_AllocParamsInitType( |
| PMOS_ALLOC_GFXRES_PARAMS pAllocParams, |
| PVPHAL_SURFACE pSurface, |
| MOS_GFXRES_TYPE DefaultResType, |
| MOS_TILE_TYPE DefaultTileType); |
| |
| MOS_SURFACE VpHal_ConvertVphalSurfaceToMosSurface( |
| PVPHAL_SURFACE pSurface); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif // __VPHAL_COMMON_H__ |