blob: 1bddd8ab4d48ed946ac7f00c38536245e3ee766d [file] [log] [blame]
/*
* 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_encode_hevc_mbenc_g12.h
//! \brief HEVC dual-pipe base class kernel interface for GEN12 platform.
//!
#ifndef __CODECHAL_ENCODE_HEVC_MBENC_G12_H__
#define __CODECHAL_ENCODE_HEVC_MBENC_G12_H__
#include "codechal_encode_hevc_g12.h"
#include "codechal_kernel_intra_dist_mdf_g12.h"
//! MBENC B kernel Curbe structure
typedef struct _MbencBcurbeDataG12
{
// DWORD 0
uint32_t DW0_FrameWidthInSamples : MOS_BITFIELD_RANGE(0, 15); // PicW should be a multiple of 8
uint32_t DW0_FrameHeightInSamples : MOS_BITFIELD_RANGE(16, 31); // PicH should be a multiple of 8
// DWORD 1
uint32_t DW1_Log2MaxCUSize : MOS_BITFIELD_RANGE(0, 3);
uint32_t DW1_Log2MinCUSize : MOS_BITFIELD_RANGE(4, 7);
uint32_t DW1_Log2MaxTUSize : MOS_BITFIELD_RANGE(8, 11);
uint32_t DW1_Log2MinTUSize : MOS_BITFIELD_RANGE(12, 15);
uint32_t DW1_MaxNumIMESearchCenter : MOS_BITFIELD_RANGE(16, 18);
uint32_t DW1_MaxIntraRdeIter : MOS_BITFIELD_RANGE(19, 21);
uint32_t DW1_IntraRDOQEnable : MOS_BITFIELD_BIT(22);
uint32_t DW1_QPType : MOS_BITFIELD_RANGE(23, 24);
uint32_t DW1_MaxTransformDepthInter : MOS_BITFIELD_RANGE(25, 26);
uint32_t DW1_MaxTransformDepthIntra : MOS_BITFIELD_RANGE(27, 28);
uint32_t DW1_Log2ParallelMergeLevel : MOS_BITFIELD_RANGE(29, 31);
// DWORD 2
uint32_t DW2_CornerNeighborPixel0 : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW2_IntraNeighborAvailFlags : MOS_BITFIELD_RANGE(8, 13);
uint32_t DW2_ChromaFormatType : MOS_BITFIELD_RANGE(14, 15);
uint32_t DW2_SubPelMode : MOS_BITFIELD_RANGE(16, 17);
uint32_t DW2_Reserved_0 : MOS_BITFIELD_RANGE(18, 19);
uint32_t DW2_InterSADMeasure : MOS_BITFIELD_RANGE(20, 21);
uint32_t DW2_IntraSADMeasureAdj : MOS_BITFIELD_RANGE(22, 23);
uint32_t DW2_IntraPredictionMask : MOS_BITFIELD_RANGE(24, 26);
uint32_t DW2_RefIDCostMode : MOS_BITFIELD_BIT(27);
uint32_t DW2_TUBasedCostSetting : MOS_BITFIELD_RANGE(28, 30);
uint32_t DW2_Reserved_1 : MOS_BITFIELD_BIT(31);
// DWORD 3
uint32_t DW3_ExplicitModeEn : MOS_BITFIELD_BIT(0);
uint32_t DW3_AdaptiveEn : MOS_BITFIELD_BIT(1);
uint32_t DW3_Reserved_0 : MOS_BITFIELD_RANGE(2, 4);
uint32_t DW3_EarlyImeSuccessEn : MOS_BITFIELD_BIT(5);
uint32_t DW3_IntraSpeedMode : MOS_BITFIELD_BIT(6);
uint32_t DW3_IMECostCentersSel : MOS_BITFIELD_BIT(7);
uint32_t DW3_RDEQuantRoundValue : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW3_IMERefWindowSize : MOS_BITFIELD_RANGE(16, 17);
uint32_t DW3_IntraComputeType : MOS_BITFIELD_BIT(18);
uint32_t DW3_Depth0IntraPrediction : MOS_BITFIELD_BIT(19);
uint32_t DW3_TUDepthControl : MOS_BITFIELD_RANGE(20, 21);
uint32_t DW3_IntraTuRecFeedbackDisable : MOS_BITFIELD_BIT(22);
uint32_t DW3_MergeListBiDisable : MOS_BITFIELD_BIT(23);
uint32_t DW3_EarlyImeStop : MOS_BITFIELD_RANGE(24, 31);
// DWORD 4
uint32_t DW4_SliceQP : MOS_BITFIELD_RANGE(0, 6);
uint32_t DW4_SliceQPSign : MOS_BITFIELD_BIT(7);
uint32_t DW4_ConcurrentGroupNum : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW4_ModeIntra32x32Cost : MOS_BITFIELD_RANGE(16, 23);
uint32_t DW4_ModeIntraNonDC32x32Cost : MOS_BITFIELD_RANGE(24, 31);
// DWORD 5
uint32_t DW5_ModeIntra16x16Cost : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW5_ModeIntraNonDC16x16Cost : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW5_ModeIntra8x8Cost : MOS_BITFIELD_RANGE(16, 23);
uint32_t DW5_ModeIntraNonDC8x8Cost : MOS_BITFIELD_RANGE(24, 31);
// DWORD 6
uint32_t DW6_ModeIntraNonPred : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW6_ModeIntraCUCost : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW6_ModeIntraNonDCCost : MOS_BITFIELD_RANGE(16, 23);
uint32_t DW6_Reserved_0 : MOS_BITFIELD_RANGE(24, 31);
// DWORD 7
uint32_t DW7_Reserved_0 : MOS_BITFIELD_RANGE(0, 23);
uint32_t DW7_ChromaIntraModeCost : MOS_BITFIELD_RANGE(24, 31);
// DWORD 8
uint32_t DW8_IntraLumaModeMasks0_31 : MOS_BITFIELD_RANGE(0, 31);
// DWORD 9
uint32_t DW9_IntraLumaModeMasks32_34 : MOS_BITFIELD_RANGE(0, 2);
uint32_t DW9_IntraChromaModeMask : MOS_BITFIELD_RANGE(3, 7);
uint32_t DW9_PenaltyForIntraNonDCPredMode : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW9_NeighborPixelChromaValueCbCrPair : MOS_BITFIELD_RANGE(16, 31);
// DWORD 10
uint32_t DW10_IntraPredModeLeftNbrBlk0 : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW10_IntraPredModeLeftNbrBlk1 : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW10_IntraPredModeLeftNbrBlk2 : MOS_BITFIELD_RANGE(16, 23);
uint32_t DW10_IntraPredModeLeftNbrBlk3 : MOS_BITFIELD_RANGE(24, 31);
// DWORD 11
uint32_t DW11_IntraPredModeTopNbrBlk0 : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW11_IntraPredModeTopNbrBlk1 : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW11_IntraPredModeTopNbrBlk2 : MOS_BITFIELD_RANGE(16, 23);
uint32_t DW11_IntraPredModeTopNbrBlk3 : MOS_BITFIELD_RANGE(24, 31);
// DWORD 12
uint32_t DW12_IntraModeCostMPM : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW12_IntraPUModeCost : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW12_IntraPUNxNCost : MOS_BITFIELD_RANGE(16, 23);
uint32_t DW12_Reserved_0 : MOS_BITFIELD_RANGE(24, 31);
// DWORD 13
uint32_t DW13_IntraTUDept0Cost : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW13_IntraTUDept1Cost : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW13_IntraTUDept2Cost : MOS_BITFIELD_RANGE(16, 23);
uint32_t DW13_Reserved_0 : MOS_BITFIELD_RANGE(24, 31);
// DWORD 14
uint32_t DW14_IntraTU4x4CBFCost : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW14_IntraTU8x8CBFCost : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW14_IntraTU16x16CBFCost : MOS_BITFIELD_RANGE(16, 23);
uint32_t DW14_IntraTU32x32CBFCost : MOS_BITFIELD_RANGE(24, 31);
// DWORD 15
uint32_t DW15_LambdaRD : MOS_BITFIELD_RANGE(0, 15);
uint32_t DW15_Reserved_0 : MOS_BITFIELD_RANGE(16, 31);
// DWORD 16
uint32_t DW16_PictureQp_B : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW16_PictureQp_P : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW16_PictureQp_I : MOS_BITFIELD_RANGE(16, 23);
uint32_t DW16_Reserved_0 : MOS_BITFIELD_RANGE(24, 31);
// DWORD 17
uint32_t DW17_IntraNonDC8x8Penalty : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW17_IntraNonDC32x32Penalty : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW17_NumRowOfTile : MOS_BITFIELD_RANGE(16, 23);
uint32_t DW17_NumColOfTile : MOS_BITFIELD_RANGE(24, 31);
//DWORD 18
uint32_t DW18_TransquantBypassEnableFlag : MOS_BITFIELD_BIT(0);
uint32_t DW18_PCMEnabledFlag : MOS_BITFIELD_BIT(1);
uint32_t DW18_Reserved_0 : MOS_BITFIELD_RANGE(2, 3);
uint32_t DW18_CuQpDeltaEnabledFlag : MOS_BITFIELD_BIT(4);
uint32_t DW18_SteppingSelection : MOS_BITFIELD_RANGE(5, 6);
uint32_t DW18_RegionsInSliceEnable : MOS_BITFIELD_BIT(7);
uint32_t DW18_HMEFlag : MOS_BITFIELD_RANGE(8, 9);
uint32_t DW18_Reserved_1 : MOS_BITFIELD_RANGE(10, 15);
uint32_t DW18_Cu64SkipCheckOnly : MOS_BITFIELD_BIT(16);
uint32_t DW18_EnableCu64Check : MOS_BITFIELD_BIT(17);
uint32_t DW18_Cu642Nx2NCheckOnly : MOS_BITFIELD_BIT(18);
uint32_t DW18_EnableCu64AmpCheck : MOS_BITFIELD_BIT(19);
uint32_t DW18_Reserved_2 : MOS_BITFIELD_BIT(20);
uint32_t DW18_DisablePIntra : MOS_BITFIELD_BIT(21);
uint32_t DW18_DisableIntraTURec : MOS_BITFIELD_BIT(22);
uint32_t DW18_InheritIntraModeFromTU0 : MOS_BITFIELD_BIT(23);
uint32_t DW18_Reserved_3 : MOS_BITFIELD_RANGE(24, 26);
uint32_t DW18_CostScalingForRA : MOS_BITFIELD_BIT(27);
uint32_t DW18_DisableIntraNxN : MOS_BITFIELD_BIT(28);
uint32_t DW18_Reserved_4 : MOS_BITFIELD_RANGE(29, 31);
//DWORD 19
uint32_t DW19_MaxRefIdxL0 : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW19_MaxRefIdxL1 : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW19_MaxBRefIdxL0 : MOS_BITFIELD_RANGE(16, 23);
uint32_t DW19_Reserved_0 : MOS_BITFIELD_RANGE(24, 31);
//DWORD 20
uint32_t DW20_EarlyTermination : MOS_BITFIELD_BIT(0);
uint32_t DW20_Skip : MOS_BITFIELD_BIT(1);
uint32_t DW20_SkipEarlyTermSize : MOS_BITFIELD_RANGE(2, 3);
uint32_t DW20_Dynamic64Enable : MOS_BITFIELD_RANGE(4, 5);
uint32_t DW20_Dynamic64Order : MOS_BITFIELD_RANGE(6, 7);
uint32_t DW20_Dynamic64Th : MOS_BITFIELD_RANGE(8, 11);
uint32_t DW20_DynamicOrderTh : MOS_BITFIELD_RANGE(12, 15);
uint32_t DW20_BFrameQPOffset : MOS_BITFIELD_RANGE(16, 23);
uint32_t DW20_IncreaseExitThresh : MOS_BITFIELD_RANGE(24, 27);
uint32_t DW20_Dynamic64Min32 : MOS_BITFIELD_RANGE(28, 29);
uint32_t DW20_Reserved_0 : MOS_BITFIELD_BIT(30);
uint32_t DW20_LastFrameIsIntra : MOS_BITFIELD_BIT(31);
//DWORD 21
uint32_t DW21_LenSP : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW21_MaxNumSU : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW21_Reserved_0 : MOS_BITFIELD_RANGE(16, 31);
//DWORD 22
uint32_t DW22_CostTableIndex : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW22_NumRegions : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW22_Reserved_0 : MOS_BITFIELD_RANGE(16, 31);
//DWORD 23
uint32_t DW23_SliceType : MOS_BITFIELD_RANGE(0, 1);
uint32_t DW23_TemporalMvpEnableFlag : MOS_BITFIELD_BIT(2);
uint32_t DW23_CollocatedFromL0Flag : MOS_BITFIELD_BIT(3);
uint32_t DW23_TheSameRefList : MOS_BITFIELD_BIT(4);
uint32_t DW23_IsLowDelay : MOS_BITFIELD_BIT(5);
uint32_t DW23_Reserved_0 : MOS_BITFIELD_RANGE(6, 7);
uint32_t DW23_MaxNumMergeCand : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW23_NumRefIdxL0 : MOS_BITFIELD_RANGE(16, 23);
uint32_t DW23_NumRefIdxL1 : MOS_BITFIELD_RANGE(24, 31);
//DWORD 24
uint32_t DW24_FwdPocNumber_L0_mTb_0 : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW24_BwdPocNumber_L1_mTb_0 : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW24_FwdPocNumber_L0_mTb_1 : MOS_BITFIELD_RANGE(16, 23);
uint32_t DW24_BwdPocNumber_L1_mTb_1 : MOS_BITFIELD_RANGE(24, 31);
//DWORD 25
uint32_t DW25_FwdPocNumber_L0_mTb_2 : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW25_BwdPocNumber_L1_mTb_2 : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW25_FwdPocNumber_L0_mTb_3 : MOS_BITFIELD_RANGE(16, 23);
uint32_t DW25_BwdPocNumber_L1_mTb_3 : MOS_BITFIELD_RANGE(24, 31);
//DWORD 26
uint32_t DW26_FwdPocNumber_L0_mTb_4 : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW26_BwdPocNumber_L1_mTb_4 : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW26_FwdPocNumber_L0_mTb_5 : MOS_BITFIELD_RANGE(16, 23);
uint32_t DW26_BwdPocNumber_L1_mTb_5 : MOS_BITFIELD_RANGE(24, 31);
//DWORD 27
uint32_t DW27_FwdPocNumber_L0_mTb_6 : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW27_BwdPocNumber_L1_mTb_6 : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW27_FwdPocNumber_L0_mTb_7 : MOS_BITFIELD_RANGE(16, 23);
uint32_t DW27_BwdPocNumber_L1_mTb_7 : MOS_BITFIELD_RANGE(24, 31);
//DWORD 28
uint32_t DW28_LongTermReferenceFlags_L0 : MOS_BITFIELD_RANGE(0, 15);
uint32_t DW28_LongTermReferenceFlags_L1 : MOS_BITFIELD_RANGE(16, 31);
//DWORD 29
uint32_t DW29_RefFrameVerticalSize : MOS_BITFIELD_RANGE(0, 15);
uint32_t DW29_RefFrameHorizontalSize : MOS_BITFIELD_RANGE(16, 31);
//DWORD 30
uint32_t DW30_RoundingInter : MOS_BITFIELD_RANGE(0, 7);
uint32_t DW30_RoundingIntra : MOS_BITFIELD_RANGE(8, 15);
uint32_t DW30_Reserved_0 : MOS_BITFIELD_RANGE(16, 31);
// DWORD 31
uint32_t DW31_Reserved_0 : MOS_BITFIELD_RANGE(0, 31);
// DWORD 32
uint32_t DW32_Reserved_0 : MOS_BITFIELD_RANGE(0, 31);
// DWORD 33
uint32_t DW33_Reserved_0 : MOS_BITFIELD_RANGE(0, 31);
// DWORD 34
uint32_t DW34_Reserved_0 : MOS_BITFIELD_RANGE(0, 31);
// DWORD 35
uint32_t DW35_Reserved_0 : MOS_BITFIELD_RANGE(0, 31);
// DWORD 36
uint32_t DW36_Reserved_0 : MOS_BITFIELD_RANGE(0, 31);
// DWORD 37
uint32_t DW37_Reserved_0 : MOS_BITFIELD_RANGE(0, 31);
// DWORD 38
uint32_t DW38_Reserved_0 : MOS_BITFIELD_RANGE(0, 31);
// DWORD 39
uint32_t DW39_Reserved_0 : MOS_BITFIELD_RANGE(0, 31);
} MbencBcurbeDataG12, *PMbencBcurbeDataG12;
C_ASSERT(MOS_BYTES_TO_DWORDS(sizeof(MbencBcurbeDataG12)) == 40);
const MbencBcurbeDataG12 initMbenBcurbeDataGen12 = {
0, //DW0_FrameWidthInSamples
0, //DW0_FrameHeightInSamples
5, //DW1_Log2MaxCUSize
3, //DW1_Log2MinCUSize
5, //DW1_Log2MaxTUSize
2, //DW1_Log2MinTUSize
3, //DW1_MaxNumIMESearchCenter
1, //DW1_MaxIntraRdeIter
0, //DW1_IntraRDOQEnable
0, //DW1_QPType
0, //DW1_MaxTransformDepthInter
0, //DW1_MaxTransformDepthIntra
2, //DW1_Log2ParallelMergeLevel
0, //DW2_CornerNeighborPixel0
0, //DW2_IntraNeighborAvailFlags
1, //DW2_ChromaFormatType
0x3, //DW2_SubPelMode
0, //DW2_Reserved_0
2, //DW2_InterSADMeasure
2, //DW2_IntraSADMeasureAdj
0, //DW2_IntraPredictionMask
1, //DW2_RefIDCostMode
0, //DW2_TUBasedCostSetting
0, //DW2_Reserved_1
0, //DW3_ExplicitModeEn
1, //DW3_AdaptiveEn
0, //DW3_Reserved_0
0, //DW3_EarlyImeSuccessEn
0, //DW3_IntraSpeedMode
0, //DW3_IMECostCentersSel
176, //DW3_RDEQuantRoundValue
1, //DW3_IMERefWindowSize
0, //DW3_IntraComputeType
0, //DW3_Depth0IntraPrediction
0, //DW3_TUDepthControl
0, //DW3_IntraTuRecFeedbackDisable
0, //DW3_MergeListBiDisable
0, //DW3_EarlyImeStop
27, //DW4_SliceQP
0, //DW4_SliceQPSign
1, //DW4_ConcurrentGroupNum
40, //DW4_ModeIntra32x32Cost
0, //DW4_ModeIntraNonDC32x32Cost
40, //DW5_ModeIntra16x16Cost
0, //DW5_ModeIntraNonDC16x16Cost
41, //DW5_ModeIntra8x8Cost
0, //DW5_ModeIntraNonDC8x8Cost
15, //DW6_ModeIntraNonPred
0, //DW6_ModeIntraCUCost
0, //DW6_ModeIntraNonDCCost
0, //DW6_Reserved_0
0, //DW7_Reserved_0
40, //DW7_ChromaIntraModeCost
0, //DW8_IntraLumaModeMasks0_31 - kernel will update this value
0, //DW9_IntraLumaModeMasks32_34 - kernel will update this value
0, //DW9_IntraChromaModeMask - kernel will update this value
0, //DW9_PenaltyForIntraNonDCPredMode - kernel will update this value
0, //DW9_NeighborPixelChromaValueCbCrPair - kernel will update this value
0, //DW10_IntraPredModeLeftNbrBlk0 - kernel will update this value
0, //DW10_IntraPredModeLeftNbrBlk1 - kernel will update this value
0, //DW10_IntraPredModeLeftNbrBlk2 - kernel will update this value
0, //DW10_IntraPredModeLeftNbrBlk3 - kernel will update this value
0, //DW11_IntraPredModeTopNbrBlk0 - kernel will update this value
0, //DW11_IntraPredModeTopNbrBlk1 - kernel will update this value
0, //DW11_IntraPredModeTopNbrBlk2 - kernel will update this value
0, //DW11_IntraPredModeTopNbrBlk3 - kernel will update this value
0, //DW12_IntraModeCostMPM
0, //DW12_IntraPUModeCost - kernel will update this value
0, //DW12_IntraPUNxNCost - kernel will update this value
0, //DW12_Reserved_0
4, //DW13_IntraTUDept0Cost
20, //DW13_IntraTUDept1Cost
0, //DW13_IntraTUDept2Cost
0, //DW13_Reserved_0
12, //DW14_IntraTU4x4CBFCost
12, //DW14_IntraTU8x8CBFCost
12, //DW14_IntraTU16x16CBFCost
12, //DW14_IntraTU32x32CBFCost
77, //DW15_LambdaRD
0, //DW15_Reserved_0
0, //DW16_PictureQp_B
0, //DW16_PictureQp_P
0, //DW16_PictureQp_I
0, //DW16_Reserved_0
0, //DW17_IntraNonDC8x8Penalty
0, //DW17_IntraNonDC32x32Penalty
1, //DW17_NumRowOfTile
1, //DW17_NumColOfTile
0, //DW18_TransquantBypassEnableFlag
0, //DW18_PCMEnabledFlag
0, //DW18_Reserved_0
0, //DW18_CuQpDeltaEnabledFlag
1, //DW18_SteppingSelection
0, //DW18_RegionsInSliceEnable
0, //DW18_HMEFlag
0, //DW18_Reserved_1
0, //DW18_Cu64SkipCheckOnly
0, //DW18_EnableCu64Check
1, //DW18_Cu642Nx2NCheckOnly
0, //DW18_EnableCu64AmpCheck
0, //DW18_Reserved_2
0, //DW18_DisablePIntra
0, //DW18_DisableIntraTURec
0, //DW18_InheritIntraModeFromTU0
0, //DW18_Reserved_3
0, //DW18_CostScalingForRA
0, //DW18_DisableIntraNxN
0, //DW18_Reserved_4
0, //DW19_MaxRefIdxL0
0, //DW19_MaxRefIdxL1
0, //DW19_MaxBRefIdxL0
0, //DW19_Reserved_0
0, //DW20_EarlyTermination
0, //DW20_Size
0, //DW20_SkipEarlyTermSize
0, //DW20_Dynamic64Enable
0, //DW20_Dynamic64Order
0, //DW20_Dynamic64Th
0, //DW20_DynamicOrderTh
0, //DW20_BFrameQpOffset
0, //DW20_IncreaseExitThresh
3, //DW20_Dynamic64Min32
0, //DW20_Reserved_0
0, //DW20_LastFrameIntra
63, //DW21_LenSP
63, //DW21_MaxNumSU
0, //DW21_Reserved_0
0, //DW22_CostTableIndex
1, //DW22_NumRegions
0, //DW22_Reserved_0
0, //DW23_SliceType
0, //DW23_TemporalMvpEnableFlag
0, //DW23_CollocatedFromL0Flag
0, //DW23_TheSameRefList
0, //DW23_IsLowDelay
0, //DW23_Reserved_0
4, //DW23_MaxNumMergeCand
0, //DW23_NumRefIdxL0
0, //DW23_NumRefIdxL1
0, //DW24_FwdPocNumber_L0_mTb_0
0, //DW24_BwdPocNumber_L1_mTb_0
0, //DW24_FwdPocNumber_L0_mTb_1
0, //DW24_BwdPocNumber_L1_mTb_1
0, //DW25_FwdPocNumber_L0_mTb_2
0, //DW25_BwdPocNumber_L1_mTb_2
0, //DW25_FwdPocNumber_L0_mTb_3
0, //DW25_BwdPocNumber_L1_mTb_3
0, //DW26_FwdPocNumber_L0_mTb_4
0, //DW26_BwdPocNumber_L1_mTb_4
0, //DW26_FwdPocNumber_L0_mTb_5
0, //DW26_BwdPocNumber_L1_mTb_5
0, //DW27_FwdPocNumber_L0_mTb_6
0, //DW27_BwdPocNumber_L1_mTb_6
0, //DW27_FwdPocNumber_L0_mTb_7
0, //DW27_BwdPocNumber_L1_mTb_7
0, //DW28_LongTermReferenceFlags_L0
0, //DW28_LongTermReferenceFlags_L1
0, //DW29_RefFrameVerticalSize
0, //DW29_RefFrameHorizontalSize
0, //DW30_RoundingInter
0, //DW30_RoundingIntra
0, //DW30_Reserved_0
0, //DW31_Reserved_0
0, //DW32_Reserved_0
0, //DW33_Reserved_0
0, //DW34_Reserved_0
0, //DW35_Reserved_0
0, //DW36_Reserved_0
0, //DW37_Reserved_0
0, //DW38_Reserved_0
0, //DW39_Reserved_0
};
namespace CMRT_UMD
{
class CmDevice;
class CmTask;
class CmQueue;
class CmThreadSpace;
class CmKernel;
class CmProgram;
class SurfaceIndex;
class CmSurface2D;
class CmBuffer;
}
#define MAX_VME_BWD_REF 4
#define MAX_VME_FWD_REF 4
//! HEVC dual-pipe encoder class for GEN12 HEVC MBenc kernel with MDF support
class CodecHalHevcMbencG12 : public CodechalEncHevcStateG12
{
protected:
CmThreadSpace * m_threadSpace = nullptr;
CmKernel * m_cmKrnB = nullptr;
CmProgram * m_cmProgramB = nullptr;
CmKernel * m_cmKrnB64 = nullptr;
CmProgram * m_cmProgramB64 = nullptr;
static CmDevice * m_mfeCmDev;
MbencBcurbeDataG12 m_curbeDataB = {};
typedef SurfaceIndex MBencSurfaceIndex[m_maxMfeSurfaces][m_maxMultiFrames];
MBencSurfaceIndex * m_surfIndexArray = nullptr;
uint8_t m_FrameBalance[m_loadBalanceSize];
int32_t m_totalFrameAdj[m_maxMultiFrames] = {};
static const uint8_t m_frameColorMapEntrySize = 16;
static const uint8_t m_frameColorMapLocCurFrame = 0;
static const uint8_t m_frameColorMapLocCurColor = 1;
static const uint8_t m_frameColorMapLocTotalFrame = 2;
static const uint8_t m_frameColorMapLocTotalColor = 3;
static const uint8_t m_frameColorMapFrameInvalid = 0xFF;
//Internal surfaces
CmBuffer *m_combinedBuffer1 = nullptr; //!< Combined buffer 1
CmBuffer *m_combinedBuffer2 = nullptr; //!< Combined buffer 2
CmSurface2D * m_reconWithBoundaryPix = nullptr; //!< Recon surface with populated boundary pixels.
CmSurface2D * m_intermediateCuRecordLcu32 = nullptr; //!< Intermediate CU Record Surface for I and B kernel
CmSurface2D * m_scratchSurf = nullptr; //!< Scartch Surface for I-kernel
CmSurface2D * m_cu16X16QpIn = nullptr; //!< CU 16x16 QP data input surface
CmSurface2D * m_lcuLevelData = nullptr; //!< Mv and Distortion summation surface
CmBuffer * m_constTableB = nullptr; //!< Enc constant table for B LCU32
CmBuffer * m_cuSplitSurf = nullptr; //!< CU split data surface
CmBuffer * m_loadBalance = nullptr; //!< Enc constant table for B LCU32
CmBuffer * m_dbgSurface = nullptr; //!< Debug surface
CodechalKernelIntraDistMdfG12 *m_intraDistKernel = nullptr;
//External surfaces
SurfaceIndex *m_curVme = nullptr; //!< Resource owned by DDI
CmSurface2D * m_curSurf = nullptr; //!< Resource owned by DDI
CmBuffer * m_mbCodeBuffer = nullptr; //!< Resource owned by PAK
SurfaceIndex *m_mbCodeSurfIdx = nullptr; //!< Resource owned by PAK
SurfaceIndex *m_mvDataSurfIdx = nullptr; //!< Resource owned by PAK
CmSurface2D * m_swScoreboardSurf = nullptr; //!< Resource owned by SW Scoreboard Krn
CmBuffer * m_colocCumvData = nullptr; //!< Resource owned by HME
CmSurface2D * m_hmeMotionPredData = nullptr; //!< Resource owned by HME
CmSurface2D * m_curSurf2X = nullptr; //!< Resource owned by HME
SurfaceIndex *m_cur2XVme = nullptr; //!< Resource owned by HME
CmSurface2D * m_histInBuffer = nullptr; //!< Resource owned by BRC
CmSurface2D * m_histOutBuffer = nullptr; //!< Resource owned by BRC
CmSurface2D * m_surfRefArray[MAX_VME_FWD_REF + MAX_VME_BWD_REF]; //!< Resource owned by DDI
CmSurface2D * m_surf2XArray[MAX_VME_FWD_REF + MAX_VME_BWD_REF]; //!< Resource owned by DDI
public:
BRC_INITRESET_CURBE curbe = {};
BRCUPDATE_CURBE curbeBrcUpdate = {};
//!
//! \brief Constructor
//!
CodecHalHevcMbencG12(CodechalHwInterface* hwInterface,
CodechalDebugInterface* debugInterface,
PCODECHAL_STANDARD_INFO standardInfo);
//!
//! \brief Destructor
//!
virtual ~CodecHalHevcMbencG12();
//!
//! \brief Allocate CM Device , CM Task and Cm Queue
//! \brief Will be used by all the kernels
//!
MOS_STATUS AllocateMDFResources() override;
//!
//! \brief Function to destroy MDF required resources
//!
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
MOS_STATUS DestroyMDFResources() override;
//!
//! \brief Allocate ME resources
//!
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
MOS_STATUS AllocateMeResources();
protected:
//!
//! \brief Allocate resources used by MBEnc
//!
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
virtual MOS_STATUS AllocateEncResources()override;
MOS_STATUS AllocateBrcResources()override;
//!
//! \brief Free resources
//!
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
virtual MOS_STATUS FreeEncResources()override;
virtual MOS_STATUS FreeBrcResources()override;
//!
//! \brief Free resources
//!
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
MOS_STATUS FreeMeResources();
//!
//! \brief Top level function for invoking MBenc kernel
//! \details I, B or LCU64_B MBEnc kernel, based on EncFunctionType
//! \param [in] encFunctionType
//! Specifies the media state type
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
virtual MOS_STATUS EncodeMbEncKernel(CODECHAL_MEDIA_STATE_TYPE encFunctionType) override;
//!
//! \brief Loads the ISA kernel
//!
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
virtual MOS_STATUS InitKernelState()override;
uint32_t GetMaxBtCount()override;
//!
//! \brief Setup Kernel Arguments for B frame
//!
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
MOS_STATUS SetupKernelArgsB();
//!
//! \brief Init Curbe Data for B frame
//!
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
MOS_STATUS InitCurbeDataB();
//!
//! \brief Function to setup external resources for B frames.
//!
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
MOS_STATUS SetupSurfacesB();
////!
////! \brief Top level function for IntraDist kernel
////!
////! \return MOS_STATUS
////! MOS_STATUS_SUCCESS if success, else fail reason
////!
MOS_STATUS EncodeIntraDistKernel()override;
//!
//! \brief Top level function to set remap table
//! \details Used to setup load balance surface.
//! \return void
//!
void SetColorBitRemap(uint8_t * remapTable, int32_t multiFrameNumber, int32_t curColor, int32_t * totalColor, int32_t * totalFrameAdj);
//!
//! \brief Get rounding inter/intra for current frame to use
//! \return MOS_STATUS
//! MOS_STATUS_SUCCESS if success, else fail reason
//!
MOS_STATUS GetRoundingIntraInterToUse() override;
};
//! \brief typedef of class CodecHalHevcMbencG12*
using pCodecHalHevcMbencG12 = class CodecHalHevcMbencG12*;
#endif // __CODECHAL_ENCODE_HEVC_MBENC_G12_H__