| /* |
| * Copyright (c) 2014-2020, 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 mhw_vdbox.h |
| //! \brief This modules implements HW interface layer to be used on all platforms on all operating systems/DDIs, across MHW components. |
| //! |
| #ifndef _MHW_VDBOX_H_ |
| #define _MHW_VDBOX_H_ |
| |
| #include "codec_def_encode_avc.h" |
| #include "codec_def_encode_jpeg.h" |
| #include "codec_def_encode_mpeg2.h" |
| #include "codec_def_encode_vp9.h" |
| #include "codec_def_decode_vp9.h" |
| #include "codec_def_decode_vc1.h" |
| #include "codec_def_decode_avc.h" |
| #include "codec_def_decode_hevc.h" |
| #include "mos_os.h" |
| #include "mhw_utilities.h" |
| #include "mhw_cp_interface.h" |
| |
| #define MHW_VDBOX_VC1_BITPLANE_BUFFER_PITCH_SMALL 64 |
| #define MHW_VDBOX_VC1_BITPLANE_BUFFER_PITCH_LARGE 128 |
| |
| #define MHW_VDBOX_MFX_RAW_UV_PLANE_ALIGNMENT_GEN9 4 // starting Gen9 the alignment is relaxed to 4x instead of 16x |
| #define MHW_VDBOX_MFX_UV_PLANE_ALIGNMENT_LEGACY 16 |
| #define MHW_VDBOX_MFX_RECON_UV_PLANE_ALIGNMENT 16 |
| #define MHW_VDBOX_HCP_RAW_UV_PLANE_ALIGNMENT 4 // starting Gen9 the alignment is relaxed to 4x instead of 16x |
| #define MHW_VDBOX_HCP_RECON_UV_PLANE_ALIGNMENT 8 |
| |
| #define MHW_VDBOX_PAK_BITSTREAM_OVERFLOW_SIZE 400 |
| #define MHW_VDBOX_PAK_SLICE_HEADER_OVERFLOW_SIZE 50 |
| #define MHW_VDBOX_VDENC_DYNAMIC_SLICE_WA_COUNT 1500 |
| |
| // Rowstore Cache values |
| #define MHW_VDBOX_PICWIDTH_1K 1024 |
| #define MHW_VDBOX_PICWIDTH_2K 2048 |
| #define MHW_VDBOX_PICWIDTH_3K 3072 |
| #define MHW_VDBOX_PICWIDTH_4K 4096 |
| #define MHW_VDBOX_PICWIDTH_8K 8192 |
| #define INTRAROWSTORE_FRAME_FIELD_BASEADDRESS_PICWIDTH_LESS_THAN_2K 256 |
| #define INTRAROWSTORE_FRAME_FIELD_BASEADDRESS_PICWIDTH_BETWEEN_2K_AND_3K 384 |
| #define INTRAROWSTORE_MBAFF_BASEADDRESS_PICWIDTH_LESS_THAN_2K 512 |
| #define INTRAROWSTORE_FRAME_FIELD_BASEADDRESS_PICWIDTH_BETWEEN_3K_AND_4K 384 |
| #define DEBLOCKINGROWSTORE_FRAME_FIELD_BASEADDRESS_PICWIDTH_LESS_THAN_2K 384 |
| #define BSDMPCROWSTORE_BASEADDRESS 0 |
| #define MPRROWSTORE_FRAME_FIELD_BASEADDRESS_PICWIDTH_LESS_THAN_2K 128 |
| #define MPRROWSTORE_FRAME_FIELD_BASEADDRESS_PICWIDTH_BETWEEN_2K_AND_3K 192 |
| #define MPRROWSTORE_FRAME_FIELD_BASEADDRESS_PICWIDTH_GREATER_THAN_3K 256 |
| #define MPRROWSTORE_MBAFF_BASEADDRESS_PICWIDTH_LESS_THAN_2K 256 |
| #define VDENCROWSTORE_FRAME_BASEADDRESS_PICWIDTH_LESS_THAN_2K 128 |
| #define VDENCROWSTORE_FRAME_BASEADDRESS_PICWIDTH_BETWEEN_2K_AND_3K 192 |
| #define VDENCROWSTORE_FRAME_BASEADDRESS_PICWIDTH_BETWEEN_3K_AND_4K 256 |
| #define HEVCDATROWSTORE_BASEADDRESS 0 |
| #define HEVCDFROWSTORE_BASEADDRESS_PICWIDTH_LESS_THAN_OR_EQU_TO_2K 64 |
| #define HEVCDFROWSTORE_BASEADDRESS_PICWIDTH_BETWEEN_2K_AND_4K 128 |
| #define HEVCSAOROWSTORE_BASEADDRESS_PICWIDTH_LESS_THAN_OR_EQU_TO_2K 320 |
| #define VP9HVDROWSTORE_BASEADDRESS 0 |
| #define VP9DFROWSTORE_BASEADDRESS_PICWIDTH_LESS_THAN_OR_EQU_TO_2K 32 |
| #define MHW_CACHELINE_SIZE 64 |
| #define BYTES_PER_DWORD 4 |
| #define NUM_PAK_DWS_PER_LCU 5 |
| #define NUM_DWS_PER_CU 8 |
| |
| #define VP9DFROWSTORE_BASEADDRESS_8BIT_PICWIDTH_LESS_THAN_OR_EQU_TO_4K 384 |
| #define VP9DATROWSTORE_BASEADDRESS_8BIT_PICWIDTH_LESS_THAN_OR_EQU_TO_4K 64 |
| |
| typedef enum _MHW_VDBOX_ADDRESS_SHIFT |
| { |
| MHW_VDBOX_SURFACE_STATE_SHIFT = 0, |
| MHW_VDBOX_MFX_GENERAL_STATE_SHIFT = 6, |
| MHW_VDBOX_HCP_GENERAL_STATE_SHIFT = 6, |
| MHW_VDBOX_HUC_GENERAL_STATE_SHIFT = 6, |
| MHW_VDBOX_MFX_UPPER_BOUND_STATE_SHIFT = 12, |
| MHW_VDBOX_STATE_BASE_ADDRESS_SHIFT = 12, |
| MHW_VDBOX_HCP_UPPER_BOUND_STATE_SHIFT = 12, |
| MHW_VDBOX_HUC_UPPER_BOUND_STATE_SHIFT = 12, |
| MHW_VDBOX_HUC_IMEM_STATE_SHIFT = 15, |
| MHW_VDBOX_HCP_DECODED_BUFFER_SHIFT = 12 |
| } MHW_VDBOX_ADDRESS_SHIFT; |
| |
| typedef enum _MHW_VDBOX_NODE_IND |
| { |
| MHW_VDBOX_NODE_1 = 0x0, |
| MHW_VDBOX_NODE_2 = 0x1, |
| MHW_VDBOX_NODE_MAX |
| } MHW_VDBOX_NODE_IND; |
| |
| typedef struct _MHW_VDBOX_AVC_QM_PARAMS |
| { |
| uint8_t List4x4[6][16]; |
| uint8_t List8x8[2][64]; |
| } MHW_VDBOX_AVC_QM_PARAMS, *PMHW_VDBOX_AVC_QM_PARAMS; |
| |
| typedef struct _MHW_VDBOX_HEVC_QM_PARAMS |
| { |
| uint8_t List4x4[6][16]; |
| uint8_t List8x8[6][64]; |
| uint8_t List16x16[6][64]; |
| uint8_t List32x32[2][64]; |
| uint8_t ListDC16x16[6]; |
| uint8_t ListDC32x32[2]; |
| } MHW_VDBOX_HEVC_QM_PARAMS, *PMHW_VDBOX_HEVC_QM_PARAMS; |
| |
| typedef enum _HCP_SURFACE_FORMAT |
| { |
| HCP_SURFACE_FORMAT_YUY2 = 0x0, |
| HCP_SURFACE_FORMAT_RGBX8888 = 0x1, |
| HCP_SURFACE_FORMAT_AYUV4444 = 0x2, |
| HCP_SURFACE_FORMAT_P010_VARIANT = 0x3, |
| HCP_SURFACE_FORMAT_PLANAR_420_8 = 0x4, |
| HCP_SURFACE_FORMAT_UYVY = 0x5, |
| HCP_SURFACE_FORMAT_YVYU = 0x6, |
| HCP_SURFACE_FORMAT_VYUY = 0x7, |
| HCP_SURFACE_FORMAT_Y210 = 0x8, |
| HCP_SURFACE_FORMAT_Y216 = 0x8, |
| HCP_SURFACE_FORMAT_RGBA1010102 = 0x9, |
| HCP_SURFACE_FORMAT_Y410 = 0xA, |
| HCP_SURFACE_FORMAT_NV21 = 0xB, |
| HCP_SURFACE_FORMAT_Y416 = 0xC, |
| HCP_SURFACE_FORMAT_P010 = 0xD, |
| HCP_SURFACE_FORMAT_P016 = 0xE, |
| HCP_SURFACE_FORMAT_Y8 = 0xF, |
| HCP_SURFACE_FORMAT_Y16 = 0x10, |
| HCP_SURFACE_FORMAT_Y216_VARIANT = 0x11, |
| HCP_SURFACE_FORMAT_Y416_VARIANT = 0x12, |
| HCP_SURFACE_FORMAT_YUYV_VARIANT = 0x13, |
| HCP_SURFACE_FORMAT_AYUV4444_VARIANT = 0x14, |
| HCP_SURFACE_FORMAT_RESERVED = 0x15, |
| } HCP_SURFACE_FORMAT; |
| |
| typedef enum _PIPE_WORK_MODE |
| { |
| MHW_VDBOX_HCP_PIPE_WORK_MODE_LEGACY = 0, |
| MHW_VDBOX_HCP_PIPE_WORK_MODE_CABAC_FE = 1, |
| MHW_VDBOX_HCP_PIPE_WORK_MODE_CODEC_BE = 2, |
| MHW_VDBOX_HCP_PIPE_WORK_MODE_CABAC_REAL_TILE = 3, |
| }MHW_VDBOX_HCP_PIPE_WORK_MODE; |
| |
| typedef enum _MULTI_ENGINE_MODE |
| { |
| MHW_VDBOX_HCP_MULTI_ENGINE_MODE_FE_LEGACY = 0, |
| MHW_VDBOX_HCP_MULTI_ENGINE_MODE_LEFT = 1, |
| MHW_VDBOX_HCP_MULTI_ENGINE_MODE_RIGHT = 2, |
| MHW_VDBOX_HCP_MULTI_ENGINE_MODE_MIDDLE = 3, |
| }MHW_VDBOX_HCP_MULTI_ENGINE_MODE; |
| |
| typedef enum |
| { |
| MHW_VDBOX_HCP_RT_FIRST_PHASE = 0, //!< First phase |
| MHW_VDBOX_HCP_RT_MIDDLE_PHASE = 1, //!< Middle phase |
| MHW_VDBOX_HCP_RT_LAST_PHASE = 2 //!< Last phase |
| } MHW_HCP_RT_PHASE_INDICATOR; |
| |
| typedef enum _VDENC_PIPE_NUM_OF_PIPE |
| { |
| VDENC_PIPE_SINGLE_PIPE = 0, |
| VDENC_PIPE_TWO_PIPE = 1, |
| VDENC_PIPE_INVALID = 2, |
| VDENC_PIPE_FOUR_PIPE = 3, |
| }VDENC_PIPE_NUM_OF_PIPE; |
| |
| typedef enum |
| { |
| HCP_CHROMA_FORMAT_MONOCHROME = 0, |
| HCP_CHROMA_FORMAT_YUV420 = 1, |
| HCP_CHROMA_FORMAT_YUV422 = 2, |
| HCP_CHROMA_FORMAT_YUV444 = 3 |
| } HCP_CHROMA_FORMAT_IDC; |
| |
| // Media memory compression trigger |
| typedef enum _MHW_MEDIA_MEMORY_COMPRESSION_EN |
| { |
| MHW_MEDIA_MEMCOMP_DISABLED = 0x0, |
| MHW_MEDIA_MEMCOMP_ENABLED = 0x1 |
| } MHW_MEDIA_MEMORY_COMPRESSION_EN; |
| |
| // Media memory compression mode |
| typedef enum _MHW_MEDIA_MEMORY_COMPRESSION_MODE |
| { |
| MHW_MEDIA_MEMCOMP_MODE_HORIZONTAL = 0x0, |
| MHW_MEDIA_MEMCOMP_MODE_VERTICAL = 0x1, |
| } MHW_MEDIA_MEMORY_COMPRESSION_MODE; |
| |
| //! |
| //! \enum ROWSTORE_SCRATCH_BUFFER_CACHE |
| //! \brief Rowstore scratch buffer cache select |
| //! |
| enum ROWSTORE_SCRATCH_BUFFER_CACHE |
| { |
| BUFFER_TO_LLC = 0x0, |
| BUFFER_TO_INTERNALMEDIASTORAGE = 0x1 |
| }; |
| |
| struct MHW_VDBOX_PIPE_MODE_SELECT_PARAMS |
| { |
| uint32_t Mode = 0; |
| bool bStreamOutEnabled = false; |
| bool bStreamOutEnabledExtEnabled = false; |
| bool bShortFormatInUse = false; |
| bool bVC1OddFrameHeight = false; |
| bool pakFrmLvlStrmoutEnable = false; |
| bool pakPiplnStrmoutEnabled = false; |
| |
| bool bDeblockerStreamOutEnable = false; |
| bool bPostDeblockOutEnable = false; |
| bool bPreDeblockOutEnable = false; |
| bool bDynamicSliceEnable = false; |
| bool bSaoFirstPass = false; |
| bool bRdoqEnable = false; |
| bool bDynamicScalingEnabled = false; |
| |
| // VDEnc specific |
| bool bVdencEnabled = false; |
| bool bVdencStreamInEnable = false; |
| uint8_t ucVdencBitDepthMinus8 = 0; |
| bool bPakThresholdCheckEnable = false; |
| bool bVdencPakObjCmdStreamOutEnable = false; |
| bool bBatchBufferInUse = false; |
| bool bTlbPrefetchEnable = 0; |
| PMHW_BATCH_BUFFER pBatchBuffer = nullptr; |
| uint32_t ChromaType = 0; |
| MOS_FORMAT Format = {}; |
| bool isIFrame = false; |
| bool bIBCEnabled = false; |
| |
| // HuC specific |
| uint32_t dwMediaSoftResetCounterValue = 0; |
| bool bAdvancedRateControlEnable = false; |
| bool bStreamObjectUsed = false; |
| // No need to set protection settings |
| bool disableProtectionSetting = false; |
| virtual ~MHW_VDBOX_PIPE_MODE_SELECT_PARAMS() {} |
| }; |
| using PMHW_VDBOX_PIPE_MODE_SELECT_PARAMS = MHW_VDBOX_PIPE_MODE_SELECT_PARAMS * ; |
| |
| typedef struct _MHW_VDBOX_SURFACE_PARAMS |
| { |
| uint32_t Mode; |
| PMOS_SURFACE psSurface; // 2D surface parameters |
| uint8_t ucVDirection; |
| uint8_t ChromaType; |
| uint8_t ucSurfaceStateId; |
| uint8_t ucBitDepthLumaMinus8; |
| uint8_t ucBitDepthChromaMinus8; |
| uint32_t dwUVPlaneAlignment; |
| bool bDisplayFormatSwizzle; |
| bool bSrc8Pak10Mode; |
| bool bColorSpaceSelection; |
| bool bVdencDynamicScaling; |
| uint32_t dwActualWidth; |
| uint32_t dwActualHeight; |
| uint32_t dwReconSurfHeight; |
| MOS_MEMCOMP_STATE mmcState; |
| uint8_t mmcSkipMask; |
| uint32_t dwCompressionFormat; |
| } MHW_VDBOX_SURFACE_PARAMS, *PMHW_VDBOX_SURFACE_PARAMS; |
| |
| struct MHW_VDBOX_PIPE_BUF_ADDR_PARAMS |
| { |
| uint32_t Mode = 0; |
| PMOS_SURFACE psPreDeblockSurface = nullptr; // Pointer to MOS_SURFACE of render surface |
| MOS_MEMCOMP_STATE PreDeblockSurfMmcState = MOS_MEMCOMP_DISABLED; |
| PMOS_SURFACE psPostDeblockSurface = nullptr; // Pointer to MOS_SURFACE of render surface |
| MOS_MEMCOMP_STATE PostDeblockSurfMmcState = MOS_MEMCOMP_DISABLED; |
| PMOS_SURFACE psRawSurface = nullptr; // Pointer to MOS_SURFACE of raw surface |
| MOS_MEMCOMP_STATE RawSurfMmcState = MOS_MEMCOMP_DISABLED; |
| PMOS_SURFACE ps4xDsSurface = nullptr; |
| MOS_MEMCOMP_STATE Ps4xDsSurfMmcState = MOS_MEMCOMP_DISABLED; |
| PMOS_SURFACE ps8xDsSurface = nullptr; |
| MOS_MEMCOMP_STATE Ps8xDsSurfMmcState = MOS_MEMCOMP_DISABLED; |
| PMOS_RESOURCE presDataBuffer = nullptr; // Handle of residual difference surface |
| PMOS_RESOURCE presReferences[CODEC_MAX_NUM_REF_FRAME] = {}; |
| PMOS_RESOURCE presMfdIntraRowStoreScratchBuffer = nullptr; // Handle of MFD Intra Row Store Scratch data surface |
| PMOS_RESOURCE presMfdDeblockingFilterRowStoreScratchBuffer = nullptr; // Handle of MFD Deblocking Filter Row Store Scratch data surface |
| PMOS_RESOURCE presStreamOutBuffer = nullptr; |
| MOS_MEMCOMP_STATE StreamOutBufMmcState = MOS_MEMCOMP_DISABLED; |
| PMOS_RESOURCE presMacroblockIldbStreamOutBuffer1 = nullptr; |
| PMOS_RESOURCE presMacroblockIldbStreamOutBuffer2 = nullptr; |
| PMOS_RESOURCE presSliceSizeStreamOutBuffer = nullptr; |
| PMOS_SURFACE psFwdRefSurface0 = nullptr; |
| PMOS_SURFACE psFwdRefSurface1 = nullptr; |
| PMOS_SURFACE psFwdRefSurface2 = nullptr; |
| bool bDynamicScalingEnable = false; |
| |
| PMOS_RESOURCE presVdencIntraRowStoreScratchBuffer = nullptr; // For VDEnc, Handle of VDEnc Intra Row Store Scratch data surface |
| PMOS_RESOURCE presVdencTileRowStoreBuffer = nullptr; |
| PMOS_RESOURCE presVdencStreamOutBuffer = nullptr; |
| PMOS_RESOURCE presVdencCuObjStreamOutBuffer = nullptr; |
| PMOS_RESOURCE presVdencPakObjCmdStreamOutBuffer = nullptr; |
| PMOS_RESOURCE presVdencStreamInBuffer = nullptr; |
| PMOS_RESOURCE presVdencReferences[CODEC_MAX_NUM_REF_FRAME] = {}; |
| PMOS_RESOURCE presVdenc4xDsSurface[CODEC_MAX_NUM_REF_FRAME] = {}; |
| PMOS_RESOURCE presVdenc8xDsSurface[CODEC_MAX_NUM_REF_FRAME] = {}; |
| |
| PMOS_RESOURCE presVdencColocatedMVWriteBuffer = nullptr; // For AVC only |
| PMOS_RESOURCE presVdencColocatedMVReadBuffer = nullptr; // For AVC only |
| PMOS_RESOURCE presDeblockingFilterTileRowStoreScratchBuffer = nullptr; // For HEVC, VP9 |
| PMOS_RESOURCE presDeblockingFilterColumnRowStoreScratchBuffer = nullptr; // For HEVC, VP9 |
| PMOS_RESOURCE presMetadataLineBuffer = nullptr; // For HEVC, VP9 |
| PMOS_RESOURCE presMetadataTileLineBuffer = nullptr; // For HEVC, VP9 |
| PMOS_RESOURCE presMetadataTileColumnBuffer = nullptr; // For HEVC, VP9 |
| PMOS_RESOURCE presSaoLineBuffer = nullptr; // For HEVC only |
| PMOS_RESOURCE presSaoTileLineBuffer = nullptr; // For HEVC only |
| PMOS_RESOURCE presSaoTileColumnBuffer = nullptr; // For HEVC only |
| PMOS_RESOURCE presCurMvTempBuffer = nullptr; // For HEVC, VP9 |
| PMOS_RESOURCE presColMvTempBuffer[CODEC_MAX_NUM_REF_FRAME] = {}; // For HEVC, VP9 |
| PMOS_RESOURCE presLcuBaseAddressBuffer = nullptr; // For HEVC only |
| PMOS_RESOURCE presLcuILDBStreamOutBuffer = nullptr; // For HEVC only |
| PMOS_RESOURCE presVp9ProbBuffer = nullptr; // For VP9 only |
| PMOS_RESOURCE presVp9SegmentIdBuffer = nullptr; // For VP9 only |
| PMOS_RESOURCE presHvdLineRowStoreBuffer = nullptr; // For VP9 only |
| PMOS_RESOURCE presHvdTileRowStoreBuffer = nullptr; // For VP9 only |
| PMOS_RESOURCE presSaoStreamOutBuffer = nullptr; // For HEVC only |
| PMOS_RESOURCE presSaoRowStoreBuffer = nullptr; // For HEVC only |
| PMOS_SURFACE presP010RTSurface = nullptr; // For HEVC only |
| PMOS_RESOURCE presFrameStatStreamOutBuffer = nullptr; |
| PMOS_RESOURCE presSseSrcPixelRowStoreBuffer = nullptr; |
| PMOS_RESOURCE presSegmentMapStreamIn = nullptr; |
| PMOS_RESOURCE presSegmentMapStreamOut = nullptr; |
| PMOS_RESOURCE presPakCuLevelStreamoutBuffer = nullptr; |
| PMHW_VDBOX_SURFACE_PARAMS pRawSurfParam = nullptr; |
| PMHW_VDBOX_SURFACE_PARAMS pDecodedReconParam = nullptr; |
| bool bVdencEnabled = false; |
| bool bRawIs10Bit = false; |
| bool bDecodecReconIs10Bit = false; |
| uint32_t dwNumRefIdxL0ActiveMinus1 = 0; |
| uint32_t dwNumRefIdxL1ActiveMinus1 = 0; |
| uint32_t dwLcuStreamOutOffset = 0; |
| uint32_t dwFrameStatStreamOutOffset = 0; |
| uint32_t dwVdencStatsStreamOutOffset = 0; |
| bool oneOnOneMapping = false; // Flag for indicating using 1:1 ref index mapping for vdenc |
| bool isLowDelayB = true; // Flag to indicate if it is LDB |
| bool isIFrame = false; // Flag to indicate if it is I frame |
| bool isPFrame = false; // Flag to indicate if it is P frame |
| bool bIBCEnabled = false; |
| uint8_t IBCRefIdxMask = 0; |
| PMOS_RESOURCE presVdencCumulativeCuCountStreamoutSurface = nullptr; |
| virtual ~MHW_VDBOX_PIPE_BUF_ADDR_PARAMS() {} |
| }; |
| using PMHW_VDBOX_PIPE_BUF_ADDR_PARAMS = MHW_VDBOX_PIPE_BUF_ADDR_PARAMS * ; |
| |
| typedef struct _MHW_VDBOX_IND_OBJ_BASE_ADDR_PARAMS |
| { |
| uint32_t Mode; |
| PMOS_RESOURCE presDataBuffer; |
| uint32_t dwDataSize; |
| uint32_t dwDataOffset; |
| PMOS_RESOURCE presMvObjectBuffer; |
| uint32_t dwMvObjectSize; |
| uint32_t dwMvObjectOffset; |
| PMOS_RESOURCE presPakBaseObjectBuffer; |
| uint32_t dwPakBaseObjectSize; |
| uint32_t dwPakBaseObjectOffset; |
| PMOS_RESOURCE presPakTileSizeStasBuffer; |
| uint32_t dwPakTileSizeStasBufferSize; |
| uint32_t dwPakTileSizeRecordOffset; |
| // used by VP9 |
| PMOS_RESOURCE presCompressedHeaderBuffer; |
| uint32_t dwCompressedHeaderSize; |
| PMOS_RESOURCE presProbabilityDeltaBuffer; |
| uint32_t dwProbabilityDeltaSize; |
| PMOS_RESOURCE presProbabilityCounterBuffer; |
| uint32_t dwProbabilityCounterOffset; |
| uint32_t dwProbabilityCounterSize; |
| PMOS_RESOURCE presTileRecordBuffer; |
| uint32_t dwTileRecordSize; |
| PMOS_RESOURCE presCuStatsBuffer; |
| uint32_t dwCuStatsSize; |
| |
| PMOS_RESOURCE presStreamOutObjectBuffer; |
| uint32_t dwStreamOutObjectSize; |
| uint32_t dwStreamOutObjectOffset; |
| } MHW_VDBOX_IND_OBJ_BASE_ADDR_PARAMS, *PMHW_VDBOX_IND_OBJ_BASE_ADDR_PARAMS; |
| |
| struct MHW_VDBOX_AVC_IMG_PARAMS |
| { |
| // Decoding Params |
| PCODEC_AVC_PIC_PARAMS pAvcPicParams = nullptr; |
| PCODEC_MVC_EXT_PIC_PARAMS pMvcExtPicParams = nullptr; |
| uint8_t ucActiveFrameCnt = 0; |
| // Encoding Params |
| PCODEC_AVC_ENCODE_SEQUENCE_PARAMS pEncodeAvcSeqParams = nullptr; |
| PCODEC_AVC_ENCODE_PIC_PARAMS pEncodeAvcPicParams = nullptr; |
| PCODEC_AVC_ENCODE_SLICE_PARAMS pEncodeAvcSliceParams = nullptr; |
| PCODEC_REF_LIST *ppRefList = nullptr; |
| CODEC_PIC_ID *pPicIdx = nullptr; |
| uint32_t dwTqEnabled = 0; |
| uint32_t dwTqRounding = 0; |
| uint32_t dwMaxVmvR = 0; |
| uint16_t wPicWidthInMb = 0; |
| uint16_t wPicHeightInMb = 0; |
| uint16_t wSlcHeightInMb = 0; |
| uint8_t ucKernelMode = 0; // normal, performance, quality. |
| |
| //FEI multiple passes PAK ---max frame size |
| uint16_t currPass = 0; |
| uint8_t *pDeltaQp = nullptr; |
| uint32_t dwMaxFrameSize = 0; |
| |
| bool bIPCMPass = false; |
| // VDEnc specific |
| bool bVdencEnabled = false; |
| bool bVDEncPerfModeEnabled = false; |
| bool bVdencStreamInEnabled = false; |
| bool bVdencBRCEnabled = false; |
| bool bSliceSizeStreamOutEnabled = false; |
| bool bCrePrefetchEnable = false; |
| bool bPerMBStreamOut = false; |
| bool bRollingIRestrictFracCand = false; |
| |
| uint32_t dwMbSlcThresholdValue = 0; // For VDENC dynamic slice size control |
| uint32_t dwVdencSliceMinusBytes = 0; |
| uint8_t *pVDEncModeCost = nullptr; |
| uint8_t *pVDEncMvCost = nullptr; |
| uint8_t *pVDEncHmeMvCost = nullptr; |
| uint32_t biWeight = 0; |
| virtual ~MHW_VDBOX_AVC_IMG_PARAMS(){} |
| }; |
| using PMHW_VDBOX_AVC_IMG_PARAMS = MHW_VDBOX_AVC_IMG_PARAMS * ; |
| |
| typedef struct _MHW_VDBOX_QM_PARAMS |
| { |
| uint32_t Standard; |
| uint32_t Mode; |
| PMHW_VDBOX_AVC_QM_PARAMS pAvcIqMatrix; |
| CodecMpeg2IqMatrix *pMpeg2IqMatrix; |
| CodecJpegQuantMatrix *pJpegQuantMatrix; |
| uint32_t JpegQMTableSelector; |
| bool bJpegQMRotation; |
| PMHW_VDBOX_HEVC_QM_PARAMS pHevcIqMatrix; |
| } MHW_VDBOX_QM_PARAMS, *PMHW_VDBOX_QM_PARAMS; |
| |
| typedef struct _MHW_VDBOX_AVC_WEIGHTOFFSET_PARAMS |
| { |
| uint32_t uiList; |
| uint32_t uiLumaLogWeightDenom; |
| uint32_t uiChromaLogWeightDenom; |
| uint32_t uiLumaWeightFlag; |
| uint32_t uiChromaWeightFlag; |
| uint32_t uiNumRefForList; |
| int16_t Weights[2][32][3][2]; |
| PCODEC_AVC_ENCODE_PIC_PARAMS pAvcPicParams; |
| } MHW_VDBOX_AVC_WEIGHTOFFSET_PARAMS, *PMHW_VDBOX_AVC_WEIGHTOFFSET_PARAMS; |
| |
| typedef struct _MHW_VDBOX_PAK_INSERT_PARAMS |
| { |
| PBSBuffer pBsBuffer; |
| // also reuse dwBitSize for passing SrcDataEndingBitInclusion when (pEncoder->bLastPicInStream || pEncoder->bLastPicInSeq) |
| uint32_t dwBitSize; |
| uint32_t dwOffset; |
| uint32_t uiSkipEmulationCheckCount; |
| bool bLastPicInSeq; |
| bool bLastPicInStream; |
| bool bLastHeader; |
| bool bEmulationByteBitsInsert; |
| bool bSetLastPicInStreamData; |
| bool bSliceHeaderIndicator; |
| bool bHeaderLengthExcludeFrmSize; |
| uint32_t *pdwMpeg2PicHeaderTotalBufferSize; |
| uint32_t *pdwMpeg2PicHeaderDataStartOffset; |
| bool bResetBitstreamStartingPos; |
| bool bEndOfSlice; |
| uint32_t dwLastPicInSeqData; |
| uint32_t dwLastPicInStreamData; |
| PMHW_BATCH_BUFFER pBatchBufferForPakSlices; |
| bool bVdencInUse; |
| } MHW_VDBOX_PAK_INSERT_PARAMS, *PMHW_VDBOX_PAK_INSERT_PARAMS; |
| |
| typedef struct _MHW_VDBOX_VP9_SEGMENT_STATE |
| { |
| uint32_t Mode; |
| PCODEC_VP9_SEGMENT_PARAMS pVp9SegmentParams; |
| PCODEC_VP9_ENCODE_SEGMENT_PARAMS pVp9EncodeSegmentParams; |
| uint8_t ucCurrentSegmentId; |
| uint8_t ucQPIndexLumaAC; |
| const uint8_t *pcucLfQpLookup; |
| uint8_t *pbSegStateBufferPtr; |
| } MHW_VDBOX_VP9_SEGMENT_STATE, *PMHW_VDBOX_VP9_SEGMENT_STATE; |
| |
| typedef struct _MHW_VDBOX_HCP_BSD_PARAMS |
| { |
| uint32_t dwBsdDataLength; |
| uint32_t dwBsdDataStartOffset; |
| } MHW_VDBOX_HCP_BSD_PARAMS, *PMHW_VDBOX_HCP_BSD_PARAMS; |
| |
| typedef struct _MHW_VDBOX_ROWSTORE_PARAMS |
| { |
| uint32_t Mode; |
| uint32_t dwPicWidth; |
| uint32_t bMbaff; |
| bool bIsFrame; |
| uint8_t ucBitDepthMinus8; |
| uint8_t ucChromaFormat; |
| uint8_t ucLCUSize; |
| } MHW_VDBOX_ROWSTORE_PARAMS, *PMHW_VDBOX_ROWSTORE_PARAMS; |
| |
| typedef struct _MHW_VDBOX_ROWSTORE_CACHE |
| { |
| bool bSupported; |
| bool bEnabled; |
| uint32_t dwAddress; |
| } MHW_VDBOX_ROWSTORE_CACHE, *PMHW_VDBOX_ROWSTORE_CACHE; |
| |
| struct MHW_VDBOX_STATE_CMDSIZE_PARAMS |
| { |
| bool bShortFormat = false; |
| bool bHucDummyStream = false; |
| bool bSfcInUse = false; |
| uint32_t uNumStoreDataImm = 0; |
| uint32_t uNumStoreReg = 0; |
| uint32_t uNumMfxWait = 0; |
| uint32_t uNumAddConBBEnd = 0; |
| uint32_t uNumMiCopy = 0; |
| uint32_t uNumMiFlush = 0; |
| uint32_t bPerformHucStreamOut = false; |
| uint32_t uNumVdPipelineFlush = 0; |
| virtual ~MHW_VDBOX_STATE_CMDSIZE_PARAMS() {} |
| }; |
| using PMHW_VDBOX_STATE_CMDSIZE_PARAMS = MHW_VDBOX_STATE_CMDSIZE_PARAMS * ; |
| |
| typedef struct _MHW_VDBOX_AVC_SLICE_STATE |
| { |
| PCODEC_PIC_ID pAvcPicIdx; |
| PMOS_RESOURCE presDataBuffer; |
| uint32_t dwDataBufferOffset; |
| uint32_t dwOffset; |
| uint32_t dwLength; |
| uint32_t dwSliceIndex; |
| bool bLastSlice; |
| uint32_t dwTotalBytesConsumed; |
| |
| // Decoding Only |
| PCODEC_AVC_PIC_PARAMS pAvcPicParams; |
| PCODEC_MVC_EXT_PIC_PARAMS pMvcExtPicParams; |
| PCODEC_AVC_SLICE_PARAMS pAvcSliceParams; |
| uint32_t dwNextOffset; |
| uint32_t dwNextLength; |
| bool bIntelEntrypointInUse; |
| bool bPicIdRemappingInUse; |
| bool bShortFormatInUse; |
| bool bPhantomSlice; |
| uint8_t ucDisableDeblockingFilterIdc; |
| uint8_t ucSliceBetaOffsetDiv2; |
| uint8_t ucSliceAlphaC0OffsetDiv2; |
| |
| // Encoding Only |
| PCODEC_AVC_ENCODE_SEQUENCE_PARAMS pEncodeAvcSeqParams; |
| PCODEC_AVC_ENCODE_PIC_PARAMS pEncodeAvcPicParams; |
| PCODEC_AVC_ENCODE_SLICE_PARAMS pEncodeAvcSliceParams; |
| PBSBuffer pBsBuffer; |
| PCODECHAL_NAL_UNIT_PARAMS *ppNalUnitParams; |
| PMHW_BATCH_BUFFER pBatchBufferForPakSlices; |
| bool bSingleTaskPhaseSupported; |
| bool bFirstPass; |
| bool bLastPass; |
| bool bBrcEnabled; |
| bool bRCPanicEnable; |
| bool bInsertBeforeSliceHeaders; |
| bool bAcceleratorHeaderPackingCaps; |
| uint32_t dwBatchBufferForPakSlicesStartOffset; |
| uint32_t uiSkipEmulationCheckCount; |
| uint32_t dwRoundingValue; |
| uint32_t dwRoundingIntraValue; |
| bool bRoundingInterEnable; |
| uint16_t wFrameFieldHeightInMB; // Frame/field Height in MB |
| bool bVdencInUse; |
| bool bVdencNoTailInsertion; |
| bool oneOnOneMapping = false; |
| bool bFullFrameData; |
| } MHW_VDBOX_AVC_SLICE_STATE, *PMHW_VDBOX_AVC_SLICE_STATE; |
| |
| #endif |