| /* |
| * Copyright (c) 2017-2019, 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 codechal_vdenc_hevc_g12.h |
| //! \brief HEVC VDEnc encoder for GEN12 platform. |
| //! |
| |
| #ifndef __CODECHAL_VDENC_HEVC_G12_H__ |
| #define __CODECHAL_VDENC_HEVC_G12_H__ |
| |
| #include "codechal_vdenc_hevc.h" |
| #include "mhw_vdbox_g12_X.h" |
| #include "codechal_debug_encode_par_g12.h" |
| #include "codechal_encode_singlepipe_virtualengine.h" |
| #include "codechal_encode_scalability.h" |
| #ifdef _ENCODE_VDENC_RESERVED |
| #include "codechal_vdenc_hevc_g12_rsvd.h" |
| #endif |
| |
| #define HUC_CMD_LIST_MODE 1 |
| #define HUC_BATCH_BUFFER_END 0x05000000 |
| #define VDBOX_HUC_PAK_INTEGRATION_KERNEL_DESCRIPTOR 15 |
| #define CODECHAL_ENCODE_HEVC_VDENC_WP_DATA_BLOCK_NUMBER 6 |
| |
| struct CODECHAL_VDENC_HEVC_HUC_BRC_INIT_DMEM_G12 |
| { |
| uint32_t BRCFunc_U32; // 0: Init; 2: Reset, bit7 0: frame-based; 1: tile-based |
| uint32_t UserMaxFrame; // ProfileLevelMaxFrame_U32 |
| uint32_t InitBufFull_U32; |
| uint32_t BufSize_U32; |
| uint32_t TargetBitrate_U32; |
| uint32_t MaxRate_U32; |
| uint32_t MinRate_U32; |
| uint32_t FrameRateM_U32; |
| uint32_t FrameRateD_U32; |
| uint32_t LumaLog2WeightDenom_U32; |
| uint32_t ChromaLog2WeightDenom_U32; |
| uint8_t BRCFlag : 7; // ACQP/ICQ=0, CBR=1, VBR=2, VCM=3, LOWDELAY=4 |
| uint8_t SSCFlag : 1; // SSC: 0x80 |
| uint8_t Reserved; |
| uint16_t GopP_U16; |
| uint16_t GopB_U16; |
| uint16_t FrameWidth_U16; |
| uint16_t FrameHeight_U16; |
| uint16_t GopB1_U16; |
| uint16_t GopB2_U16; |
| uint8_t MinQP_U8; |
| uint8_t MaxQP_U8; |
| uint8_t MaxBRCLevel_U8; |
| uint8_t LumaBitDepth_U8; |
| uint8_t ChromaBitDepth_U8; |
| uint8_t CuQpCtrl_U8; // 0=No CUQP; 1=CUQP for I-frame; 2=CUQP for P/B-frame |
| |
| uint8_t RSVD0[4]; |
| int8_t DevThreshPB0_S8[8]; |
| int8_t DevThreshVBR0_S8[8]; |
| int8_t DevThreshI0_S8[8]; |
| int8_t InstRateThreshP0_S8[4]; |
| int8_t InstRateThreshB0_S8[4]; |
| int8_t InstRateThreshI0_S8[4]; |
| uint8_t LowDelayMode_U8; |
| uint8_t InitQPIP_U8; |
| uint8_t InitQPB_U8; // In CQP mode, InitQPB_U8= InitQPIP_U8 |
| uint8_t QPDeltaThrForAdapt2Pass_U8; |
| uint8_t TopFrmSzThrForAdapt2Pass_U8; |
| uint8_t BotFrmSzThrForAdapt2Pass_U8; |
| uint8_t QPSelectForFirstPass_U8; |
| uint8_t MBHeaderCompensation_U8; |
| uint8_t OverShootCarryFlag_U8; |
| uint8_t OverShootSkipFramePct_U8; |
| uint8_t EstRateThreshP0_U8[7]; |
| uint8_t EstRateThreshB0_U8[7]; |
| |
| uint8_t EstRateThreshI0_U8[7]; |
| uint8_t QPP_U8; |
| uint8_t StreamInSurfaceEnable_U8; // 0-disabled, 1-enabled |
| uint8_t StreamInROIEnable_U8; // 0-disabled, 1-enabled |
| uint8_t TimingBudget_Enable_U8; // 0-disabled, 1-enabled |
| uint8_t TopQPDeltaThrForAdapt2Pass_U8; // 2 |
| uint8_t BotQPDeltaThrForAdapt2Pass_U8; // 1 |
| uint8_t RESERVED; |
| uint8_t NetworkTraceEnable_U8; // 0-disabled, 1-enabled |
| uint8_t LowDelaySceneChangeXFrameSizeEnable_U8; // 0-disabled, 1-enabled |
| uint32_t ACQP_U32; // 1 |
| uint32_t SlidingWindow_Size_U32; // 30 |
| |
| uint8_t SLIDINGWINDOW_MaxRateRatio; |
| uint8_t RSVD2; |
| int8_t CbQPOffset; |
| int8_t CrQPOffset; |
| |
| uint32_t ProfileLevelMaxFramePB_U32; |
| |
| // tile-based BRC |
| uint16_t SlideWindowRC; // Reserved now |
| uint16_t MaxLogCUSize; |
| |
| uint16_t FrameWidthInLCU; |
| uint16_t FrameHeightInLCU; |
| |
| uint8_t BRCPyramidEnable_U8; |
| uint8_t LongTermRefEnable_U8; |
| uint16_t LongTermRefInterval_U16; |
| uint8_t LongTermRefMsdk_U8; |
| uint8_t IsLowDelay_U8; |
| uint16_t RSVD3; |
| uint32_t RSVD1[4]; // 64 bytes aligned |
| }; |
| C_ASSERT(192 == sizeof(CODECHAL_VDENC_HEVC_HUC_BRC_INIT_DMEM_G12)); |
| |
| using PCODECHAL_VDENC_HEVC_HUC_BRC_INIT_DMEM_G12 = CODECHAL_VDENC_HEVC_HUC_BRC_INIT_DMEM_G12*; |
| |
| struct CODECHAL_VDENC_HEVC_HUC_BRC_UPDATE_DMEM_G12 |
| { |
| uint32_t TARGETSIZE_U32; |
| uint32_t FrameID_U32; // frame number |
| uint32_t Ref_L0_FrameID_U32[8]; |
| uint32_t Ref_L1_FrameID_U32[8]; |
| uint16_t startGAdjFrame_U16[4]; // 10, 50, 100, 150 |
| uint16_t TargetSliceSize_U16; |
| uint16_t SLB_Data_SizeInBytes; |
| uint16_t PIC_STATE_StartInBytes; // PIC_STATE starts in byte. 0xFFFF means not available in SLB |
| uint16_t CMD2_StartInBytes; |
| uint16_t CMD1_StartInBytes; |
| uint16_t PIPE_MODE_SELECT_StartInBytes; // PIPE Mode select starts in byte. 0xFFFF means not available in SLB |
| uint16_t Current_Data_Offset; // Data block offset of current picture from beginning of the data buffer (region 9) |
| uint16_t Ref_Data_Offset[5]; // Data block offset of ref pictures from beginning of the data buffer (region 9) |
| uint16_t MaxNumSliceAllowed_U16; |
| uint8_t OpMode_U8; // 1: frame-based BRC (including ACQP), 2: Weighted prediction, Weighted prediction should not be enabled in first pass. |
| // Same as other common flags, this is a bit operation. Each bit is zero for disabling and 1 for enabling. i.e. 01: BRC, 10: WP - never used; 11: BRC+WP, 4: tile-based BRC (frame level), 8: tile-based BRC (tile level) |
| uint8_t CurrentFrameType_U8; |
| uint8_t Num_Ref_L0_U8; |
| uint8_t Num_Ref_L1_U8; |
| uint8_t Num_Slices; |
| uint8_t CQP_QPValue_U8; // CQP QP value (needed for ICQ and ACQP) |
| uint8_t CQP_FracQP_U8; |
| uint8_t MaxNumPass_U8; // max number of BRC passes (SAO second pass is not included.) |
| uint8_t gRateRatioThreshold_U8[7]; |
| uint8_t startGAdjMult_U8[5]; |
| uint8_t startGAdjDiv_U8[5]; |
| uint8_t gRateRatioThresholdQP_U8[8]; |
| uint8_t SceneChgPrevIntraPctThreshold_U8; |
| uint8_t SceneChgCurIntraPctThreshold_U8; |
| uint8_t IPAverageCoeff_U8; |
| uint8_t CurrentPass_U8; |
| int8_t DeltaQPForMvZero_S8; |
| int8_t DeltaQPForMvZone0_S8; |
| int8_t DeltaQPForMvZone1_S8; |
| int8_t DeltaQPForMvZone2_S8; |
| int8_t DeltaQPForSadZone0_S8; |
| int8_t DeltaQPForSadZone1_S8; |
| int8_t DeltaQPForSadZone2_S8; |
| int8_t DeltaQPForSadZone3_S8; |
| int8_t DeltaQPForROI0_S8; |
| int8_t DeltaQPForROI1_S8; |
| int8_t DeltaQPForROI2_S8; |
| int8_t DeltaQPForROI3_S8; |
| int8_t LumaLog2WeightDenom_S8; // default: 6 |
| int8_t ChromaLog2WeightDenom_S8; // default: 6 |
| uint8_t DisabledFeature_U8; |
| uint8_t SlidingWindow_Enable_U8; // 0-disabled, 1-enabled |
| uint8_t LOG_LCU_Size_U8; // 6 |
| uint16_t NetworkTraceEntry_U16; // default: 0 |
| uint16_t LowDelaySceneChangeXFrameSize_U16; // default: 0 |
| int8_t ReEncodePositiveQPDeltaThr_S8; // default: 4 |
| int8_t ReEncodeNegativeQPDeltaThr_S8; // default: -10 |
| |
| // tile-based BRC |
| uint8_t MaxNumTileHuCCallMinus1; // maximal tile row |
| uint8_t TileHucCallIndex; |
| uint8_t TileHuCCallPassIndex; // Start from 1 |
| uint8_t TileHuCCallPassMax; // Reserved now |
| uint16_t TileSizeInLCU; |
| |
| uint32_t TxSizeInBitsPerFrame; |
| |
| uint8_t StartTileIdx; |
| uint8_t EndTileIdx; |
| |
| uint16_t NumFrameSkipped; |
| uint32_t SkipFrameSize; |
| |
| uint32_t SliceHeaderSize; |
| uint8_t IsLongTermRef; |
| |
| uint8_t RSVD[3]; // 64 bytes aligned |
| }; |
| C_ASSERT(192 == sizeof(CODECHAL_VDENC_HEVC_HUC_BRC_UPDATE_DMEM_G12)); |
| |
| using PCODECHAL_VDENC_HEVC_HUC_BRC_UPDATE_DMEM_G12 = CODECHAL_VDENC_HEVC_HUC_BRC_UPDATE_DMEM_G12*; |
| |
| struct CODECHAL_VDENC_HEVC_HUC_BRC_CONSTANT_DATA_G12 |
| { |
| uint16_t SADQPLambdaI[52]; |
| uint16_t SADQPLambdaP[52]; |
| uint16_t RDQPLambdaI[52]; |
| uint16_t RDQPLambdaP[52]; |
| uint16_t SLCSZ_THRDELTAI_U16[52]; |
| uint16_t SLCSZ_THRDELTAP_U16[52]; |
| uint8_t DistThreshldI[9]; |
| uint8_t DistThreshldP[9]; |
| uint8_t DistThreshldB[9]; |
| int8_t DistQPAdjTabI[81]; |
| int8_t DistQPAdjTabP[81]; |
| int8_t DistQPAdjTabB[81]; |
| int8_t FrmSzAdjTabI_S8[72]; |
| int8_t FrmSzAdjTabP_S8[72]; |
| int8_t FrmSzAdjTabB_S8[72]; |
| uint8_t FrmSzMaxTabI[9]; |
| uint8_t FrmSzMaxTabP[9]; |
| uint8_t FrmSzMaxTabB[9]; |
| uint8_t FrmSzMinTabI[9]; |
| uint8_t FrmSzMinTabP[9]; |
| uint8_t FrmSzMinTabB[9]; |
| int8_t QPAdjTabI[45]; |
| int8_t QPAdjTabP[45]; |
| int8_t QPAdjTabB[45]; |
| struct |
| { |
| uint8_t I_INTRA_64X64DC; // added later since I frame needs to be setup differently |
| uint8_t I_INTRA_32x32; |
| uint8_t I_INTRA_16x16; |
| uint8_t I_INTRA_8x8; |
| uint8_t I_INTRA_SADMPM; |
| uint8_t I_INTRA_RDEMPM; |
| uint8_t I_INTRA_NxN; |
| uint8_t INTRA_64X64DC; |
| uint8_t INTRA_32x32; |
| uint8_t INTRA_16x16; |
| uint8_t INTRA_8x8; |
| uint8_t INTRA_SADMPM; |
| uint8_t INTRA_RDEMPM; |
| uint8_t INTRA_NxN; |
| uint8_t INTER_32x32; |
| uint8_t INTER_32x16; |
| uint8_t INTER_16x16; |
| uint8_t INTER_16x8; |
| uint8_t INTER_8x8; |
| uint8_t REF_ID; |
| uint8_t MERGE_64X64; |
| uint8_t MERGE_32X32; |
| uint8_t MERGE_16x16; |
| uint8_t MERGE_8x8; |
| uint8_t SKIP_64X64; |
| uint8_t SKIP_32X32; |
| uint8_t SKIP_16x16; |
| uint8_t SKIP_8x8; |
| } ModeCosts[52]; |
| struct |
| { |
| // Unit in Bytes |
| uint16_t SizeOfCMDs; |
| uint16_t HcpWeightOffsetL0_StartInBytes; // HCP_WEIGHTOFFSET_L0 starts in bytes from beginning of the SLB. 0xFFFF means unavailable in SLB |
| uint16_t HcpWeightOffsetL1_StartInBytes; // HCP_WEIGHTOFFSET_L1 starts in bytes from beginning of the SLB. 0xFFFF means unavailable in SLB |
| uint16_t SliceState_StartInBytes; |
| uint16_t SliceHeaderPIO_StartInBytes; |
| uint16_t VdencWeightOffset_StartInBytes; |
| // Unit in Bits |
| uint16_t SliceHeader_SizeInBits; |
| uint16_t WeightTable_StartInBits; // number of bits from beginning of slice header for weight table first bit, 0xffff means not awailable |
| uint16_t WeightTable_EndInBits; // number of bits from beginning of slice header for weight table last bit, 0xffff means not awailable |
| } Slice[CODECHAL_VDENC_HEVC_MAX_SLICE_NUM]; |
| uint8_t PenaltyForIntraNonDC32x32PredMode[52]; |
| }; |
| |
| using PCODECHAL_VDENC_HEVC_HUC_BRC_CONSTANT_DATA_G12 = CODECHAL_VDENC_HEVC_HUC_BRC_CONSTANT_DATA_G12*; |
| |
| //! |
| //! \struct HucPakStitchDmemVdencG12 |
| //! \brief The struct of Huc Com Dmem |
| //! |
| struct HucPakStitchDmemVdencG12 |
| { |
| uint32_t TileSizeRecord_offset[5]; // Tile Size Records, start offset in byte, 0xffffffff means unavailable |
| uint32_t VDENCSTAT_offset[5]; // needed for HEVC VDEnc, VP9 VDEnc, start offset in byte, 0xffffffff means unavailable |
| uint32_t HEVC_PAKSTAT_offset[5]; //needed for HEVC VDEnc, start offset in byte, 0xffffffff means unavailable |
| uint32_t HEVC_Streamout_offset[5]; //needed for HEVC VDEnc, start offset in byte, 0xffffffff means unavailable |
| uint32_t VP9_PAK_STAT_offset[5]; //needed for VP9 VDEnc, start offset in byte, 0xffffffff means unavailable |
| uint32_t Vp9CounterBuffer_offset[5]; //needed for VP9 VDEnc, start offset in byte, 0xffffffff means unavailable |
| uint32_t LastTileBS_StartInBytes;// last tile in bitstream for region 4 and region 5 |
| uint32_t SliceHeaderSizeinBits; // needed for HEVC dual pipe BRC |
| uint16_t TotalSizeInCommandBuffer; // Total size in bytes of valid data in the command buffer |
| uint16_t OffsetInCommandBuffer; // Byte offset of the to-be-updated Length (uint32_t) in the command buffer, 0xffff means unavailable |
| uint16_t PicWidthInPixel; // Picture width in pixel |
| uint16_t PicHeightInPixel; // Picture hieght in pixel |
| uint16_t TotalNumberOfPAKs; // [2..4] |
| uint16_t NumSlices[4]; // this is number of slices from each PAK |
| uint16_t NumTiles[4]; // this is number of tiles from each PAK |
| uint16_t PIC_STATE_StartInBytes;// offset for region 7 and region 8 |
| uint8_t Codec; // 1: HEVC DP; 2: HEVC VDEnc; 3: VP9 VDEnc |
| uint8_t MAXPass; // Max number of BRC pass >=1 |
| uint8_t CurrentPass; // Current BRC pass [1..MAXPass] |
| uint8_t MinCUSize; // Minimum CU size (3: 8x8, 4:16x16), HEVC only. |
| uint8_t CabacZeroWordFlag; // cabac zero flag, HEVC only |
| uint8_t bitdepth_luma; // luma bitdepth, HEVC only |
| uint8_t bitdepth_chroma; // chroma bitdepth, HEVC only |
| uint8_t ChromaFormatIdc; // chroma format idc, HEVC only |
| uint8_t currFrameBRClevel; // Hevc dual pipe only |
| uint8_t brcUnderFlowEnable; // Hevc dual pipe only |
| uint8_t StitchEnable;// enable stitch cmd for Hevc dual pipe |
| uint8_t reserved1; |
| uint16_t StitchCommandOffset; // offset in region 10 which is the second level batch buffer |
| uint16_t reserved2; |
| uint32_t BBEndforStitch; |
| uint8_t RSVD[16]; |
| }; |
| |
| //! |
| //! \struct HucInputCmdG12 |
| //! \brief The struct of Huc input command |
| //! |
| struct HucInputCmdVdencG12 |
| { |
| uint8_t SelectionForIndData = 0; |
| uint8_t CmdMode = 0; |
| uint16_t LengthOfTable = 0; |
| |
| uint32_t SrcBaseOffset = 0; |
| uint32_t DestBaseOffset = 0; |
| |
| uint32_t Reserved[3] = { 0 }; |
| |
| uint32_t CopySize = 0; // use this as indicator of size for copy base addr cmd. Since encode will not implement CopySize for copy cmd |
| |
| uint32_t ReservedCounter[4] = {0}; |
| |
| uint32_t SrcAddrBottom = 0; |
| uint32_t SrcAddrTop = 0; |
| uint32_t DestAddrBottom = 0; |
| uint32_t DestAddrTop = 0; |
| }; |
| |
| //! |
| //! \struct HucCommandData |
| //! \brief The struct of Huc commands data |
| //! |
| struct HucCommandDataVdencG12 |
| { |
| uint32_t TotalCommands; //!< Total Commands in the Data buffer |
| struct |
| { |
| uint16_t ID; //!< Command ID, defined and order must be same as that in DMEM |
| uint16_t SizeOfData; //!< data size in uint32_t |
| uint32_t data[40]; |
| } InputCOM[10]; |
| }; |
| |
| struct CODECHAL_VDENC_HEVC_STREAMIN_STATE_G12 |
| { |
| // DWORD 0 |
| union { |
| struct { |
| uint32_t RoiCtrl : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t MaxTuSize : MOS_BITFIELD_RANGE(8, 9); |
| uint32_t MaxCuSize : MOS_BITFIELD_RANGE(10, 11); |
| uint32_t NumImePredictors : MOS_BITFIELD_RANGE(12, 15); |
| uint32_t Reserved_0 : MOS_BITFIELD_RANGE(16, 20); |
| uint32_t ForceQPDelta : MOS_BITFIELD_BIT(21); |
| uint32_t PaletteDisable : MOS_BITFIELD_BIT(22); |
| uint32_t Reserved_1 : MOS_BITFIELD_BIT(23); |
| uint32_t PuTypeCtrl : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| uint32_t Value; |
| } DW0; |
| |
| // DWORD 1-4 |
| union { |
| struct { |
| uint32_t ForceMvX : MOS_BITFIELD_RANGE(0, 15); |
| uint32_t ForceMvY : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| uint32_t Value; |
| } DW1[4]; |
| |
| // DWORD 5 |
| union { |
| struct { |
| uint32_t Reserved : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| uint32_t Value; |
| } DW5; |
| |
| // DWORD 6 |
| union { |
| struct { |
| uint32_t ForceRefIdx : MOS_BITFIELD_RANGE(0, 15); //4-bits per 16x16 block |
| uint32_t NumMergeCandidateCu8x8 : MOS_BITFIELD_RANGE(16, 19); |
| uint32_t NumMergeCandidateCu16x16 : MOS_BITFIELD_RANGE(20, 23); |
| uint32_t NumMergeCandidateCu32x32 : MOS_BITFIELD_RANGE(24, 27); |
| uint32_t NumMergeCandidateCu64x64 : MOS_BITFIELD_RANGE(28, 31); |
| }; |
| uint32_t Value; |
| } DW6; |
| |
| // DWORD 7 |
| union { |
| struct { |
| uint32_t SegID : MOS_BITFIELD_RANGE(0, 15); //4-bits per 16x16 block |
| uint32_t QpEnable : MOS_BITFIELD_RANGE(16, 19); |
| uint32_t SegIDEnable : MOS_BITFIELD_RANGE(20, 20); |
| uint32_t Reserved : MOS_BITFIELD_RANGE(21, 22); |
| uint32_t ForceRefIdEnable : MOS_BITFIELD_RANGE(23, 23); |
| uint32_t ImePredictorSelect : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| uint32_t Value; |
| } DW7; |
| |
| // DWORD 8-11 |
| union { |
| struct { |
| uint32_t ImePredictorMvX : MOS_BITFIELD_RANGE(0, 15); |
| uint32_t ImePredictorMvY : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| uint32_t Value; |
| } DW8[4]; |
| |
| // DWORD 12 |
| union { |
| struct { |
| uint32_t ImePredictorRefIdx : MOS_BITFIELD_RANGE(0, 15); //4-bits per 16x16 block |
| uint32_t Reserved : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| uint32_t Value; |
| } DW12; |
| |
| // DWORD 13 |
| union { |
| struct { |
| uint32_t PanicModeLCUThreshold : MOS_BITFIELD_RANGE(0, 15); |
| uint32_t Reserved : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| uint32_t Value; |
| } DW13; |
| |
| // DWORD 14 |
| union { |
| struct { |
| uint32_t ForceQp_0 : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t ForceQp_1 : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t ForceQp_2 : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t ForceQp_3 : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| uint32_t Value; |
| } DW14; |
| |
| // DWORD 15 |
| union { |
| struct { |
| uint32_t Reserved : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| uint32_t Value; |
| } DW15; |
| }; |
| C_ASSERT(SIZE32(CODECHAL_VDENC_HEVC_STREAMIN_STATE_G12) == 16); |
| |
| using PCODECHAL_VDENC_HEVC_STREAMIN_STATE_G12 = CODECHAL_VDENC_HEVC_STREAMIN_STATE_G12*; |
| |
| const uint32_t ME_CURBE_INIT_G12[48] = |
| { |
| 0x00000000, 0x00200010, 0x00003939, 0x77a43000, 0x00000000, 0x28300000, 0x00000000, 0x00000000, |
| 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000200, |
| 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
| 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
| 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
| 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff |
| }; |
| |
| enum CODECHAL_BINDING_TABLE_OFFSET_HEVC_VP9_VDENC_KERNEL_G12 |
| { |
| // VDEnc HME kernel |
| CODECHAL_VDENC_HME_BEGIN_G12 = 0, |
| CODECHAL_VDENC_HME_MV_DATA_SURFACE_CM_G12 = CODECHAL_VDENC_HME_BEGIN_G12, |
| CODECHAL_VDENC_16xME_MV_DATA_SURFACE_CM_G12, |
| CODECHAL_VDENC_32xME_MV_DATA_SURFACE_CM_G12 = CODECHAL_VDENC_16xME_MV_DATA_SURFACE_CM_G12, |
| CODECHAL_VDENC_HME_DISTORTION_SURFACE_CM_G12, |
| CODECHAL_VDENC_HME_BRC_DISTORTION_CM_G12, |
| CODECHAL_VDENC_HME_CURR_FOR_FWD_REF_CM_G12, |
| CODECHAL_VDENC_HME_FWD_REF_IDX0_CM_G12, |
| CODECHAL_VDENC_HME_RESERVED1_CM_G12, |
| CODECHAL_VDENC_HME_FWD_REF_IDX1_CM_G12, |
| CODECHAL_VDENC_HME_RESERVED2_CM_G12, |
| CODECHAL_VDENC_HME_FWD_REF_IDX2_CM_G12, |
| CODECHAL_VDENC_HME_RESERVED3_CM_G12, |
| CODECHAL_VDENC_HME_FWD_REF_IDX3_CM_G12, |
| CODECHAL_VDENC_HME_RESERVED4_CM_G12, |
| CODECHAL_VDENC_HME_FWD_REF_IDX4_CM_G12, |
| CODECHAL_VDENC_HME_RESERVED5_CM_G12, |
| CODECHAL_VDENC_HME_FWD_REF_IDX5_CM_G12, |
| CODECHAL_VDENC_HME_RESERVED6_CM_G12, |
| CODECHAL_VDENC_HME_FWD_REF_IDX6_CM_G12, |
| CODECHAL_VDENC_HME_RESERVED7_CM_G12, |
| CODECHAL_VDENC_HME_FWD_REF_IDX7_CM_G12, |
| CODECHAL_VDENC_HME_RESERVED8_CM_G12, |
| CODECHAL_VDENC_HME_CURR_FOR_BWD_REF_CM_G12, |
| CODECHAL_VDENC_HME_BWD_REF_IDX0_CM_G12, |
| CODECHAL_VDENC_HME_RESERVED9_CM_G12, |
| CODECHAL_VDENC_HME_BWD_REF_IDX1_CM_G12, |
| CODECHAL_VDENC_HME_RESERVED10_CM_G12, |
| CODECHAL_VDENC_HME_VDENC_STREAMIN_OUTPUT_CM_G12, |
| CODECHAL_VDENC_HME_VDENC_STREAMIN_INPUT_CM_G12, |
| CODECHAL_VDENC_HME_END_G12, |
| }; |
| |
| struct MEDIA_OBJECT_HEVC_VP9_VDENC_ME_CURBE_G12 |
| { |
| // DW0 |
| union |
| { |
| struct |
| { |
| uint32_t SkipModeEn : MOS_BITFIELD_BIT(0); |
| uint32_t AdaptiveEn : MOS_BITFIELD_BIT(1); |
| uint32_t BiMixDis : MOS_BITFIELD_BIT(2); |
| uint32_t : MOS_BITFIELD_RANGE(3, 4); |
| uint32_t EarlyImeSuccessEn : MOS_BITFIELD_BIT(5); |
| uint32_t : MOS_BITFIELD_BIT(6); |
| uint32_t T8x8FlagForInterEn : MOS_BITFIELD_BIT(7); |
| uint32_t : MOS_BITFIELD_RANGE(8, 23); |
| uint32_t EarlyImeStop : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW0; |
| |
| // DW1 |
| union |
| { |
| struct |
| { |
| uint32_t MaxNumMVs : MOS_BITFIELD_RANGE(0, 5); |
| uint32_t : MOS_BITFIELD_RANGE(6, 15); |
| uint32_t BiWeight : MOS_BITFIELD_RANGE(16, 21); |
| uint32_t : MOS_BITFIELD_RANGE(22, 27); |
| uint32_t UniMixDisable : MOS_BITFIELD_BIT(28); |
| uint32_t : MOS_BITFIELD_RANGE(29, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW1; |
| |
| // DW2 |
| union |
| { |
| struct |
| { |
| uint32_t MaxLenSP : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t MaxNumSU : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW2; |
| |
| // DW3 |
| union |
| { |
| struct |
| { |
| uint32_t SrcSize : MOS_BITFIELD_RANGE(0, 1); |
| uint32_t : MOS_BITFIELD_RANGE(2, 3); |
| uint32_t MbTypeRemap : MOS_BITFIELD_RANGE(4, 5); |
| uint32_t SrcAccess : MOS_BITFIELD_BIT(6); |
| uint32_t RefAccess : MOS_BITFIELD_BIT(7); |
| uint32_t SearchCtrl : MOS_BITFIELD_RANGE(8, 10); |
| uint32_t DualSearchPathOption : MOS_BITFIELD_BIT(11); |
| uint32_t SubPelMode : MOS_BITFIELD_RANGE(12, 13); |
| uint32_t SkipType : MOS_BITFIELD_BIT(14); |
| uint32_t DisableFieldCacheAlloc : MOS_BITFIELD_BIT(15); |
| uint32_t InterChromaMode : MOS_BITFIELD_BIT(16); |
| uint32_t FTEnable : MOS_BITFIELD_BIT(17); |
| uint32_t BMEDisableFBR : MOS_BITFIELD_BIT(18); |
| uint32_t BlockBasedSkipEnable : MOS_BITFIELD_BIT(19); |
| uint32_t InterSAD : MOS_BITFIELD_RANGE(20, 21); |
| uint32_t IntraSAD : MOS_BITFIELD_RANGE(22, 23); |
| uint32_t SubMbPartMask : MOS_BITFIELD_RANGE(24, 30); |
| uint32_t : MOS_BITFIELD_BIT(31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW3; |
| |
| // DW4 |
| union |
| { |
| struct |
| { |
| uint32_t : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t PictureHeightMinus1 : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t PictureWidth : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t: MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW4; |
| |
| // DW5 |
| union |
| { |
| struct |
| { |
| uint32_t : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t QpPrimeY : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t RefWidth : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t RefHeight : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW5; |
| |
| // DW6 |
| union |
| { |
| struct |
| { |
| uint32_t : MOS_BITFIELD_BIT(0); |
| uint32_t InputStreamInEn : MOS_BITFIELD_BIT(1); |
| uint32_t LCUSize : MOS_BITFIELD_BIT(2); |
| uint32_t WriteDistortions : MOS_BITFIELD_BIT(3); |
| uint32_t UseMvFromPrevStep : MOS_BITFIELD_BIT(4); |
| uint32_t : MOS_BITFIELD_RANGE(5, 7); |
| uint32_t SuperCombineDist : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t MaxVmvR : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW6; |
| |
| // DW7 |
| union |
| { |
| struct |
| { |
| uint32_t : MOS_BITFIELD_RANGE(0, 15); |
| uint32_t MVCostScaleFactor : MOS_BITFIELD_RANGE(16, 17); |
| uint32_t BilinearEnable : MOS_BITFIELD_BIT(18); |
| uint32_t SrcFieldPolarity : MOS_BITFIELD_BIT(19); |
| uint32_t WeightedSADHAAR : MOS_BITFIELD_BIT(20); |
| uint32_t AConlyHAAR : MOS_BITFIELD_BIT(21); |
| uint32_t RefIDCostMode : MOS_BITFIELD_BIT(22); |
| uint32_t : MOS_BITFIELD_BIT(23); |
| uint32_t SkipCenterMask : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW7; |
| |
| // DW8 |
| union |
| { |
| struct |
| { |
| uint32_t Mode0Cost : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t Mode1Cost : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t Mode2Cost : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t Mode3Cost : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW8; |
| |
| // DW9 |
| union |
| { |
| struct |
| { |
| uint32_t Mode4Cost : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t Mode5Cost : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t Mode6Cost : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t Mode7Cost : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW9; |
| |
| // DW10 |
| union |
| { |
| struct |
| { |
| uint32_t Mode8Cost : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t Mode9Cost : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t RefIDCost : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t ChromaIntraModeCost : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW10; |
| |
| // DW11 |
| union |
| { |
| struct |
| { |
| uint32_t MV0Cost : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t MV1Cost : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t MV2Cost : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t MV3Cost : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW11; |
| |
| // DW12 |
| union |
| { |
| struct |
| { |
| uint32_t MV4Cost : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t MV5Cost : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t MV6Cost : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t MV7Cost : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW12; |
| |
| // DW13 |
| union |
| { |
| struct |
| { |
| uint32_t NumRefIdxL0MinusOne : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t NumRefIdxL1MinusOne : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t RefStreaminCost : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t ROIEnable : MOS_BITFIELD_RANGE(24, 26); |
| uint32_t : MOS_BITFIELD_RANGE(27, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW13; |
| |
| // DW14 |
| union |
| { |
| struct |
| { |
| uint32_t List0RefID0FieldParity : MOS_BITFIELD_BIT(0); |
| uint32_t List0RefID1FieldParity : MOS_BITFIELD_BIT(1); |
| uint32_t List0RefID2FieldParity : MOS_BITFIELD_BIT(2); |
| uint32_t List0RefID3FieldParity : MOS_BITFIELD_BIT(3); |
| uint32_t List0RefID4FieldParity : MOS_BITFIELD_BIT(4); |
| uint32_t List0RefID5FieldParity : MOS_BITFIELD_BIT(5); |
| uint32_t List0RefID6FieldParity : MOS_BITFIELD_BIT(6); |
| uint32_t List0RefID7FieldParity : MOS_BITFIELD_BIT(7); |
| uint32_t List1RefID0FieldParity : MOS_BITFIELD_BIT(8); |
| uint32_t List1RefID1FieldParity : MOS_BITFIELD_BIT(9); |
| uint32_t : MOS_BITFIELD_RANGE(10, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW14; |
| |
| // DW15 |
| union |
| { |
| struct |
| { |
| uint32_t PrevMvReadPosFactor : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t MvShiftFactor : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t Reserved : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW15; |
| |
| struct |
| { |
| // DW16 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_0; |
| SearchPathDelta SPDelta_1; |
| SearchPathDelta SPDelta_2; |
| SearchPathDelta SPDelta_3; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW16; |
| |
| // DW17 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_4; |
| SearchPathDelta SPDelta_5; |
| SearchPathDelta SPDelta_6; |
| SearchPathDelta SPDelta_7; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW17; |
| |
| // DW18 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_8; |
| SearchPathDelta SPDelta_9; |
| SearchPathDelta SPDelta_10; |
| SearchPathDelta SPDelta_11; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW18; |
| |
| // DW19 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_12; |
| SearchPathDelta SPDelta_13; |
| SearchPathDelta SPDelta_14; |
| SearchPathDelta SPDelta_15; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW19; |
| |
| // DW20 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_16; |
| SearchPathDelta SPDelta_17; |
| SearchPathDelta SPDelta_18; |
| SearchPathDelta SPDelta_19; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW20; |
| |
| // DW21 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_20; |
| SearchPathDelta SPDelta_21; |
| SearchPathDelta SPDelta_22; |
| SearchPathDelta SPDelta_23; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW21; |
| |
| // DW22 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_24; |
| SearchPathDelta SPDelta_25; |
| SearchPathDelta SPDelta_26; |
| SearchPathDelta SPDelta_27; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW22; |
| |
| // DW23 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_28; |
| SearchPathDelta SPDelta_29; |
| SearchPathDelta SPDelta_30; |
| SearchPathDelta SPDelta_31; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW23; |
| |
| // DW24 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_32; |
| SearchPathDelta SPDelta_33; |
| SearchPathDelta SPDelta_34; |
| SearchPathDelta SPDelta_35; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW24; |
| |
| // DW25 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_36; |
| SearchPathDelta SPDelta_37; |
| SearchPathDelta SPDelta_38; |
| SearchPathDelta SPDelta_39; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW25; |
| |
| // DW26 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_40; |
| SearchPathDelta SPDelta_41; |
| SearchPathDelta SPDelta_42; |
| SearchPathDelta SPDelta_43; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW26; |
| |
| // DW27 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_44; |
| SearchPathDelta SPDelta_45; |
| SearchPathDelta SPDelta_46; |
| SearchPathDelta SPDelta_47; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW27; |
| |
| // DW28 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_48; |
| SearchPathDelta SPDelta_49; |
| SearchPathDelta SPDelta_50; |
| SearchPathDelta SPDelta_51; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW28; |
| |
| // DW29 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_52; |
| SearchPathDelta SPDelta_53; |
| SearchPathDelta SPDelta_54; |
| SearchPathDelta SPDelta_55; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW29; |
| } SPDelta; |
| |
| // DW30 |
| union |
| { |
| struct |
| { |
| uint32_t ActualMBWidth : MOS_BITFIELD_RANGE(0, 15); |
| uint32_t ActualMBHeight : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW30; |
| |
| // DW31 |
| union |
| { |
| struct |
| { |
| uint32_t RoiCtrl : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t MaxTuSize : MOS_BITFIELD_RANGE(8, 9); |
| uint32_t MaxCuSize : MOS_BITFIELD_RANGE(10, 11); |
| uint32_t NumImePredictors : MOS_BITFIELD_RANGE(12, 15); |
| uint32_t Reserved : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t PuTypeCtrl : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW31; |
| |
| // DW32 |
| union |
| { |
| struct |
| { |
| uint32_t ForceMvx0 : MOS_BITFIELD_RANGE(0, 15); |
| uint32_t ForceMvy0 : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW32; |
| |
| // DW33 |
| union |
| { |
| struct |
| { |
| uint32_t ForceMvx1 : MOS_BITFIELD_RANGE(0, 15); |
| uint32_t ForceMvy1 : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW33; |
| |
| // DW34 |
| union |
| { |
| struct |
| { |
| uint32_t ForceMvx2 : MOS_BITFIELD_RANGE(0, 15); |
| uint32_t ForceMvy2 : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW34; |
| |
| // DW35 |
| union |
| { |
| struct |
| { |
| uint32_t ForceMvx3 : MOS_BITFIELD_RANGE(0, 15); |
| uint32_t ForceMvy3 : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW35; |
| |
| // DW36 |
| union |
| { |
| struct |
| { |
| uint32_t ForceRefIdx0 : MOS_BITFIELD_RANGE(0, 3); |
| uint32_t ForceRefIdx1 : MOS_BITFIELD_RANGE(4, 7); |
| uint32_t ForceRefIdx2 : MOS_BITFIELD_RANGE(8, 11); |
| uint32_t ForceRefIdx3 : MOS_BITFIELD_RANGE(12, 15); |
| uint32_t NumMergeCandCu8x8 : MOS_BITFIELD_RANGE(16, 19); |
| uint32_t NumMergeCandCu16x16 : MOS_BITFIELD_RANGE(20, 23); |
| uint32_t NumMergeCandCu32x32 : MOS_BITFIELD_RANGE(24, 27); |
| uint32_t NumMergeCandCu64x64 : MOS_BITFIELD_RANGE(28, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW36; |
| |
| // DW37 |
| union |
| { |
| struct |
| { |
| uint32_t SegID : MOS_BITFIELD_RANGE(0, 15); |
| uint32_t QpEnable : MOS_BITFIELD_RANGE(16, 19); |
| uint32_t SegIDEnable : MOS_BITFIELD_BIT(20); |
| uint32_t Reserved : MOS_BITFIELD_RANGE(21, 22); |
| uint32_t ForceRefIdEnable : MOS_BITFIELD_BIT(23); |
| uint32_t Reserved1 : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW37; |
| |
| // DW38 |
| union |
| { |
| struct |
| { |
| uint32_t ForceQp0 : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t ForceQp1 : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t ForceQp2 : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t ForceQp3 : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW38; |
| |
| // DW39 |
| union |
| { |
| struct |
| { |
| uint32_t Reserved : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW39; |
| |
| // DW40 |
| union |
| { |
| struct |
| { |
| uint32_t _4xMeMvOutputDataSurfIndex : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW40; |
| |
| // DW41 |
| union |
| { |
| struct |
| { |
| uint32_t _16xOr32xMeMvInputDataSurfIndex : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW41; |
| |
| // DW42 |
| union |
| { |
| struct |
| { |
| uint32_t _4xMeOutputDistSurfIndex : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW42; |
| |
| // DW43 |
| union |
| { |
| struct |
| { |
| uint32_t _4xMeOutputBrcDistSurfIndex : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW43; |
| |
| // DW44 |
| union |
| { |
| struct |
| { |
| uint32_t VMEFwdInterPredictionSurfIndex : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW44; |
| |
| // DW45 |
| union |
| { |
| struct |
| { |
| uint32_t VMEBwdInterPredictionSurfIndex : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW45; |
| |
| // DW46 |
| union |
| { |
| struct |
| { |
| uint32_t VDEncStreamInOutputSurfIndex : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW46; |
| |
| // DW47 |
| union |
| { |
| struct |
| { |
| uint32_t VDEncStreamInInputSurfIndex : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW47; |
| }; |
| C_ASSERT(MOS_BYTES_TO_DWORDS(sizeof(MEDIA_OBJECT_HEVC_VP9_VDENC_ME_CURBE_G12)) == 48); |
| |
| struct CODECHAL_VDENC_HEVC_ME_CURBE_G12 |
| { |
| // DW0 |
| union |
| { |
| struct |
| { |
| uint32_t SkipModeEn : MOS_BITFIELD_BIT(0); |
| uint32_t AdaptiveEn : MOS_BITFIELD_BIT(1); |
| uint32_t BiMixDis : MOS_BITFIELD_BIT(2); |
| uint32_t : MOS_BITFIELD_RANGE(3, 4); |
| uint32_t EarlyImeSuccessEn : MOS_BITFIELD_BIT(5); |
| uint32_t : MOS_BITFIELD_BIT(6); |
| uint32_t T8x8FlagForInterEn : MOS_BITFIELD_BIT(7); |
| uint32_t : MOS_BITFIELD_RANGE(8, 23); |
| uint32_t EarlyImeStop : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW0; |
| |
| // DW1 |
| union |
| { |
| struct |
| { |
| uint32_t MaxNumMVs : MOS_BITFIELD_RANGE(0, 5); |
| uint32_t : MOS_BITFIELD_RANGE(6, 15); |
| uint32_t BiWeight : MOS_BITFIELD_RANGE(16, 21); |
| uint32_t : MOS_BITFIELD_RANGE(22, 27); |
| uint32_t UniMixDisable : MOS_BITFIELD_BIT(28); |
| uint32_t : MOS_BITFIELD_RANGE(29, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW1; |
| |
| // DW2 |
| union |
| { |
| struct |
| { |
| uint32_t MaxLenSP : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t MaxNumSU : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW2; |
| |
| // DW3 |
| union |
| { |
| struct |
| { |
| uint32_t SrcSize : MOS_BITFIELD_RANGE(0, 1); |
| uint32_t : MOS_BITFIELD_RANGE(2, 3); |
| uint32_t MbTypeRemap : MOS_BITFIELD_RANGE(4, 5); |
| uint32_t SrcAccess : MOS_BITFIELD_BIT(6); |
| uint32_t RefAccess : MOS_BITFIELD_BIT(7); |
| uint32_t SearchCtrl : MOS_BITFIELD_RANGE(8, 10); |
| uint32_t DualSearchPathOption : MOS_BITFIELD_BIT(11); |
| uint32_t SubPelMode : MOS_BITFIELD_RANGE(12, 13); |
| uint32_t SkipType : MOS_BITFIELD_BIT(14); |
| uint32_t DisableFieldCacheAlloc : MOS_BITFIELD_BIT(15); |
| uint32_t InterChromaMode : MOS_BITFIELD_BIT(16); |
| uint32_t FTEnable : MOS_BITFIELD_BIT(17); |
| uint32_t BMEDisableFBR : MOS_BITFIELD_BIT(18); |
| uint32_t BlockBasedSkipEnable : MOS_BITFIELD_BIT(19); |
| uint32_t InterSAD : MOS_BITFIELD_RANGE(20, 21); |
| uint32_t IntraSAD : MOS_BITFIELD_RANGE(22, 23); |
| uint32_t SubMbPartMask : MOS_BITFIELD_RANGE(24, 30); |
| uint32_t : MOS_BITFIELD_BIT(31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW3; |
| |
| // DW4 |
| union |
| { |
| struct |
| { |
| uint32_t : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t PictureHeightMinus1 : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t PictureWidth : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW4; |
| |
| // DW5 |
| union |
| { |
| struct |
| { |
| uint32_t : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t QpPrimeY : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t RefWidth : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t RefHeight : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW5; |
| |
| // DW6 |
| union |
| { |
| struct |
| { |
| uint32_t : MOS_BITFIELD_BIT(0); |
| uint32_t InputStreamInEn : MOS_BITFIELD_BIT(1); |
| uint32_t LCUSize : MOS_BITFIELD_BIT(2); |
| uint32_t WriteDistortions : MOS_BITFIELD_BIT(3); |
| uint32_t UseMvFromPrevStep : MOS_BITFIELD_BIT(4); |
| uint32_t : MOS_BITFIELD_RANGE(5, 7); |
| uint32_t SuperCombineDist : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t MaxVmvR : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW6; |
| |
| // DW7 |
| union |
| { |
| struct |
| { |
| uint32_t : MOS_BITFIELD_RANGE(0, 15); |
| uint32_t MVCostScaleFactor : MOS_BITFIELD_RANGE(16, 17); |
| uint32_t BilinearEnable : MOS_BITFIELD_BIT(18); |
| uint32_t SrcFieldPolarity : MOS_BITFIELD_BIT(19); |
| uint32_t WeightedSADHAAR : MOS_BITFIELD_BIT(20); |
| uint32_t AConlyHAAR : MOS_BITFIELD_BIT(21); |
| uint32_t RefIDCostMode : MOS_BITFIELD_BIT(22); |
| uint32_t : MOS_BITFIELD_BIT(23); |
| uint32_t SkipCenterMask : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW7; |
| |
| // DW8 |
| union |
| { |
| struct |
| { |
| uint32_t Mode0Cost : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t Mode1Cost : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t Mode2Cost : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t Mode3Cost : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW8; |
| |
| // DW9 |
| union |
| { |
| struct |
| { |
| uint32_t Mode4Cost : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t Mode5Cost : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t Mode6Cost : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t Mode7Cost : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW9; |
| |
| // DW10 |
| union |
| { |
| struct |
| { |
| uint32_t Mode8Cost : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t Mode9Cost : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t RefIDCost : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t ChromaIntraModeCost : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW10; |
| |
| // DW11 |
| union |
| { |
| struct |
| { |
| uint32_t MV0Cost : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t MV1Cost : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t MV2Cost : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t MV3Cost : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW11; |
| |
| // DW12 |
| union |
| { |
| struct |
| { |
| uint32_t MV4Cost : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t MV5Cost : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t MV6Cost : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t MV7Cost : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW12; |
| |
| // DW13 |
| union |
| { |
| struct |
| { |
| uint32_t NumRefIdxL0MinusOne : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t NumRefIdxL1MinusOne : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t RefStreaminCost : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t ROIEnable : MOS_BITFIELD_RANGE(24, 26); |
| uint32_t : MOS_BITFIELD_RANGE(27, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW13; |
| |
| // DW14 |
| union |
| { |
| struct |
| { |
| uint32_t List0RefID0FieldParity : MOS_BITFIELD_BIT(0); |
| uint32_t List0RefID1FieldParity : MOS_BITFIELD_BIT(1); |
| uint32_t List0RefID2FieldParity : MOS_BITFIELD_BIT(2); |
| uint32_t List0RefID3FieldParity : MOS_BITFIELD_BIT(3); |
| uint32_t List0RefID4FieldParity : MOS_BITFIELD_BIT(4); |
| uint32_t List0RefID5FieldParity : MOS_BITFIELD_BIT(5); |
| uint32_t List0RefID6FieldParity : MOS_BITFIELD_BIT(6); |
| uint32_t List0RefID7FieldParity : MOS_BITFIELD_BIT(7); |
| uint32_t List1RefID0FieldParity : MOS_BITFIELD_BIT(8); |
| uint32_t List1RefID1FieldParity : MOS_BITFIELD_BIT(9); |
| uint32_t : MOS_BITFIELD_RANGE(10, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW14; |
| |
| // DW15 |
| union |
| { |
| struct |
| { |
| uint32_t PrevMvReadPosFactor : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t MvShiftFactor : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t Reserved : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW15; |
| |
| struct |
| { |
| // DW16 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_0; |
| SearchPathDelta SPDelta_1; |
| SearchPathDelta SPDelta_2; |
| SearchPathDelta SPDelta_3; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW16; |
| |
| // DW17 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_4; |
| SearchPathDelta SPDelta_5; |
| SearchPathDelta SPDelta_6; |
| SearchPathDelta SPDelta_7; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW17; |
| |
| // DW18 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_8; |
| SearchPathDelta SPDelta_9; |
| SearchPathDelta SPDelta_10; |
| SearchPathDelta SPDelta_11; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW18; |
| |
| // DW19 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_12; |
| SearchPathDelta SPDelta_13; |
| SearchPathDelta SPDelta_14; |
| SearchPathDelta SPDelta_15; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW19; |
| |
| // DW20 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_16; |
| SearchPathDelta SPDelta_17; |
| SearchPathDelta SPDelta_18; |
| SearchPathDelta SPDelta_19; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW20; |
| |
| // DW21 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_20; |
| SearchPathDelta SPDelta_21; |
| SearchPathDelta SPDelta_22; |
| SearchPathDelta SPDelta_23; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW21; |
| |
| // DW22 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_24; |
| SearchPathDelta SPDelta_25; |
| SearchPathDelta SPDelta_26; |
| SearchPathDelta SPDelta_27; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW22; |
| |
| // DW23 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_28; |
| SearchPathDelta SPDelta_29; |
| SearchPathDelta SPDelta_30; |
| SearchPathDelta SPDelta_31; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW23; |
| |
| // DW24 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_32; |
| SearchPathDelta SPDelta_33; |
| SearchPathDelta SPDelta_34; |
| SearchPathDelta SPDelta_35; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW24; |
| |
| // DW25 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_36; |
| SearchPathDelta SPDelta_37; |
| SearchPathDelta SPDelta_38; |
| SearchPathDelta SPDelta_39; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW25; |
| |
| // DW26 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_40; |
| SearchPathDelta SPDelta_41; |
| SearchPathDelta SPDelta_42; |
| SearchPathDelta SPDelta_43; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW26; |
| |
| // DW27 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_44; |
| SearchPathDelta SPDelta_45; |
| SearchPathDelta SPDelta_46; |
| SearchPathDelta SPDelta_47; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW27; |
| |
| // DW28 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_48; |
| SearchPathDelta SPDelta_49; |
| SearchPathDelta SPDelta_50; |
| SearchPathDelta SPDelta_51; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW28; |
| |
| // DW29 |
| union |
| { |
| struct |
| { |
| SearchPathDelta SPDelta_52; |
| SearchPathDelta SPDelta_53; |
| SearchPathDelta SPDelta_54; |
| SearchPathDelta SPDelta_55; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW29; |
| } SPDelta; |
| |
| // DW30 |
| union |
| { |
| struct |
| { |
| uint32_t ActualMBWidth : MOS_BITFIELD_RANGE(0, 15); |
| uint32_t ActualMBHeight : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW30; |
| |
| // DW31 |
| union |
| { |
| struct |
| { |
| uint32_t RoiCtrl : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t MaxTuSize : MOS_BITFIELD_RANGE(8, 9); |
| uint32_t MaxCuSize : MOS_BITFIELD_RANGE(10, 11); |
| uint32_t NumImePredictors : MOS_BITFIELD_RANGE(12, 15); |
| uint32_t Reserved : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t PuTypeCtrl : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW31; |
| |
| // DW32 |
| union |
| { |
| struct |
| { |
| uint32_t ForceMvx0 : MOS_BITFIELD_RANGE(0, 15); |
| uint32_t ForceMvy0 : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW32; |
| |
| // DW33 |
| union |
| { |
| struct |
| { |
| uint32_t ForceMvx1 : MOS_BITFIELD_RANGE(0, 15); |
| uint32_t ForceMvy1 : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW33; |
| |
| // DW34 |
| union |
| { |
| struct |
| { |
| uint32_t ForceMvx2 : MOS_BITFIELD_RANGE(0, 15); |
| uint32_t ForceMvy2 : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW34; |
| |
| // DW35 |
| union |
| { |
| struct |
| { |
| uint32_t ForceMvx3 : MOS_BITFIELD_RANGE(0, 15); |
| uint32_t ForceMvy3 : MOS_BITFIELD_RANGE(16, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW35; |
| |
| // DW36 |
| union |
| { |
| struct |
| { |
| uint32_t ForceRefIdx0 : MOS_BITFIELD_RANGE(0, 3); |
| uint32_t ForceRefIdx1 : MOS_BITFIELD_RANGE(4, 7); |
| uint32_t ForceRefIdx2 : MOS_BITFIELD_RANGE(8, 11); |
| uint32_t ForceRefIdx3 : MOS_BITFIELD_RANGE(12, 15); |
| uint32_t NumMergeCandCu8x8 : MOS_BITFIELD_RANGE(16, 19); |
| uint32_t NumMergeCandCu16x16 : MOS_BITFIELD_RANGE(20, 23); |
| uint32_t NumMergeCandCu32x32 : MOS_BITFIELD_RANGE(24, 27); |
| uint32_t NumMergeCandCu64x64 : MOS_BITFIELD_RANGE(28, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW36; |
| |
| // DW37 |
| union |
| { |
| struct |
| { |
| uint32_t SegID : MOS_BITFIELD_RANGE(0, 15); |
| uint32_t QpEnable : MOS_BITFIELD_RANGE(16, 19); |
| uint32_t SegIDEnable : MOS_BITFIELD_BIT(20); |
| uint32_t Reserved : MOS_BITFIELD_RANGE(21, 22); |
| uint32_t ForceRefIdEnable : MOS_BITFIELD_BIT(23); |
| uint32_t Reserved1 : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW37; |
| |
| // DW38 |
| union |
| { |
| struct |
| { |
| uint32_t ForceQp0 : MOS_BITFIELD_RANGE(0, 7); |
| uint32_t ForceQp1 : MOS_BITFIELD_RANGE(8, 15); |
| uint32_t ForceQp2 : MOS_BITFIELD_RANGE(16, 23); |
| uint32_t ForceQp3 : MOS_BITFIELD_RANGE(24, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW38; |
| |
| // DW39 |
| union |
| { |
| struct |
| { |
| uint32_t Reserved : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW39; |
| |
| // DW40 |
| union |
| { |
| struct |
| { |
| uint32_t _4xMeMvOutputDataSurfIndex : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW40; |
| |
| // DW41 |
| union |
| { |
| struct |
| { |
| uint32_t _16xOr32xMeMvInputDataSurfIndex : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW41; |
| |
| // DW42 |
| union |
| { |
| struct |
| { |
| uint32_t _4xMeOutputDistSurfIndex : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW42; |
| |
| // DW43 |
| union |
| { |
| struct |
| { |
| uint32_t _4xMeOutputBrcDistSurfIndex : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW43; |
| |
| // DW44 |
| union |
| { |
| struct |
| { |
| uint32_t VMEFwdInterPredictionSurfIndex : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW44; |
| |
| // DW45 |
| union |
| { |
| struct |
| { |
| uint32_t VMEBwdInterPredictionSurfIndex : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW45; |
| |
| // DW46 |
| union |
| { |
| struct |
| { |
| uint32_t VDEncStreamInOutputSurfIndex : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW46; |
| |
| // DW47 |
| union |
| { |
| struct |
| { |
| uint32_t VDEncStreamInInputSurfIndex : MOS_BITFIELD_RANGE(0, 31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW47; |
| }; |
| C_ASSERT(MOS_BYTES_TO_DWORDS(sizeof(CODECHAL_VDENC_HEVC_ME_CURBE_G12)) == 48); |
| |
| using PCODECHAL_VDENC_HEVC_ME_CURBE_G12 = CODECHAL_VDENC_HEVC_ME_CURBE_G12 * ; |
| |
| //! HEVC VDEnc encoder class for GEN12 |
| /*! |
| This class defines the member fields, functions for GEN12 platform |
| */ |
| class CodechalVdencHevcStateG12 : public CodechalVdencHevcState |
| { |
| public: |
| static const uint32_t m_minScaledSurfaceSize = 64; //!< Minimum scaled surface size |
| static const uint32_t m_brcPakStatsBufSize = 512; //!< Pak statistic buffer size |
| static const uint32_t m_brcStatsBufSize = 1216; //!< BRC Statistic buf size: 48DWs (3CLs) of HMDC Frame Stats + 256 DWs (16CLs) of Histogram Stats = 1216 bytes |
| static const uint32_t m_brcConstantSurfaceWidth = 64; //!< BRC constant surface width |
| static const uint32_t m_brcConstantSurfaceHeight = 35; //!< BRC constant surface height |
| static const uint32_t m_brcHistoryBufSize = 2304; //!< BRC history buffer size |
| static const uint32_t m_bframeMeBidirectionalWeight = 32; //!< B frame bidirection weight |
| |
| // HuC tables. |
| // These Values are diff for each Gen |
| static const int8_t m_devThreshPB0[8]; |
| static const int8_t m_lowDelayDevThreshPB0[8]; |
| static const int8_t m_devThreshVBR0[8]; |
| static const int8_t m_lowDelayDevThreshVBR0[8]; |
| static const int8_t m_devThreshI0[8]; |
| static const int8_t m_lowDelayDevThreshI0[8]; |
| static const uint32_t m_hucConstantData[]; |
| |
| static constexpr uint32_t m_numDevThreshlds = 8; |
| static constexpr double m_devStdFPS = 30.0; |
| static constexpr double m_bpsRatioLow = 0.1; |
| static constexpr double m_bpsRatioHigh = 3.5; |
| static constexpr int32_t m_postMultPB = 50; |
| static constexpr int32_t m_negMultPB = -50; |
| static constexpr int32_t m_posMultVBR = 100; |
| static constexpr int32_t m_negMultVBR = -50; |
| static constexpr uint32_t m_vdboxHucHevcLaAnalysisKernelDescriptor = 17; //!< Huc lookahead analysis kernel descriptor |
| |
| static const double m_devThreshIFPNEG[m_numDevThreshlds / 2]; |
| static const double m_devThreshIFPPOS[m_numDevThreshlds / 2]; |
| static const double m_devThreshPBFPNEG[m_numDevThreshlds / 2]; |
| static const double m_devThreshPBFPPOS[m_numDevThreshlds / 2]; |
| static const double m_devThreshVBRNEG[m_numDevThreshlds / 2]; |
| static const double m_devThreshVBRPOS[m_numDevThreshlds / 2]; |
| static const int8_t m_lowdelayDevThreshPB[m_numDevThreshlds]; |
| static const int8_t m_lowdelayDevThreshVBR[m_numDevThreshlds]; |
| static const int8_t m_lowdelayDevThreshI[m_numDevThreshlds]; |
| static const int8_t m_lowdelayDeltaFrmszI[][8]; |
| static const int8_t m_lowdelayDeltaFrmszP[][8]; |
| static const int8_t m_lowdelayDeltaFrmszB[][8]; |
| |
| // VDENC Display interface related |
| bool m_enableTileReplay = false; //!< TileReplay Enable |
| uint8_t m_tileRowPass = 0; //!< Current tile row pass |
| |
| struct CODECHAL_HEVC_VIRTUAL_ENGINE_OVERRIDE |
| { |
| union { |
| uint8_t VdBox[MOS_MAX_ENGINE_INSTANCE_PER_CLASS]; |
| uint64_t Value; |
| }; |
| }; |
| |
| PMHW_VDBOX_HCP_TILE_CODING_PARAMS_G12 m_tileParams[CODECHAL_NUM_UNCOMPRESSED_SURFACE_HEVC]; //!< Pointer to the Tile params |
| |
| // GEN12 specific resources |
| MOS_RESOURCE m_vdencTileRowStoreBuffer; //!< Tile row store buffer |
| MOS_RESOURCE m_vdencCumulativeCuCountStreamoutSurface = {}; //!< Cumulative CU Count Streamout Surface |
| MOS_RESOURCE m_vdencPaletteModeStreamOutBuffer = {}; //!< Palette mode stream out buffer |
| MOS_RESOURCE m_vdencSAORowStoreBuffer; //!< SAO RowStore buffer |
| MOS_RESOURCE m_resHwCountTileReplay = {}; //!< Tile based HW Counter buffer |
| |
| bool m_enableTileStitchByHW = false; //!< Enable HW to stitch commands in scalable mode |
| bool m_enableHWSemaphore = false; //!< Enable HW semaphore |
| bool m_enableVdBoxHWSemaphore = false; //!< Enable VDBOX HW semaphore |
| |
| unsigned char m_slotForRecNotFiltered = 0; //!< Slot for not filtered reconstructed surface |
| |
| // 3rd Level Batch buffer |
| uint32_t m_thirdLBSize = 0; //!< Size of the 3rd level batch buffer |
| MHW_BATCH_BUFFER m_thirdLevelBatchBuffer; //!< 3rd level batch buffer |
| |
| // Tile level batch buffer |
| uint32_t m_tileLevelBatchSize = 0; //!< Size of the 2rd level batch buffer for each tile |
| uint32_t m_numTileBatchAllocated = 0; //!< The number of allocated batch buffer for tiles |
| PMHW_BATCH_BUFFER m_tileLevelBatchBuffer[CODECHAL_VDENC_BRC_NUM_OF_PASSES]; //!< Tile level batch buffer for each tile |
| |
| // scalability |
| unsigned char m_numPipe = 1; //!< Number of pipes |
| unsigned char m_numPipePre = 1; //!< Number of pipes of previous frame |
| unsigned char m_numPassesInOnePipe = 1; //!< Number of PAK passes in one pipe |
| CODECHAL_ENCODE_BUFFER m_resPakSliceLevelStreamoutData; //!< Surface for slice level stream out data from PAK |
| CODECHAL_HEVC_VIRTUAL_ENGINE_OVERRIDE m_kmdVeOveride; //!< KMD override virtual engine index |
| uint32_t m_numTiles = 1; //!< Number of tiles |
| uint32_t m_numLcu = 1; //!< LCU number |
| CODECHAL_ENCODE_BUFFER m_resHcpScalabilitySyncBuffer; //!< Hcp sync buffer for scalability |
| CODECHAL_ENCODE_BUFFER m_resTileBasedStatisticsBuffer[CODECHAL_NUM_UNCOMPRESSED_SURFACE_HEVC]; |
| CODECHAL_ENCODE_BUFFER m_resHuCPakAggregatedFrameStatsBuffer; |
| CODECHAL_ENCODE_BUFFER m_tileRecordBuffer[CODECHAL_NUM_UNCOMPRESSED_SURFACE_HEVC]; |
| MOS_RESOURCE m_resHucPakStitchDmemBuffer[CODECHAL_ENCODE_RECYCLED_BUFFER_NUM][CODECHAL_VDENC_BRC_NUM_OF_PASSES]; //!< HuC Pak Integration Dmem data for each pass |
| MOS_RESOURCE m_resBrcDataBuffer; //!< Resource of bitrate control data buffer |
| HEVC_TILE_STATS_INFO m_hevcTileStatsOffset = {}; //!< Page aligned offsets used to program HCP / VDEnc pipe and HuC PAK Integration kernel input |
| HEVC_TILE_STATS_INFO m_hevcFrameStatsOffset = {}; //!< Page aligned offsets used to program HuC PAK Integration kernel output, HuC BRC kernel input |
| HEVC_TILE_STATS_INFO m_hevcStatsSize = {}; //!< HEVC Statistics size |
| bool m_enableTestMediaReset = 0; //!< enable media reset test. driver will send cmd to make hang happens |
| bool m_forceScalability = false; //!< force scalability for resolution < 4K/5K if other checking for scalability passed |
| |
| // HuC PAK stitch kernel |
| MOS_RESOURCE m_resHucStitchDataBuffer[CODECHAL_ENCODE_RECYCLED_BUFFER_NUM][CODECHAL_HEVC_MAX_NUM_BRC_PASSES]; // data buffer for huc input cmd generation |
| MHW_BATCH_BUFFER m_HucStitchCmdBatchBuffer = {}; //!< SLB for huc stitch cmd |
| |
| // virtual engine |
| bool m_useVirtualEngine = false; //!< Virtual engine enable flag |
| MOS_COMMAND_BUFFER m_veBatchBuffer[CODECHAL_NUM_UNCOMPRESSED_SURFACE_HEVC][CODECHAL_HEVC_MAX_NUM_HCP_PIPE][CODECHAL_HEVC_MAX_NUM_BRC_PASSES]; //!< Virtual engine batch buffers |
| MOS_COMMAND_BUFFER m_realCmdBuffer; //!< Virtual engine command buffer |
| uint32_t m_sizeOfVeBatchBuffer = 0; //!< Virtual engine batch buffer size |
| CODECHAL_ENCODE_BUFFER m_resBrcSemaphoreMem[CODECHAL_HEVC_MAX_NUM_HCP_PIPE]; //!< BRC HW semaphore |
| CODECHAL_ENCODE_BUFFER m_resVdBoxSemaphoreMem[CODECHAL_HEVC_MAX_NUM_HCP_PIPE]; //!< VDBox HW semaphore |
| CODECHAL_ENCODE_BUFFER m_resBrcPakSemaphoreMem; //!< BRC PAK HW semaphore |
| MOS_RESOURCE m_resPipeStartSemaMem; //!< HW semaphore for scalability pipe start at the same time |
| |
| int32_t m_curPicSlot = -1; //!< Slot selected to store current Picutre data |
| uint32_t m_prevStoreData = 0; //!< Previous stored data |
| |
| uint32_t m_roundInterValue = 0; |
| uint32_t m_roundIntraValue = 0; |
| |
| // Information for entry/slot in the picture data |
| struct SlotInfo { |
| uint32_t age; |
| int32_t poc; |
| bool isUsed; |
| bool isRef; |
| } slotInfo[CODECHAL_ENCODE_HEVC_VDENC_WP_DATA_BLOCK_NUMBER] = { { 0, 0, false, false } }; |
| |
| //! |
| //! \brief Constructor |
| //! |
| CodechalVdencHevcStateG12(CodechalHwInterface* hwInterface, |
| CodechalDebugInterface* debugInterface, |
| PCODECHAL_STANDARD_INFO standardInfo); |
| |
| //! |
| //! \brief Destructor |
| //! |
| ~CodechalVdencHevcStateG12(); |
| |
| //! |
| //! \brief Help function to get current pipe |
| //! |
| //! \return Current pipe value |
| //! |
| int GetCurrentPipe() |
| { |
| if (m_numPipe <= 1) |
| { |
| return 0; |
| } |
| |
| return (int)(m_currPass) % (int)m_numPipe; |
| } |
| |
| //! |
| //! \brief Help function to get current PAK pass |
| //! |
| //! \return Current PAK pass |
| //! |
| int GetCurrentPass() override |
| { |
| if (m_numPipe <= 1) |
| { |
| return m_currPass; |
| } |
| |
| return (int)(m_currPass) / (int)m_numPipe; |
| } |
| |
| //! |
| //! \brief Help function to check if current pipe is first pipe |
| //! |
| //! \return True if current pipe is first pipe, otherwise return false |
| //! |
| bool IsFirstPipe() |
| { |
| return GetCurrentPipe() == 0 ? true : false; |
| } |
| |
| //! |
| //! \brief Help function to check if current pipe is last pipe |
| //! |
| //! \return True if current pipe is last pipe, otherwise return false |
| //! |
| bool IsLastPipe() |
| { |
| return GetCurrentPipe() == m_numPipe - 1 ? true : false; |
| } |
| |
| //! |
| //! \brief Help function to check if current PAK pass is first pass |
| //! |
| //! \return True if current PAK pass is first pass, otherwise return false |
| //! |
| bool IsFirstPass() override |
| { |
| return GetCurrentPass() == 0 ? true : false; |
| } |
| |
| //! |
| //! \brief Help function to check if current PAK pass is last pass |
| //! |
| //! \return True if current PAK pass is last pass, otherwise return false |
| //! |
| bool IsLastPass() override |
| { |
| return GetCurrentPass() == m_numPassesInOnePipe ? true : false; |
| } |
| |
| //! |
| //! \brief Help function to check if current PAK pass is first pass for tile replay |
| //! |
| //! \return True if current PAK pass is first pass, otherwise return false |
| //! |
| bool IsFirstPassForTileReplay() |
| { |
| return (m_tileRowPass == 0) ? true : false; |
| } |
| |
| //! |
| //! \brief Help function to check if current PAK pass is last pass for tile replay |
| //! |
| //! \return True if current PAK pass is last pass for tile replay, otherwise return false |
| //! |
| bool IsLastPassForTileReplay() |
| { |
| return (m_tileRowPass == m_NumPassesForTileReplay - 1) ? true : false; |
| } |
| |
| // inherited virtual functions |
| uint32_t GetMaxBtCount() override; |
| bool CheckSupportedFormat(PMOS_SURFACE surface) override; |
| void SetHcpSliceStateCommonParams(MHW_VDBOX_HEVC_SLICE_STATE& sliceStateParams) override; |
| void SetHcpPipeModeSelectParams(MHW_VDBOX_PIPE_MODE_SELECT_PARAMS& pipeModeSelectParams) override; |
| void SetHcpPipeBufAddrParams(MHW_VDBOX_PIPE_BUF_ADDR_PARAMS& pipeBufAddrParams) override; |
| void SetHcpPicStateParams(MHW_VDBOX_HEVC_PIC_STATE& picStateParams) override; |
| MOS_STATUS AddHcpRefIdxCmd(PMOS_COMMAND_BUFFER cmdBuffer, PMHW_BATCH_BUFFER batchBuffer, PMHW_VDBOX_HEVC_SLICE_STATE params) override; |
| void SetVdencPipeBufAddrParams(MHW_VDBOX_PIPE_BUF_ADDR_PARAMS& pipeBufAddrParams) override; |
| void SetVdencPipeModeSelectParams(MHW_VDBOX_PIPE_MODE_SELECT_PARAMS& pipeModeSelectParams) override; |
| MOS_STATUS Initialize(CodechalSetting * settings) override; |
| MOS_STATUS InitKernelState() override; |
| MOS_STATUS PlatformCapabilityCheck() override; |
| MOS_STATUS AllocatePakResources() override; |
| MOS_STATUS FreePakResources() override; |
| MOS_STATUS AllocateEncResources() override; |
| MOS_STATUS FreeEncResources() override; |
| MOS_STATUS AllocateBrcResources() override; |
| MOS_STATUS FreeBrcResources() override; |
| MOS_STATUS InitializePicture(const EncoderParams& params) override; |
| MOS_STATUS ValidateRefFrameData(PCODEC_HEVC_ENCODE_SLICE_PARAMS slcParams) override; |
| MOS_STATUS SetPictureStructs() override; |
| MOS_STATUS GetStatusReport(EncodeStatus* encodeStatus, EncodeStatusReport* encodeStatusReport) override; |
| MOS_STATUS UserFeatureKeyReport() override; |
| MOS_STATUS EncodeKernelFunctions() override; |
| MOS_STATUS ExecutePictureLevel() override; |
| MOS_STATUS ExecuteSliceLevel() override; |
| MOS_STATUS ConstructBatchBufferHuCBRC(PMOS_RESOURCE batchBuffer) override; |
| MOS_STATUS SetDmemHuCBrcInitReset() override; |
| MOS_STATUS SetConstDataHuCBrcUpdate() override; |
| MOS_STATUS SetDmemHuCBrcUpdate() override; |
| MOS_STATUS SetRegionsHuCBrcUpdate(PMHW_VDBOX_HUC_VIRTUAL_ADDR_PARAMS virtualAddrParams) override; |
| MOS_STATUS SetDmemHuCPakIntegrate(PMHW_VDBOX_HUC_DMEM_STATE_PARAMS dmemParams); |
| MOS_STATUS SetRegionsHuCPakIntegrate(PMHW_VDBOX_HUC_VIRTUAL_ADDR_PARAMS virtualAddrParams); |
| MOS_STATUS SetDmemHuCPakIntegrateStitch(PMHW_VDBOX_HUC_DMEM_STATE_PARAMS dmemParams); |
| MOS_STATUS SetRegionsHuCPakIntegrateStitch(PMHW_VDBOX_HUC_VIRTUAL_ADDR_PARAMS virtualAddrParams); |
| MOS_STATUS HucPakIntegrateStitch(PMOS_COMMAND_BUFFER cmdBuffer); |
| MOS_STATUS PrepareVDEncStreamInData() override; |
| MOS_STATUS SetGpuCtxCreatOption() override; |
| MOS_STATUS ReadSliceSize(PMOS_COMMAND_BUFFER cmdBuffer) override; |
| void GetTileInfo(uint32_t xPosition, uint32_t yPosition, uint32_t* tileId, uint32_t* tileEndLCUX, uint32_t* tileEndLCUY); |
| void SetStreaminDataPerRegion( |
| uint32_t streamInWidth, |
| uint32_t top, |
| uint32_t bottom, |
| uint32_t left, |
| uint32_t right, |
| PMHW_VDBOX_VDENC_STREAMIN_STATE_PARAMS streaminParams, |
| void* streaminData) override; |
| void SetBrcRoiDeltaQpMap( |
| uint32_t streamInWidth, |
| uint32_t top, |
| uint32_t bottom, |
| uint32_t left, |
| uint32_t right, |
| uint8_t regionId, |
| PDeltaQpForROI deltaQpMap) override; |
| |
| void CreateMhwParams() override; |
| |
| MOS_STATUS VerifyCommandBufferSize() override; |
| |
| MOS_STATUS GetCommandBuffer(PMOS_COMMAND_BUFFER cmdBuffer) override; |
| |
| MOS_STATUS ReturnCommandBuffer(PMOS_COMMAND_BUFFER cmdBuffer) override; |
| |
| MOS_STATUS SubmitCommandBuffer( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| bool nullRendering) override; |
| |
| MOS_STATUS SendPrologWithFrameTracking( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| bool frameTrackingRequested, |
| MHW_MI_MMIOREGISTERS *mmioRegister = nullptr) override; |
| |
| MOS_STATUS SetSliceStructs() override; |
| |
| MOS_STATUS AllocateTileStatistics(); |
| |
| void SetHcpIndObjBaseAddrParams(MHW_VDBOX_IND_OBJ_BASE_ADDR_PARAMS& indObjBaseAddrParams) override; |
| |
| MOS_STATUS ReadSseStatistics(PMOS_COMMAND_BUFFER cmdBuffer) override; |
| |
| MOS_STATUS HuCBrcInitReset() override; |
| |
| //! |
| //! \brief Encode at tile level |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS EncTileLevel(); |
| |
| //! |
| //! \brief Decide number of pipes used for encoding |
| //! \details called inside PlatformCapabilityCheck |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS DecideEncodingPipeNumber(); |
| |
| // overload with more input params |
| void SetHcpSliceStateParams( |
| MHW_VDBOX_HEVC_SLICE_STATE& sliceState, |
| PCODEC_ENCODER_SLCDATA slcData, |
| uint16_t slcCount, |
| PMHW_VDBOX_HCP_TILE_CODING_PARAMS_G12 tileCodingParams, |
| bool lastSliceInTile, |
| uint32_t idx); |
| |
| //! |
| //! \brief Get encoder kernel header and kernel size |
| //! |
| //! \param [in] binary |
| //! Pointer to kernel binary |
| //! \param [in] operation |
| //! Enc kernel operation |
| //! \param [in] krnStateIdx |
| //! Kernel state index |
| //! \param [out] krnHeader |
| //! Pointer to kernel header |
| //! \param [out] krnSize |
| //! Pointer to kernel size |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| static MOS_STATUS GetKernelHeaderAndSize( |
| void *binary, |
| EncOperation operation, |
| uint32_t krnStateIdx, |
| void *krnHeader, |
| uint32_t *krnSize); |
| |
| //! |
| //! \brief Init kernel state for HME kernel |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS InitKernelStateMe(); |
| |
| //! |
| //! \brief Init kernel state for streamin kernel |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS InitKernelStateStreamIn(); |
| |
| //! |
| //! \brief Set kernel parameters for specific kernel operation |
| //! |
| //! \param [in] operation |
| //! Kernel operation |
| //! \param [out] kernelParams |
| //! Pointer to kernel parameters |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS SetKernelParams( |
| EncOperation operation, |
| MHW_KERNEL_PARAM *kernelParams); |
| |
| //! |
| //! \brief Set binding table for specific kernel operation |
| //! |
| //! \param [in] operation |
| //! Kernel operation |
| //! \param [out] bindingTable |
| //! Pointer to binding table |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS SetBindingTable( |
| EncOperation operation, |
| PCODECHAL_ENCODE_BINDING_TABLE_GENERIC bindingTable); |
| |
| //! |
| //! \brief Invoke HME kernel |
| //! |
| //! \param [in] hmeLevel |
| //! HME level like 4x, 16x 32x |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS EncodeMeKernel( |
| HmeLevel hmeLevel); |
| |
| //! |
| //! \brief Set curbe for HME kernel |
| //! |
| //! \param [in] hmeLevel |
| //! HME level like 4x, 16x 32x |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS SetMeCurbe( |
| HmeLevel hmeLevel); |
| |
| //! |
| //! \brief Set surface state for HME kernel |
| //! |
| //! \param [in] hmeLevel |
| //! HME level like 4x, 16x 32x |
| //! \param [in] cmdBuffer |
| //! Pointer to command buffer that surface states are added |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS SendMeSurfaces( |
| HmeLevel hmeLevel, |
| PMOS_COMMAND_BUFFER cmdBuffer); |
| |
| //! |
| //! \brief Construct the 3rd level batch buffer |
| //! |
| //! \param [in] thirdLevelBatchBuffer |
| //! Pointer to the 3rd level batch buffer for each tile |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS ConstructTLB(PMHW_BATCH_BUFFER thirdLevelBatchBuffer); |
| |
| MOS_STATUS AddVdencWalkerStateCmd( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| PMHW_VDBOX_HEVC_SLICE_STATE params) override; |
| |
| //! \brief Allocate the batch buffer for each tile |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS AllocateTileLevelBatch(); |
| |
| //! |
| //! \brief Free the batch buffer for each tile |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS FreeTileLevelBatch(); |
| |
| MOS_STATUS CalculatePictureStateCommandSize() override; |
| |
| MOS_STATUS AddHcpPipeBufAddrCmd( |
| PMOS_COMMAND_BUFFER cmdBuffer) override; |
| |
| //! |
| //! \brief Is slice in the current tile |
| //! |
| //! \param [in] sliceNumber |
| //! Slice number |
| //! \param [in] currentTile |
| //! Pointer to current tile coding params |
| //! \param [out] sliceInTile |
| //! Pointer to return if slice in tile |
| //! \param [out] lastSliceInTile |
| //! Pointer to return if last slice in tile |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS IsSliceInTile( |
| uint32_t sliceNumber, |
| PMHW_VDBOX_HCP_TILE_CODING_PARAMS_G12 currentTile, |
| bool *sliceInTile, |
| bool *lastSliceInTile); |
| |
| //! |
| //! \brief Set tile data |
| //! |
| //! \param [in] tileCodingParams |
| //! Pointer to tile coding params |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS SetTileData(MHW_VDBOX_HCP_TILE_CODING_PARAMS_G12* tileCodingParams); |
| |
| //! |
| //! \brief Invoke HuC BRC update |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS HuCBrcUpdate() override; |
| |
| //! |
| //! \brief HuC PAK integrate |
| //! |
| //! \param [in] cmdBuffer |
| //! Pointer to command buffer |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS HucPakIntegrate( |
| PMOS_COMMAND_BUFFER cmdBuffer); |
| |
| //! \brief Check whether Scalability is enabled or not, |
| //! Set number of VDBoxes accordingly |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS GetSystemPipeNumberCommon(); |
| |
| MOS_STATUS InitMmcState() override; |
| |
| MOS_STATUS InitReserveState(CodechalSetting * settings); |
| |
| MOS_STATUS UpdateCmdBufAttribute( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| bool renderEngineInUse) override; |
| |
| MOS_STATUS AddMediaVfeCmd( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| SendKernelCmdsParams *params) override; |
| |
| //! |
| //! \brief Calculate Command Buffer Size |
| //! |
| //! \return uint32_t |
| //! Command buffer size calculated |
| //! |
| uint32_t CalculateCommandBufferSize() override; |
| |
| //! |
| //! \brief Set Streamin Data Per Lcu |
| //! |
| //! \param [in] streaminParams |
| //! Streamin parameters |
| //! \param [in] streaminData |
| //! Streamin data |
| //! |
| //! \return void |
| //! |
| void SetStreaminDataPerLcu( |
| PMHW_VDBOX_VDENC_STREAMIN_STATE_PARAMS streaminParams, |
| void* streaminData) override; |
| |
| //! |
| //! \brief Set And Populate VE Hint parameters |
| //! \details Set Virtual Engine hint parameter and populate it to primary cmd buffer attributes |
| //! \param [in] cmdBuffer |
| //! Pointer to primary cmd buffer |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS SetAndPopulateVEHintParams( |
| PMOS_COMMAND_BUFFER cmdBuffer); |
| |
| PCODECHAL_ENCODE_SCALABILITY_STATE m_scalabilityState; //!< Scalability state |
| |
| #if USE_CODECHAL_DEBUG_TOOL |
| virtual MOS_STATUS DumpVdencOutputs() override; |
| #endif |
| |
| MOS_STATUS SetRoundingValues(); |
| |
| protected: |
| #ifdef _ENCODE_VDENC_RESERVED |
| CodechalVdencHevcG12Rsvd *m_rsvdState = nullptr; |
| #endif |
| |
| private: |
| // tile row based BRC related |
| bool m_FrameLevelBRCForTileRow = false; //!< Frame level BRC for tile row based encoding |
| bool m_TileRowLevelBRC = false; //!< Tile Row level BRC for tile row based encoding |
| uint32_t m_CurrentTileRow = 0; //!< Current tile row number, start from 0 |
| static const uint32_t m_NumPassesForTileReplay = 2; //!< Max number Passes for tile row based BRC |
| uint32_t m_CurrentPassForTileReplay = 0; //!< Current BRC pass number for tile replay |
| uint32_t m_CurrentPassForOverAll = 0; //!< Current tile replay pass for overall |
| PMHW_BATCH_BUFFER m_TileRowBRCBatchBuffer[CODECHAL_VDENC_BRC_NUM_OF_PASSES]; //!< Tile level batch buffer HUC BRC Update |
| uint32_t m_numTileRows = 1; //!< Total number of tile rows |
| uint32_t m_numTileRowBRCBatchAllocated = 0; //!< The number of allocated batch buffer for tile row BRC |
| MOS_RESOURCE m_resTileRowBRCsyncSemaphore; //!< HW semaphore buffer for tile row BRC update |
| bool m_RGBEncodingEnable = false; //!< Enable RGB encoding |
| bool m_CaptureModeEnable = false; //!< Enable Capture mode with display |
| |
| // This may be removed to VDENC HW interface later |
| static const uint32_t m_VdboxVDENCRegBase[4]; |
| //! |
| //! \brief Encode at tile level with tile row based multiple passes |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS EncWithTileRowLevelBRC(); |
| |
| //! |
| //! \brief Invoke HuC BRC update for tile row |
| //! |
| //! \param [in] cmdBuffer |
| //! Pointer to command buffer |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS HuCBrcTileRowUpdate(PMOS_COMMAND_BUFFER cmdBuffer); |
| |
| |
| //! \brief Allocate the BRC batch buffer for each tile row |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS AllocateTileRowLevelBRCBatch(); |
| |
| //! |
| //! \brief Free the batch buffer for each tile row level BRC |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS FreeTileRowLevelBRCBatch(); |
| |
| //! |
| //! \brief Setup Virtual Address Regions for HuC Tile Row BRC update |
| //! |
| //! \param [in] virtualAddrParams |
| //! Huc Virtual Address parameters |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS SetRegionsHuCTileRowBrcUpdate(PMHW_VDBOX_HUC_VIRTUAL_ADDR_PARAMS virtualAddrParams); |
| |
| //! |
| //! \brief Configue stitch data buffer as Huc Pak Integration input |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS ConfigStitchDataBuffer(); |
| |
| //! |
| //! \brief Dump HuC based debug output buffers |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS DumpHucDebugOutputBuffers(); |
| |
| MOS_STATUS SetAddCommands(uint32_t commandtype, PMOS_COMMAND_BUFFER cmdBuffer, bool addToBatchBufferHuCBRC, uint32_t roundInterValue, uint32_t roundIntraValue, bool isLowDelayB = true, int8_t *pRefIdxMapping = nullptr, int8_t recNotFilteredID = 0); |
| |
| //! \brief Lookahead analysis |
| //! |
| //! \return MOS_STATUS |
| //! MOS_STATUS_SUCCESS if success, else fail reason |
| //! |
| MOS_STATUS AnalyzeLookaheadStats(); |
| |
| MOS_STATUS HuCLookaheadInit(); |
| |
| MOS_STATUS HuCLookaheadUpdate(); |
| |
| #if USE_CODECHAL_DEBUG_TOOL |
| MOS_STATUS DumpHucPakIntegrate(); |
| MOS_STATUS DumpHucCqp(); |
| #endif |
| |
| }; |
| |
| //! \brief typedef of class CodechalVdencHevcStateG12* |
| using PCODECHAL_VDENC_HEVC_STATE_G12 = class CodechalVdencHevcStateG12*; |
| |
| #endif // __CODECHAL_VDENC_HEVC_G12_H__ |