| /* |
| * Copyright (c) 2017, 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_vp8_g10.cpp |
| //! \brief VP8 dual-pipe encoder for GEN10. |
| //! |
| |
| #include "codechal_encode_vp8_g10.h" |
| #include "codeckrnheader.h" |
| #ifndef _FULL_OPEN_SOURCE |
| #include "igcodeckrn_g10.h" |
| #endif |
| #include "mhw_vdbox_mfx_hwcmd_g10_X.h" |
| |
| #define INTRA_PROBABILIY 63 |
| #define INTER_LAST_PROBABILIY 255 |
| #define INTER_GOLD_PROBABILIY 128 |
| #define NAX_NUM_TEMPORAL_LAYERS 4 |
| |
| enum CodechalBindingTableOffsetVp8BrcInitResetG10 |
| { |
| CODECHAL_VP8_BRC_INIT_RESET_HISTORY_G10 = 0, |
| CODECHAL_VP8_BRC_INIT_RESET_DISTORTION_G10 = 1, |
| CODECHAL_VP8_BRC_INIT_RESET_NUM_SURFACES_G10 = 2 |
| }; |
| |
| enum CodechalBindingTableOffsetVp8BrcUpdateG10 |
| { |
| CODECHAL_VP8_BRC_UPDATE_HISTORY_G10 = 1, |
| CODECHAL_VP8_BRC_UPDATE_PAK_STATISTICS_OUTPUT_G10 = 2, |
| CODECHAL_VP8_BRC_UPDATE_MFX_ENCODER_CFG_READ_G10 = 3, |
| CODECHAL_VP8_BRC_UPDATE_MFX_ENCODER_CFG_WRITE_G10 = 4, |
| CODECHAL_VP8_BRC_UPDATE_MBENC_CURBE_READ_G10 = 5, |
| CODECHAL_VP8_BRC_UPDATE_MBENC_CURBE_WRITE_G10 = 6, |
| CODECHAL_VP8_BRC_UPDATE_DISTORTION_SURFACE_G10 = 7, |
| CODECHAL_VP8_BRC_UPDATE_CONSTANT_DATA_G10 = 8, |
| CODECHAL_VP8_BRC_UPDATE_SEGMENT_MAP_G10 = 9, |
| CODECHAL_VP8_BRC_UPDATE_MPU_CURBE_READ_G10 = 10, |
| CODECHAL_VP8_BRC_UPDATE_MPU_CURBE_WRITE_G10 = 11, |
| CODECHAL_VP8_BRC_UPDATE_TPU_CURBE_READ_G10 = 12, |
| CODECHAL_VP8_BRC_UPDATE_TPU_CURBE_WRITE_G10 = 13, |
| CODECHAL_VP8_BRC_UPDATE_NUM_SURFACES_G10 = 14 |
| }; |
| |
| enum CodechalBindingTableOffsetVp8MeG10 |
| { |
| CODECHAL_VP8_ME_MV_DATA_G10 = 0, |
| CODECHAL_VP8_16xME_MV_DATA_G10 = 2, |
| CODECHAL_VP8_ME_DISTORTION_G10 = 3, |
| CODECHAL_VP8_ME_MIN_DIST_BRC_DATA_G10 = 4, |
| CODECHAL_VP8_VME_INTER_PRED_G10 = 5, |
| CODECHAL_VP8_ME_REF1_PIC_G10 = 6, |
| CODECHAL_VP8_ME_REF2_PIC_G10 = 8, |
| CODECHAL_VP8_ME_REF3_PIC_G10 = 10, |
| CODECHAL_VP8_ME_NUM_SURFACES_G10 = 11 |
| }; |
| |
| enum CodechalBindingTableOffsetVp8MbencG10 |
| { |
| CODECHAL_VP8_MBENC_PER_MB_OUT_G10 = 0, |
| CODECHAL_VP8_MBENC_CURR_Y_G10 = 1, |
| CODECHAL_VP8_MBENC_CURR_UV_G10 = 2, |
| }; |
| |
| enum CodechalBindingTableOffsetVp8MbencIFrameG10 |
| { |
| CODECHAL_VP8_MBENC_MB_MODE_COST_LUMA_G10 = 3, |
| CODECHAL_VP8_MBENC_BLOCK_MODE_COST_G10 = 4, |
| CODECHAL_VP8_MBENC_CHROMA_RECON_G10 = 5, |
| CODECHAL_VP8_MBENC_SEGMENTATION_MAP_G10 = 6, |
| CODECHAL_VP8_MBENC_HISTOGRAM_G10 = 7, |
| CODECHAL_VP8_MBENC_I_VME_DEBUG_STREAMOUT_G10 = 8, |
| CODECHAL_VP8_MBENC_VME_G10 = 9, |
| CODECHAL_VP8_MBENC_IDIST_G10 = 10, |
| CODECHAL_VP8_MBENC_CURR_Y_DOWNSCALED_G10 = 11, |
| CODECHAL_VP8_MBENC_VME_Coarse_Intra_G10 = 12 |
| }; |
| |
| enum CodechalBindingTableOffsetVp8MbencPFrameG10 |
| { |
| CODECHAL_VP8_MBENC_MV_DATA_FROM_ME_G10 = 3, |
| CODECHAL_VP8_MBENC_IND_MV_DATA_G10 = 4, |
| CODECHAL_VP8_MBENC_REF_MB_COUNT_G10 = 5, |
| CODECHAL_VP8_MBENC_INTER_PRED_G10 = 8, |
| CODECHAL_VP8_MBENC_REF1_PIC_G10 = 9, |
| CODECHAL_VP8_MBENC_REF2_PIC_G10 = 11, |
| CODECHAL_VP8_MBENC_REF3_PIC_G10 = 13, |
| CODECHAL_VP8_MBENC_P_PER_MB_QUANT_G10 = 14, |
| CODECHAL_VP8_MBEBC_INTER_PRED_DISTORTION_G10 = 15, |
| CODECHAL_VP8_MBEBC_PER_MV_DATA_G10 = 16, |
| CODECHAL_VP8_MBENC_MODE_COST_UPDATE_G10 = 17, |
| CODECHAL_VP8_MBENC_P_VME_DEBUG_STREAMOUT_G10 = 18, |
| CODECHAL_VP8_MBENC_NUM_SURFACES_G10 = 19 |
| }; |
| |
| enum CodechalBindingTableOffsetVp8MpuFhbG10 |
| { |
| CODECHAL_VP8_MPU_FHB_HISTOGRAM_G10 = 0, |
| CODECHAL_VP8_MPU_FHB_REF_MODE_PROBABILITY_G10 = 1, |
| CODECHAL_VP8_MPU_FHB_CURR_MODE_PROBABILITY_G10 = 2, |
| CODECHAL_VP8_MPU_FHB_REF_TOKEN_PROBABILITY_G10 = 3, |
| CODECHAL_VP8_MPU_FHB_CURR_TOKEN_PROBABILITY_G10 = 4, |
| CODECHAL_VP8_MPU_FHB_HEADER_BITSTREAM_G10 = 5, |
| CODECHAL_VP8_MPU_FHB_HEADER_METADATA_G10 = 6, |
| CODECHAL_VP8_MPU_FHB_PICTURE_STATE_G10 = 7, |
| CODECHAL_VP8_MPU_FHB_MPU_BITSTREAM_G10 = 8, |
| CODECHAL_VP8_MPU_FHB_TOKEN_BITS_DATA_TABLE_G10 = 9, |
| CODECHAL_VP8_MPU_FHB_VME_DEBUG_STREAMOUT_G10 = 10, |
| CODECHAL_VP8_MPU_FHB_ENTROPY_COST_TABLE_G10 = 11, |
| CODECHAL_VP8_MPU_MODE_COST_UPDATE_G10 = 12, |
| CODECHAL_VP8_MPU_FHB_NUM_SURFACES_G10 = 13 |
| }; |
| |
| enum CodechalBindingTableOffsetVp8TpuFhbG10 |
| { |
| CODECHAL_VP8_TPU_FHB_PAK_TOKEN_STATISTICS_G10 = 0, |
| CODECHAL_VP8_TPU_FHB_TOKEN_UPDATE_FLAGS_G10 = 1, |
| CODECHAL_VP8_TPU_FHB_ENTROPY_COST_TABLE_G10 = 2, |
| CODECHAL_VP8_TPU_FHB_HEADER_BITSTREAM_G10 = 3, |
| CODECHAL_VP8_TPU_FHB_DEFAULT_TOKEN_PROBABILITY_G10 = 4, |
| CODECHAL_VP8_TPU_FHB_PICTURE_STATE_G10 = 5, |
| CODECHAL_VP8_TPU_FHB_MPU_CURBE_DATA_G10 = 6, |
| CODECHAL_VP8_TPU_FHB_HEADER_METADATA_G10 = 7, |
| CODECHAL_VP8_TPU_FHB_TOKEN_PROBABILITY_G10 = 8, |
| CODECHAL_VP8_TPU_FHB_PAK_HW_PASS1_PROBABILITY_G10 = 9, |
| CODECHAL_VP8_TPU_FHB_KEY_TOKEN_PROBABILITY_G10 = 10, |
| CODECHAL_VP8_TPU_FHB_UPDATED_TOKEN_PROBABILITY_G10 = 11, |
| CODECHAL_VP8_TPU_FHB_PAK_HW_PASS2_PROBABILITY_G10 = 12, |
| CODECHAL_VP8_TPU_FHB_VME_DEBUG_STREAMOUT_G10 = 13, |
| CODECHAL_VP8_TPU_FHB_REPAK_DECISION_G10 = 14, |
| CODECHAL_VP8_TPU_FHB_NUM_SURFACES_G10 = 15 |
| }; |
| |
| struct MediaObjectVp8BrcInitResetStaticDataG10 |
| { |
| union |
| { |
| struct |
| { |
| uint32_t ProfileLevelMaxFrame : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW0; |
| |
| union |
| { |
| struct |
| { |
| uint32_t InitBufFullInBits : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW1; |
| |
| union |
| { |
| struct |
| { |
| uint32_t BufSizeInBits : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW2; |
| |
| union |
| { |
| struct |
| { |
| uint32_t AverageBitRate : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW3; |
| |
| union |
| { |
| struct |
| { |
| uint32_t MaxBitRate : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW4; |
| |
| union |
| { |
| struct |
| { |
| uint32_t MinBitRate : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW5; |
| |
| union |
| { |
| struct |
| { |
| uint32_t FrameRateM : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW6; |
| |
| union |
| { |
| struct |
| { |
| uint32_t FrameRateD : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW7; |
| |
| union |
| { |
| struct |
| { |
| uint32_t BRCFlag : 16; |
| uint32_t GopP : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW8; |
| |
| union |
| { |
| struct |
| { |
| uint32_t Reserved : 16; |
| uint32_t FrameWidthInBytes : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW9; |
| |
| union |
| { |
| struct |
| { |
| uint32_t FrameHeightInBytes : 16; |
| uint32_t AVBRAccuracy : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW10; |
| |
| union |
| { |
| struct |
| { |
| uint32_t AVBRConvergence : 16; |
| uint32_t MinQP : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW11; |
| |
| union |
| { |
| struct |
| { |
| uint32_t MaxQP : 16; |
| uint32_t LevelQP : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW12; |
| |
| union |
| { |
| struct |
| { |
| uint32_t MaxSection_pct : 16; |
| uint32_t OverShootCBR_pct : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW13; |
| |
| union |
| { |
| struct |
| { |
| uint32_t VBRBias_pct : 16; |
| uint32_t MinSection_pct : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW14; |
| |
| union |
| { |
| struct |
| { |
| uint32_t InstantRateThreshold0ForP : 8; |
| uint32_t InstantRateThreshold1ForP : 8; |
| uint32_t InstantRateThreshold2ForP : 8; |
| uint32_t InstantRateThreshold3ForP : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW15; |
| |
| union |
| { |
| struct |
| { |
| uint32_t Reserved : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW16; |
| |
| union |
| { |
| struct |
| { |
| uint32_t InstantRateThreshold0ForI : 8; |
| uint32_t InstantRateThreshold1ForI : 8; |
| uint32_t InstantRateThreshold2ForI : 8; |
| uint32_t InstantRateThreshold3ForI : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW17; |
| |
| union |
| { |
| struct |
| { |
| uint32_t DeviationThreshold0ForP : 8; // Signed byte |
| uint32_t DeviationThreshold1ForP : 8; // Signed byte |
| uint32_t DeviationThreshold2ForP : 8; // Signed byte |
| uint32_t DeviationThreshold3ForP : 8; // Signed byte |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW18; |
| |
| union |
| { |
| struct |
| { |
| uint32_t DeviationThreshold4ForP : 8; // Signed byte |
| uint32_t DeviationThreshold5ForP : 8; // Signed byte |
| uint32_t DeviationThreshold6ForP : 8; // Signed byte |
| uint32_t DeviationThreshold7ForP : 8; // Signed byte |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW19; |
| |
| union |
| { |
| struct |
| { |
| uint32_t DeviationThreshold0ForVBR : 8; // Signed byte |
| uint32_t DeviationThreshold1ForVBR : 8; // Signed byte |
| uint32_t DeviationThreshold2ForVBR : 8; // Signed byte |
| uint32_t DeviationThreshold3ForVBR : 8; // Signed byte |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW20; |
| |
| union |
| { |
| struct |
| { |
| uint32_t DeviationThreshold4ForVBR : 8; // Signed byte |
| uint32_t DeviationThreshold5ForVBR : 8; // Signed byte |
| uint32_t DeviationThreshold6ForVBR : 8; // Signed byte |
| uint32_t DeviationThreshold7ForVBR : 8; // Signed byte |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW21; |
| |
| union |
| { |
| struct |
| { |
| uint32_t DeviationThreshold0ForI : 8; // Signed byte |
| uint32_t DeviationThreshold1ForI : 8; // Signed byte |
| uint32_t DeviationThreshold2ForI : 8; // Signed byte |
| uint32_t DeviationThreshold3ForI : 8; // Signed byte |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW22; |
| |
| union |
| { |
| struct |
| { |
| uint32_t DeviationThreshold4ForI : 8; // Signed byte |
| uint32_t DeviationThreshold5ForI : 8; // Signed byte |
| uint32_t DeviationThreshold6ForI : 8; // Signed byte |
| uint32_t DeviationThreshold7ForI : 8; // Signed byte |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW23; |
| |
| union |
| { |
| struct |
| { |
| uint32_t NumTLevels : 8; |
| uint32_t INITBCK_MaxLevel_Ratio_U8_Layer0 : 8; |
| uint32_t INITBCK_MaxLevel_Ratio_U8_Layer1 : 8; |
| uint32_t INITBCK_MaxLevel_Ratio_U8_Layer2 : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW24; |
| |
| union |
| { |
| struct |
| { |
| uint32_t INITBCK_MaxLevel_Ratio_U8_Layer3 : 8; |
| uint32_t Reserved : 24; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW25; |
| |
| union |
| { |
| struct |
| { |
| uint32_t HistoryBufferBTI : 32; // Signed byte |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW26; |
| |
| union |
| { |
| struct |
| { |
| uint32_t DistortionBufferBTI : 32; // Signed byte |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW27; |
| |
| }; |
| |
| struct MediaObjectVp8BrcUpdateStaticDataG10 |
| { |
| union |
| { |
| struct |
| { |
| uint32_t TargetSize : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW0; |
| |
| union |
| { |
| struct |
| { |
| uint32_t FrameNumber : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW1; |
| |
| union |
| { |
| struct |
| { |
| uint32_t PictureHeaderSize : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW2; |
| |
| union |
| { |
| struct |
| { |
| uint32_t startGAdjFrame0 : 16; |
| uint32_t startGAdjFrame1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW3; |
| |
| union |
| { |
| struct |
| { |
| uint32_t startGAdjFrame2 : 16; |
| uint32_t startGAdjFrame3 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW4; |
| |
| union |
| { |
| struct |
| { |
| uint32_t TargetSizeFlag : 8; |
| uint32_t BRCFlag : 8; |
| uint32_t MaxNumPAKs : 8; |
| uint32_t CurrFrameType : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW5; |
| |
| // This offset indicates the byte position of the q_scale_type bit |
| // in the 2nd level batch buffer containing the INSERT_OBJ command |
| // for inserting the picture header data into the bitstream. |
| // This offset includes the 8 bytes of the INSERT command at the |
| // beginning of the buffer. |
| // Similarly for the VbvDelay field. |
| union |
| { |
| struct |
| { |
| uint32_t TID : 8; |
| uint32_t NumTLevels : 8; |
| uint32_t Reserved : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW6; |
| |
| // This size is the size of the entire 2nd level batch buffer |
| // containing the INSERT_OBJ command for inserting the |
| // picture header data into the bitstream. It includes the batch buffer end |
| // command at the end of the buffer. |
| union |
| { |
| struct |
| { |
| uint32_t Reserved0 : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| |
| } DW7; |
| |
| union |
| { |
| struct |
| { |
| uint32_t StartGlobalAdjustMult0 : 8; |
| uint32_t StartGlobalAdjustMult1 : 8; |
| uint32_t StartGlobalAdjustMult2 : 8; |
| uint32_t StartGlobalAdjustMult3 : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW8; |
| |
| union |
| { |
| struct |
| { |
| uint32_t StartGlobalAdjustMult4 : 8; |
| uint32_t StartGlobalAdjustDiv0 : 8; |
| uint32_t StartGlobalAdjustDiv1 : 8; |
| uint32_t StartGlobalAdjustDiv2 : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW9; |
| |
| union |
| { |
| struct |
| { |
| uint32_t StartGlobalAdjustDiv3 : 8; |
| uint32_t StartGlobalAdjustDiv4 : 8; |
| uint32_t QPThreshold0 : 8; |
| uint32_t QPThreshold1 : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW10; |
| |
| union |
| { |
| struct |
| { |
| uint32_t QPThreshold2 : 8; |
| uint32_t QPThreshold3 : 8; |
| uint32_t gRateRatioThreshold0 : 8; |
| uint32_t gRateRatioThreshold1 : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW11; |
| |
| union |
| { |
| struct |
| { |
| uint32_t gRateRatioThreshold2 : 8; |
| uint32_t gRateRatioThreshold3 : 8; |
| uint32_t gRateRatioThreshold4 : 8; |
| uint32_t gRateRatioThreshold5 : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW12; |
| |
| union |
| { |
| struct |
| { |
| uint32_t gRateRatioThresholdQP0 : 8; |
| uint32_t gRateRatioThresholdQP1 : 8; |
| uint32_t gRateRatioThresholdQP2 : 8; |
| uint32_t gRateRatioThresholdQP3 : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW13; |
| |
| union |
| { |
| struct |
| { |
| uint32_t gRateRatioThresholdQP4 : 8; |
| uint32_t gRateRatioThresholdQP5 : 8; |
| uint32_t gRateRatioThresholdQP6 : 8; |
| uint32_t IndexOfPreviousQP : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW14; |
| |
| union |
| { |
| struct |
| { |
| uint32_t FrameWidthInMB : 16; |
| uint32_t FrameHeightInMB : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW15; |
| |
| union |
| { |
| struct |
| { |
| uint32_t PFrameQPSeg0 : 8; |
| uint32_t PFrameQPSeg1 : 8; |
| uint32_t PFrameQPSeg2 : 8; |
| uint32_t PFrameQPSeg3 : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW16; |
| |
| union |
| { |
| struct |
| { |
| uint32_t KeyFrameQPSeg0 : 8; |
| uint32_t KeyFrameQPSeg1 : 8; |
| uint32_t KeyFrameQPSeg2 : 8; |
| uint32_t KeyFrameQPSeg3 : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW17; |
| |
| union |
| { |
| struct |
| { |
| uint32_t QDeltaPlane0 : 8; |
| uint32_t QDeltaPlane1 : 8; |
| uint32_t QDeltaPlane2 : 8; |
| uint32_t QDeltaPlane3 : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW18; |
| |
| union |
| { |
| struct |
| { |
| uint32_t QDeltaPlane4 : 8; |
| uint32_t QIndex : 8; |
| uint32_t MainRef : 8; |
| uint32_t RefFrameFlags : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW19; |
| |
| union |
| { |
| struct |
| { |
| uint32_t SegOn : 8; |
| uint32_t MBRC : 8; |
| uint32_t BRCMethod : 8; |
| uint32_t VMEIntraPrediction : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW20; |
| |
| union |
| { |
| struct |
| { |
| uint32_t CurrentFrameQPIndex : 8; |
| uint32_t LastFrameQPIndex : 8; |
| uint32_t GoldFrameQPIndex : 8; |
| uint32_t AltFrameQPIndex : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW21; |
| |
| union |
| { |
| struct |
| { |
| uint32_t HistorytBufferBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW22; |
| |
| union |
| { |
| struct |
| { |
| uint32_t PakStatisticsBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW23; |
| |
| union |
| { |
| struct |
| { |
| uint32_t MfxVp8EncoderCfgReadBTI :32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW24; |
| |
| union |
| { |
| struct |
| { |
| uint32_t MfxVp8EncoderCfgWriteBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW25; |
| |
| union |
| { |
| struct |
| { |
| uint32_t MBEncCurbeReadBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW26; |
| |
| union |
| { |
| struct |
| { |
| uint32_t MBEncCurbeWriteBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW27; |
| |
| union |
| { |
| struct |
| { |
| uint32_t DistortionBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW28; |
| |
| union |
| { |
| struct |
| { |
| uint32_t ConstantDataBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW29; |
| |
| union |
| { |
| struct |
| { |
| uint32_t SegmentMapBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW30; |
| |
| union |
| { |
| struct |
| { |
| uint32_t MpuCurbeReadBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW31; |
| |
| union |
| { |
| struct |
| { |
| uint32_t MpuCurbeWriteBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW32; |
| |
| union |
| { |
| struct |
| { |
| uint32_t TpuCurbeReadBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW33; |
| |
| union |
| { |
| struct |
| { |
| uint32_t TpuCurbeWriteBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW34; |
| |
| }; |
| |
| struct MediaObjectVp8MeStaticDataG10 |
| { |
| // 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 Reserved0 : MOS_BITFIELD_RANGE(3, 4); |
| uint32_t EarlyImeSuccessEn : MOS_BITFIELD_BIT(5); |
| uint32_t Reserved1 : MOS_BITFIELD_BIT(6); |
| uint32_t T8x8FlagForInterEn : MOS_BITFIELD_BIT(7); |
| uint32_t Reserved2 : 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 Reserved0 : MOS_BITFIELD_RANGE(6,15); |
| uint32_t BiWeight : MOS_BITFIELD_RANGE(16,21); |
| uint32_t Reserved1 : MOS_BITFIELD_RANGE(22,27); |
| uint32_t UniMixDisable : MOS_BITFIELD_BIT(28); |
| uint32_t Reserved2 : 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 Reserved0 : MOS_BITFIELD_RANGE(16,31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW2; |
| |
| // DW3 |
| union |
| { |
| struct |
| { |
| uint32_t SrcSize : MOS_BITFIELD_RANGE(0,1); |
| uint32_t Reserved0 : 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 Reserved1 : MOS_BITFIELD_BIT(31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW3; |
| |
| // DW4 |
| union |
| { |
| struct |
| { |
| uint32_t Reserved0 : MOS_BITFIELD_RANGE(0,7); |
| uint32_t PictureHeightMinus1 : MOS_BITFIELD_RANGE(8,15); |
| uint32_t PictureWidth : MOS_BITFIELD_RANGE(16,23); |
| uint32_t Reserved1 : MOS_BITFIELD_RANGE(24,31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW4; |
| |
| // DW5 |
| union |
| { |
| struct |
| { |
| uint32_t Reserved0 : 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 Reserved0 : MOS_BITFIELD_RANGE(0,2); |
| uint32_t MEModes : MOS_BITFIELD_RANGE(3,4); |
| uint32_t Reserved1 : 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 Reserved0 : 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 Reserved1 : 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 ActualMBWidth : MOS_BITFIELD_RANGE(16,23); |
| uint32_t ActualMBHeight : MOS_BITFIELD_RANGE(24,31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW13; |
| |
| // DW14 |
| union |
| { |
| struct |
| { |
| uint32_t L0RefPicPolarityBits : MOS_BITFIELD_RANGE(0,7); |
| uint32_t L1RefPicPolarityBits : MOS_BITFIELD_RANGE(8,9); |
| uint32_t Reserved : MOS_BITFIELD_RANGE(10,31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW14; |
| |
| // DW15 |
| union |
| { |
| struct |
| { |
| uint32_t Reserved : MOS_BITFIELD_RANGE(0,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 Reserved0 : MOS_BITFIELD_RANGE(0,31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW30; |
| |
| // DW31 |
| union |
| { |
| struct |
| { |
| uint32_t Reserved0 : MOS_BITFIELD_RANGE(0,31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW31; |
| |
| // DW32 |
| union |
| { |
| struct |
| { |
| uint32_t VP8MeMVOutputDataBTI : MOS_BITFIELD_RANGE(0,31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW32; |
| |
| // DW33 |
| union |
| { |
| struct |
| { |
| uint32_t VP8MeMVInputDataBTI : MOS_BITFIELD_RANGE(0,31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW33; |
| |
| // DW34 |
| union |
| { |
| struct |
| { |
| uint32_t VP8MeDistortionBTI : MOS_BITFIELD_RANGE(0,31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW34; |
| |
| // DW35 |
| union |
| { |
| struct |
| { |
| uint32_t VP8MeMinDistBrcBTI : MOS_BITFIELD_RANGE(0,31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW35; |
| |
| // DW36 |
| union |
| { |
| struct |
| { |
| uint32_t ForwardRefBTI : MOS_BITFIELD_RANGE(0,31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW36; |
| |
| // DW37 |
| union |
| { |
| struct |
| { |
| uint32_t BackwardRefBTI : MOS_BITFIELD_RANGE(0,31); |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW37; |
| }; |
| C_ASSERT(MOS_BYTES_TO_DWORDS(sizeof(struct MediaObjectVp8MeStaticDataG10)) == 38); |
| |
| struct MediaObjectVp8MbencIStaticDataG10 |
| { |
| // DW0 |
| union |
| { |
| struct |
| { |
| uint32_t FrameWidth : 16; |
| uint32_t FrameHeight : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW0; |
| |
| // DW1 |
| union |
| { |
| struct |
| { |
| uint32_t FrameType : 1; |
| uint32_t EnableSegmentation : 1; |
| uint32_t EnableHWIntraPrediction : 1; |
| uint32_t EnableDebugDumps : 1; |
| uint32_t EnableCoeffClamp : 1; |
| uint32_t EnableEnableChromaIPEnhancement : 1; |
| uint32_t EnableMPUHistogramUpdate : 1; |
| uint32_t ReservedMBZ : 1; |
| uint32_t VMEEnableTMCheck : 1; |
| uint32_t VMEDistortionMeasure : 2; |
| uint32_t : 21; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW1; |
| |
| // DW2 |
| union |
| { |
| struct |
| { |
| uint32_t LambdaSegment0 : 16; |
| uint32_t LambdaSegment1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW2; |
| |
| // DW3 |
| union |
| { |
| struct |
| { |
| uint32_t LambdaSegment2 : 16; |
| uint32_t LambdaSegment3 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW3; |
| |
| // DW4 |
| union |
| { |
| struct |
| { |
| uint32_t AllDCBiasSegment0 : 16; |
| uint32_t AllDCBiasSegment1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW4; |
| |
| // DW5 |
| union |
| { |
| struct |
| { |
| uint32_t AllDCBiasSegment2 : 16; |
| uint32_t AllDCBiasSegment3 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW5; |
| |
| // DW6 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaDCDeQuantSegment0 : 16; |
| uint32_t ChromaDCDeQuantSegment1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW6; |
| |
| // DW7 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaDCDeQuantSegment2 : 16; |
| uint32_t ChromaDCDeQuantSegment3 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW7; |
| |
| // DW8 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaACDeQuantSegment0 : 16; |
| uint32_t ChromaACDeQuantSegment1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW8; |
| |
| // DW9 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaACDeQuantSegment2 : 16; |
| uint32_t ChromaACDeQuantSegment3 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW9; |
| |
| // DW10 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaAC0Threshold0Segment0 : 16; |
| uint32_t ChromaAC0Threshold1Segment0 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW10; |
| |
| // DW11 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaAC0Threshold0Segment1 : 16; |
| uint32_t ChromaAC0Threshold1Segment1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW11; |
| |
| // DW12 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaAC0Threshold0Segment2 : 16; |
| uint32_t ChromaAC0Threshold1Segment2 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW12; |
| |
| // DW13 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaAC0Threshold0Segment3 : 16; |
| uint32_t ChromaAC0Threshold1Segment3 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW13; |
| |
| // DW14 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaDCThreshold0Segment0 : 16; |
| uint32_t ChromaDCThreshold1Segment0 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW14; |
| |
| // DW15 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaDCThreshold2Segment0 : 16; |
| uint32_t ChromaDCThreshold3Segment0 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW15; |
| |
| // DW16 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaDCThreshold0Segment1 : 16; |
| uint32_t ChromaDCThreshold1Segment1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW16; |
| |
| // DW17 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaDCThreshold2Segment1 : 16; |
| uint32_t ChromaDCThreshold3Segment1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW17; |
| |
| // DW18 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaDCThreshold0Segment2 : 16; |
| uint32_t ChromaDCThreshold1Segment2 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW18; |
| |
| // DW19 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaDCThreshold2Segment2 : 16; |
| uint32_t ChromaDCThreshold3Segment2 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW19; |
| |
| // DW20 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaDCThreshold0Segment3 : 16; |
| uint32_t ChromaDCThreshold1Segment3 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW20; |
| |
| // DW21 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaDCThreshold2Segment3 : 16; |
| uint32_t ChromaDCThreshold3Segment3 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW21; |
| |
| // DW22 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaAC1ThresholdSegment0 : 16; |
| uint32_t ChromaAC1ThresholdSegment1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW22; |
| |
| // DW23 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaAC1ThresholdSegment2 : 16; |
| uint32_t ChromaAC1ThresholdSegment3 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW23; |
| |
| // DW24 |
| union |
| { |
| struct |
| { |
| uint32_t VME16x16CostSegment0 : 8; |
| uint32_t VME16x16CostSegment1 : 8; |
| uint32_t VME16x16CostSegment2 : 8; |
| uint32_t VME16x16CostSegment3 : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW24; |
| |
| // DW25 |
| union |
| { |
| struct |
| { |
| uint32_t VME4x4CostSegment0 : 8; |
| uint32_t VME4x4CostSegment1 : 8; |
| uint32_t VME4x4CostSegment2 : 8; |
| uint32_t VME4x4CostSegment3 : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW25; |
| |
| // DW26 |
| union |
| { |
| struct |
| { |
| uint32_t VME16x16NonDCPenaltySegment0 : 8; |
| uint32_t VME16x16NonDCPenaltySegment1 : 8; |
| uint32_t VME16x16NonDCPenaltySegment2 : 8; |
| uint32_t VME16x16NonDCPenaltySegment3 : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW26; |
| |
| // DW27 |
| union |
| { |
| struct |
| { |
| uint32_t VME4x4NonDCPenaltySegment0 : 8; |
| uint32_t VME4x4NonDCPenaltySegment1 : 8; |
| uint32_t VME4x4NonDCPenaltySegment2 : 8; |
| uint32_t VME4x4NonDCPenaltySegment3 : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW27; |
| |
| // DW28 |
| union |
| { |
| struct |
| { |
| uint32_t : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW28; |
| |
| // DW29 |
| union |
| { |
| struct |
| { |
| uint32_t : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW29; |
| |
| // DW30 |
| union |
| { |
| struct |
| { |
| uint32_t : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW30; |
| |
| // DW31 |
| union |
| { |
| struct |
| { |
| uint32_t : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW31; |
| |
| // DW32 |
| union |
| { |
| struct |
| { |
| uint32_t MBEncPerMBOutDataSurfBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW32; |
| |
| // DW33 |
| union |
| { |
| struct |
| { |
| uint32_t MBEncCurrYBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW33; |
| |
| // DW34 |
| union |
| { |
| struct |
| { |
| uint32_t MBEncCurrUVBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW34; |
| |
| // DW35 |
| union |
| { |
| struct |
| { |
| uint32_t MBModeCostLumaBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW35; |
| |
| // DW36 |
| union |
| { |
| struct |
| { |
| uint32_t MBEncBlockModeCostBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW36; |
| |
| // DW37 |
| union |
| { |
| struct |
| { |
| uint32_t ChromaReconSurfBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW37; |
| |
| // DW38 |
| union |
| { |
| struct |
| { |
| uint32_t SegmentationMapBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW38; |
| |
| // DW39 |
| union |
| { |
| struct |
| { |
| uint32_t HistogramBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW39; |
| |
| // DW40 |
| union |
| { |
| struct |
| { |
| uint32_t MBEncVMEDebugStreamOutBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW40; |
| |
| // DW41 |
| union |
| { |
| struct |
| { |
| uint32_t VmeBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW41; |
| |
| // DW42 |
| union |
| { |
| struct |
| { |
| uint32_t IDistortionSurfaceBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW42; |
| |
| // DW43 |
| union |
| { |
| struct |
| { |
| uint32_t MBEncCurrYDownScaledBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW43; |
| |
| // DW44 |
| union |
| { |
| struct |
| { |
| uint32_t MBEncVMECoarseIntraBTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW44; |
| } ; |
| C_ASSERT(MOS_BYTES_TO_DWORDS(sizeof(struct MediaObjectVp8MbencIStaticDataG10)) == 45); |
| |
| struct MediaObjectVp8MbencPStaticDataG10 |
| { |
| // DW0 |
| union |
| { |
| struct |
| { |
| uint32_t FrameWidth : 16; |
| uint32_t FrameHeight : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW0; |
| //DW1 |
| union |
| { |
| struct |
| { |
| uint32_t FrameType :1; |
| uint32_t MultiplePred :2; |
| uint32_t HMEEnable :1; |
| uint32_t HMECombineOverlap :2; |
| uint32_t AllFractional :1; |
| uint32_t EnableTemporalScalability :1; |
| uint32_t HMECombinedExtraSU :8; |
| uint32_t RefFrameFlags :4; |
| uint32_t EnableSegmentation :1; |
| uint32_t EnableSegmentationInfoUpdate :1; |
| uint32_t EnableCoeffClamp :1; |
| uint32_t MultiReferenceQPCheck :1; |
| uint32_t ModecostEnableFlag :1; |
| uint32_t MainRef :6; |
| uint32_t EnableDebugDumps :1; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| |
| } DW1; |
| |
| //DW2 |
| union |
| { |
| struct |
| { |
| uint32_t LambdaIntraSegment0 :16; |
| uint32_t LambdaInterSegment0 :16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW2; |
| |
| //DW3 |
| union |
| { |
| struct |
| { |
| uint32_t LambdaIntraSegment1 :16; |
| uint32_t LambdaInterSegment1 :16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW3; |
| |
| //DW4 |
| union |
| { |
| struct |
| { |
| uint32_t LambdaIntraSegment2 :16; |
| uint32_t LambdaInterSegment2 :16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW4; |
| |
| //DW5 |
| union |
| { |
| struct |
| { |
| uint32_t LambdaIntraSegment3 :16; |
| uint32_t LambdaInterSegment3 :16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW5; |
| |
| // DW6 |
| union |
| { |
| struct |
| { |
| uint32_t ReferenceFrameSignBias_0 : 8; |
| uint32_t ReferenceFrameSignBias_1 : 8; |
| uint32_t ReferenceFrameSignBias_2 : 8; |
| uint32_t ReferenceFrameSignBias_3 : 8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW6; |
| |
| //DW7 |
| union |
| { |
| struct |
| { |
| uint32_t RawDistThreshold :16; |
| uint32_t TemporalLayerID :8; |
| uint32_t ReservedMBZ :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW7; |
| |
| //DW8 |
| union |
| { |
| struct |
| { |
| uint32_t SkipModeEnable :1; |
| uint32_t AdaptiveSearchEnable :1; |
| uint32_t BidirectionalMixDisbale :1; |
| uint32_t ReservedMBZ1 :2; |
| uint32_t EarlyIMESuccessEnable :1; |
| uint32_t ReservedMBZ2 :1; |
| uint32_t Transform8x8FlagForInterEnable :1; |
| uint32_t ReservedMBZ3 :16; |
| uint32_t EarlyIMESuccessfulStopThreshold :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW8; |
| |
| //DW9 |
| union |
| { |
| struct |
| { |
| uint32_t MaximumNumberOfMotionVectors :6; |
| uint32_t ReservedMBZ1 :2; |
| uint32_t RefIDPolarityBits :8; |
| uint32_t BidirectionalWeight :6; |
| uint32_t ReservedMBZ2 :6; |
| uint32_t UnidirectionMixEnable :1; |
| uint32_t RefPixelBiasEnable :1; |
| uint32_t ReservedMBZ3 :2; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW9; |
| |
| //DW10 |
| union |
| { |
| struct |
| { |
| uint32_t MaxFixedSearchPathLength :8; |
| uint32_t MaximumSearchPathLength :8; |
| uint32_t ReservedMBZ :16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW10; |
| |
| //DW11 |
| union |
| { |
| struct |
| { |
| uint32_t SourceBlockSize :2; |
| uint32_t ReservedMBZ1 :2; |
| uint32_t InterMbTypeRoadMap :2; |
| uint32_t SourceAccess :1; |
| uint32_t ReferenceAccess :1; |
| uint32_t SearchControl :3; |
| uint32_t DualSearchPathOption :1; |
| uint32_t SubPelMode :2; |
| uint32_t SkipModeType :1; |
| uint32_t DisableFieldCacheAllocation :1; |
| uint32_t ProcessInterChromaPixelsMode :1; |
| uint32_t ForwardTransformSkipCheckEnable :1; |
| uint32_t BMEdisableforFBRMessage :1; |
| uint32_t BlockBasedSkipEnable :1; |
| uint32_t InterSADMeasureAdjustment :2; |
| uint32_t IntraSADMeasureAdjustment :2; |
| uint32_t SubMacroBlockSubPartitionMask :6; |
| uint32_t ReservedMBZ2 :1; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW11; |
| |
| //DW12 |
| union |
| { |
| struct |
| { |
| uint32_t ReservedMBZ :16; |
| uint32_t ReferenceSearchWindowsWidth :8; |
| uint32_t ReferenceSearchWindowsHeight :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW12; |
| |
| // DW13 |
| union |
| { |
| struct |
| { |
| uint32_t Mode0CostSegment0 :8; |
| uint32_t Mode1CostSegment0 :8; |
| uint32_t Mode2CostSegment0 :8; |
| uint32_t Mode3CostSegment0 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW13; |
| |
| // DW14 |
| union |
| { |
| struct |
| { |
| uint32_t Mode4CostSegment0 :8; |
| uint32_t Mode5CostSegment0 :8; |
| uint32_t Mode6CostSegment0 :8; |
| uint32_t Mode7CostSegment0 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW14; |
| |
| // DW15 |
| union |
| { |
| struct |
| { |
| uint32_t Mode8CostSegment0 :8; |
| uint32_t Mode9CostSegment0 :8; |
| uint32_t RefIDCostSegment0 :8; |
| uint32_t ChromaCostSegment0 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW15; |
| |
| // 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; |
| |
| // DW30 |
| union |
| { |
| struct |
| { |
| uint32_t MV0CostSegment0 :8; |
| uint32_t MV1CostSegment0 :8; |
| uint32_t MV2CostSegment0 :8; |
| uint32_t MV3CostSegment0 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW30; |
| |
| // DW31 |
| union |
| { |
| struct |
| { |
| uint32_t MV4CostSegment0 :8; |
| uint32_t MV5CostSegment0 :8; |
| uint32_t MV6CostSegment0 :8; |
| uint32_t MV7CostSegment0 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW31; |
| |
| // DW32 |
| union |
| { |
| struct |
| { |
| uint32_t Intra16x16NoDCPenaltySegment0 :8; |
| uint32_t Intra16x16NoDCPenaltySegment1 :8; |
| uint32_t ReservedMBZ1 :7; |
| uint32_t BilinearEnable :1; |
| uint32_t ReservedMBZ2 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW32; |
| |
| // DW33 |
| union |
| { |
| struct |
| { |
| uint32_t HMECombineLen :16; |
| uint32_t Intra16x16NoDCPenaltySegment2 :8; |
| uint32_t Intra16x16NoDCPenaltySegment3 :8; |
| |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW33; |
| |
| // DW34 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_0_0_0 : 16; |
| uint32_t MvRefCostContext_0_0_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW34; |
| |
| // DW35 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_0_1_0 : 16; |
| uint32_t MvRefCostContext_0_1_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW35; |
| |
| // DW36 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_0_2_0 : 16; |
| uint32_t MvRefCostContext_0_2_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW36; |
| |
| // DW37 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_0_3_0 : 16; |
| uint32_t MvRefCostContext_0_3_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW37; |
| |
| // DW38 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_1_0_0 : 16; |
| uint32_t MvRefCostContext_1_0_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW38; |
| |
| // DW39 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_1_1_0 : 16; |
| uint32_t MvRefCostContext_1_1_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW39; |
| |
| // DW40 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_1_2_0 : 16; |
| uint32_t MvRefCostContext_1_2_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW40; |
| |
| // DW41 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_1_3_0 : 16; |
| uint32_t MvRefCostContext_1_3_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW41; |
| |
| // DW42 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_2_0_0 : 16; |
| uint32_t MvRefCostContext_2_0_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW42; |
| |
| // DW43 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_2_1_0 : 16; |
| uint32_t MvRefCostContext_2_1_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW43; |
| |
| // DW44 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_2_2_0 : 16; |
| uint32_t MvRefCostContext_2_2_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW44; |
| |
| // DW45 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_2_3_0 : 16; |
| uint32_t MvRefCostContext_2_3_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW45; |
| |
| // DW46 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_3_0_0 : 16; |
| uint32_t MvRefCostContext_3_0_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW46; |
| |
| // DW47 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_3_1_0 : 16; |
| uint32_t MvRefCostContext_3_1_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW47; |
| |
| // DW48 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_3_2_0 : 16; |
| uint32_t MvRefCostContext_3_2_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW48; |
| |
| // DW49 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_3_3_0 : 16; |
| uint32_t MvRefCostContext_3_3_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW49; |
| |
| // DW50 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_4_0_0 : 16; |
| uint32_t MvRefCostContext_4_0_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW50; |
| |
| // DW51 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_4_1_0 : 16; |
| uint32_t MvRefCostContext_4_1_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW51; |
| |
| // DW52 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_4_2_0 : 16; |
| uint32_t MvRefCostContext_4_2_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW52; |
| |
| // DW53 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_4_3_0 : 16; |
| uint32_t MvRefCostContext_4_3_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW53; |
| |
| // DW54 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_5_0_0 : 16; |
| uint32_t MvRefCostContext_5_0_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW54; |
| |
| // DW55 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_5_1_0 : 16; |
| uint32_t MvRefCostContext_5_1_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW55; |
| |
| // DW56 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_5_2_0 : 16; |
| uint32_t MvRefCostContext_5_2_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW56; |
| |
| // DW57 |
| union |
| { |
| struct |
| { |
| uint32_t MvRefCostContext_5_3_0 : 16; |
| uint32_t MvRefCostContext_5_3_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW57; |
| |
| // DW58 |
| union |
| { |
| struct |
| { |
| uint32_t EncCost16x16 : 16; |
| uint32_t EncCost16x8 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW58; |
| |
| // DW59 |
| union |
| { |
| struct |
| { |
| uint32_t EncCost8x8 : 16; |
| uint32_t EncCost4x4 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW59; |
| |
| // DW60 |
| union |
| { |
| struct |
| { |
| uint32_t FrameCountProbabilityRefFrameCost_0 : 16; |
| uint32_t FrameCountProbabilityRefFrameCost_1 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW60; |
| |
| // DW61 |
| union |
| { |
| struct |
| { |
| uint32_t FrameCountProbabilityRefFrameCost_2 : 16; |
| uint32_t FrameCountProbabilityRefFrameCost_3 : 16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW61; |
| |
| // DW62 |
| union |
| { |
| struct |
| { |
| uint32_t AverageQPOfLastRefFrame :8; |
| uint32_t AverageQPOfGoldRefFrame :8; |
| uint32_t AverageQPOfAltRefFrame :8; |
| uint32_t ReservedMBZ :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| |
| } DW62; |
| |
| // DW63 |
| union |
| { |
| struct |
| { |
| uint32_t Intra4x4NoDCPenaltySegment0 :8; |
| uint32_t Intra4x4NoDCPenaltySegment1 :8; |
| uint32_t Intra4x4NoDCPenaltySegment2 :8; |
| uint32_t Intra4x4NoDCPenaltySegment3 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| |
| } DW63; |
| |
| // DW64 |
| union |
| { |
| struct |
| { |
| uint32_t Mode0CostSegment1 :8; |
| uint32_t Mode1CostSegment1 :8; |
| uint32_t Mode2CostSegment1 :8; |
| uint32_t Mode3CostSegment1 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW64; |
| |
| // DW65 |
| union |
| { |
| struct |
| { |
| uint32_t Mode4CostSegment1 :8; |
| uint32_t Mode5CostSegment1 :8; |
| uint32_t Mode6CostSegment1 :8; |
| uint32_t Mode7CostSegment1 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW65; |
| |
| // DW66 |
| union |
| { |
| struct |
| { |
| uint32_t Mode8CostSegment1 :8; |
| uint32_t Mode9CostSegment1 :8; |
| uint32_t RefIDCostSegment1 :8; |
| uint32_t ChromaCostSegment1 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW66; |
| |
| // DW67 |
| union |
| { |
| struct |
| { |
| uint32_t MV0CostSegment1 :8; |
| uint32_t MV1CostSegment1 :8; |
| uint32_t MV2CostSegment1 :8; |
| uint32_t MV3CostSegment1 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW67; |
| |
| // DW68 |
| union |
| { |
| struct |
| { |
| uint32_t MV4CostSegment1 :8; |
| uint32_t MV5CostSegment1 :8; |
| uint32_t MV6CostSegment1 :8; |
| uint32_t MV7CostSegment1 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW68; |
| |
| // DW69 |
| union |
| { |
| struct |
| { |
| uint32_t Mode0CostSegment2 :8; |
| uint32_t Mode1CostSegment2 :8; |
| uint32_t Mode2CostSegment2 :8; |
| uint32_t Mode3CostSegment2 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW69; |
| |
| // DW70 |
| union |
| { |
| struct |
| { |
| uint32_t Mode4CostSegment2 :8; |
| uint32_t Mode5CostSegment2 :8; |
| uint32_t Mode6CostSegment2 :8; |
| uint32_t Mode7CostSegment2 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW70; |
| |
| // DW71 |
| union |
| { |
| struct |
| { |
| uint32_t Mode8CostSegment2 :8; |
| uint32_t Mode9CostSegment2 :8; |
| uint32_t RefIDCostSegment2 :8; |
| uint32_t ChromaCostSegment2 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW71; |
| |
| // DW72 |
| union |
| { |
| struct |
| { |
| uint32_t MV0CostSegment2 :8; |
| uint32_t MV1CostSegment2 :8; |
| uint32_t MV2CostSegment2 :8; |
| uint32_t MV3CostSegment2 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW72; |
| |
| // DW73 |
| union |
| { |
| struct |
| { |
| uint32_t MV4CostSegment2 :8; |
| uint32_t MV5CostSegment2 :8; |
| uint32_t MV6CostSegment2 :8; |
| uint32_t MV7CostSegment2 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW73; |
| |
| // DW74 |
| union |
| { |
| struct |
| { |
| uint32_t Mode0CostSegment3 :8; |
| uint32_t Mode1CostSegment3 :8; |
| uint32_t Mode2CostSegment3 :8; |
| uint32_t Mode3CostSegment3 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW74; |
| |
| // DW75 |
| union |
| { |
| struct |
| { |
| uint32_t Mode4CostSegment3 :8; |
| uint32_t Mode5CostSegment3 :8; |
| uint32_t Mode6CostSegment3 :8; |
| uint32_t Mode7CostSegment3 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW75; |
| |
| // DW76 |
| union |
| { |
| struct |
| { |
| uint32_t Mode8CostSegment3 :8; |
| uint32_t Mode9CostSegment3 :8; |
| uint32_t RefIDCostSegment3 :8; |
| uint32_t ChromaCostSegment3 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW76; |
| |
| // DW77 |
| union |
| { |
| struct |
| { |
| uint32_t MV0CostSegment3 :8; |
| uint32_t MV1CostSegment3 :8; |
| uint32_t MV2CostSegment3 :8; |
| uint32_t MV3CostSegment3 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW77; |
| |
| // DW78 |
| union |
| { |
| struct |
| { |
| uint32_t MV4CostSegment3 :8; |
| uint32_t MV5CostSegment3 :8; |
| uint32_t MV6CostSegment3 :8; |
| uint32_t MV7CostSegment3 :8; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW78; |
| |
| // DW79 |
| union |
| { |
| struct |
| { |
| uint32_t NewMVSkipThresholdSegment0 :16; |
| uint32_t NewMVSkipThresholdSegment1 :16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW79; |
| |
| // DW80 |
| union |
| { |
| struct |
| { |
| uint32_t NewMVSkipThresholdSegment2 :16; |
| uint32_t NewMVSkipThresholdSegment3 :16; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW80; |
| |
| // DW81 |
| union |
| { |
| struct |
| { |
| uint32_t PerMbOutputDataSurfaceBTI :32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW81; |
| |
| // DW82 |
| union |
| { |
| struct |
| { |
| uint32_t CurrentPictureYSurfaceBTI :32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW82; |
| |
| // DW83 |
| union |
| { |
| struct |
| { |
| uint32_t CurrentPictureInterleavedUVSurfaceBTI :32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW83; |
| |
| // DW84 |
| union |
| { |
| struct |
| { |
| uint32_t HMEMVDataSurfaceBTI :32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW84; |
| |
| // DW85 |
| union |
| { |
| struct |
| { |
| uint32_t MVDataSurfaceBTI :32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW85; |
| |
| // DW86 |
| union |
| { |
| struct |
| { |
| uint32_t MbCountPerReferenceFrameBTI :32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW86; |
| |
| // DW87 |
| union |
| { |
| struct |
| { |
| uint32_t VMEInterPredictionBTI :32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW87; |
| |
| // DW88 |
| union |
| { |
| struct |
| { |
| uint32_t ActiveRef1BTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW88; |
| |
| // DW89 |
| union |
| { |
| struct |
| { |
| uint32_t ActiveRef2BTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW89; |
| |
| // DW90 |
| union |
| { |
| struct |
| { |
| uint32_t ActiveRef3BTI : 32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW90; |
| |
| // DW91 |
| union |
| { |
| struct |
| { |
| uint32_t PerMbQuantDataBTI :32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW91; |
| |
| // DW92 |
| union |
| { |
| struct |
| { |
| uint32_t SegmentMapBTI :32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW92; |
| |
| // DW93 |
| union |
| { |
| struct |
| { |
| uint32_t InterPredictionDistortionBTI :32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW93; |
| |
| // DW94 |
| union |
| { |
| struct |
| { |
| uint32_t HistogramBTI :32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW94; |
| |
| // DW95 |
| union |
| { |
| struct |
| { |
| uint32_t PredMVDataBTI :32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW95; |
| |
| // DW96 |
| union |
| { |
| struct |
| { |
| uint32_t ModeCostUpdateBTI :32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW96; |
| |
| // DW97 |
| union |
| { |
| struct |
| { |
| uint32_t KernelDebugDumpBTI :32; |
| }; |
| struct |
| { |
| uint32_t Value; |
| }; |
| } DW97; |
| }; |
| C_ASSERT(MOS_BYTES_TO_DWORDS(sizeof(struct MediaObjectVp8MbencPStaticDataG10)) == 98); |
| |
| struct MediaObjectVp8MpuFhbStaticDataG10 |
| { |
| // uint32_t 0 |
| union { |
| struct { |
| uint32_t FrameWidth : MOS_BITFIELD_RANGE( 0,15 ); // |
| uint32_t FrameHeight : MOS_BITFIELD_RANGE( 16,31 ); // |
| }; |
| uint32_t Value; |
| } DW0; |
| |
| // uint32_t 1 |
| union { |
| struct { |
| uint32_t FrameType : MOS_BITFIELD_BIT( 0 ); // |
| uint32_t Version : MOS_BITFIELD_RANGE( 1, 3 ); // |
| uint32_t ShowFrame : MOS_BITFIELD_BIT( 4 ); // |
| uint32_t HorizontalScaleCode : MOS_BITFIELD_RANGE( 5, 6 ); // |
| uint32_t VerticalScaleCode : MOS_BITFIELD_RANGE( 7, 8 ); // |
| uint32_t ColorSpaceType : MOS_BITFIELD_BIT( 9 ); // |
| uint32_t ClampType : MOS_BITFIELD_BIT( 10 ); // |
| uint32_t PartitionNumL2 : MOS_BITFIELD_RANGE( 11,12 ); // |
| uint32_t EnableSegmentation : MOS_BITFIELD_BIT( 13 ); // |
| uint32_t SegMapUpdate : MOS_BITFIELD_BIT( 14 ); // |
| uint32_t SegmentationFeatureUpdate : MOS_BITFIELD_BIT( 15 ); // |
| uint32_t SegmentationFeatureMode : MOS_BITFIELD_BIT( 16 ); // |
| uint32_t LoopFilterType : MOS_BITFIELD_BIT( 17 ); // |
| uint32_t SharpnessLevel : MOS_BITFIELD_RANGE( 18,20 ); // |
| uint32_t LoopFilterAdjustmentOn : MOS_BITFIELD_BIT( 21 ); // |
| uint32_t MBNoCoeffiscientSkip : MOS_BITFIELD_BIT( 22 ); // |
| uint32_t GoldenReferenceCopyFlag : MOS_BITFIELD_RANGE( 23,24 ); // |
| uint32_t AlternateReferenceCopyFlag : MOS_BITFIELD_RANGE( 25,26 ); // |
| uint32_t LastFrameUpdate : MOS_BITFIELD_BIT( 27 ); // |
| uint32_t SignBiasGolden : MOS_BITFIELD_BIT( 28 ); // |
| uint32_t SignBiasAltRef : MOS_BITFIELD_BIT( 29 ); // |
| uint32_t RefreshEntropyP : MOS_BITFIELD_BIT( 30 ); // |
| uint32_t ForcedLFUpdateForKeyFrame : MOS_BITFIELD_BIT( 31 ); // |
| }; |
| uint32_t Value; |
| } DW1; |
| |
| // uint32_t 2 |
| union { |
| struct { |
| uint32_t LoopFilterLevel : MOS_BITFIELD_RANGE( 0, 5 ); // |
| uint32_t : MOS_BITFIELD_RANGE( 6, 7 ); // |
| uint32_t Qindex : MOS_BITFIELD_RANGE( 8,14 ); // |
| uint32_t : MOS_BITFIELD_BIT( 15 ); // |
| uint32_t Y1DCQindex : MOS_BITFIELD_RANGE( 16,23 ); // |
| uint32_t Y2DCQindex : MOS_BITFIELD_RANGE( 24,31 ); // |
| }; |
| uint32_t Value; |
| } DW2; |
| |
| // uint32_t 3 |
| union { |
| struct { |
| uint32_t Y2ACQindex : MOS_BITFIELD_RANGE( 0, 7 ); // |
| uint32_t UVDCQindex : MOS_BITFIELD_RANGE( 8,15 ); // |
| uint32_t UVACQindex : MOS_BITFIELD_RANGE( 16,23 ); // |
| uint32_t FeatureData0Segment0 : MOS_BITFIELD_RANGE( 24,31 ); // |
| }; |
| uint32_t Value; |
| } DW3; |
| |
| // uint32_t 4 |
| union { |
| struct { |
| uint32_t FeatureData0Segment1 : MOS_BITFIELD_RANGE( 0, 7 ); // |
| uint32_t FeatureData0Segment2 : MOS_BITFIELD_RANGE( 8,15 ); // |
| uint32_t FeatureData0Segment3 : MOS_BITFIELD_RANGE( 16,23 ); // |
| uint32_t FeatureData1Segment0 : MOS_BITFIELD_RANGE( 24,31 ); // |
| }; |
| uint32_t Value; |
| } DW4; |
| |
| // uint32_t 5 |
| union { |
| struct { |
| uint32_t FeatureData1Segment1 : MOS_BITFIELD_RANGE( 0, 7 ); // |
| uint32_t FeatureData1Segment2 : MOS_BITFIELD_RANGE( 8,15 ); // |
| uint32_t FeatureData1Segment3 : MOS_BITFIELD_RANGE( 16,23 ); // |
| uint32_t RefLFDelta0 : MOS_BITFIELD_RANGE( 24,31 ); // |
| }; |
| uint32_t Value; |
| } DW5; |
| |
| // uint32_t 6 |
| union { |
| struct { |
| uint32_t RefLFDelta1 : MOS_BITFIELD_RANGE( 0, 7 ); // |
| uint32_t RefLFDelta2 : MOS_BITFIELD_RANGE( 8,15 ); // |
| uint32_t RefLFDelta3 : MOS_BITFIELD_RANGE( 16,23 ); // |
| uint32_t ModeLFDelta0 : MOS_BITFIELD_RANGE( 24,31 ); // |
| }; |
| uint32_t Value; |
| } DW6; |
| |
| // uint32_t 7 |
| union { |
| struct { |
| uint32_t ModeLFDelta1 : MOS_BITFIELD_RANGE( 0, 7 ); // |
| uint32_t ModeLFDelta2 : MOS_BITFIELD_RANGE( 8,15 ); // |
| uint32_t ModeLFDelta3 : MOS_BITFIELD_RANGE( 16,23 ); // |
| uint32_t ForcedTokenSurfaceRead : MOS_BITFIELD_BIT( 24 ); |
| uint32_t ModecostEnableFlag : MOS_BITFIELD_BIT( 25 ); |
| uint32_t MCFilterSelect : MOS_BITFIELD_BIT( 26 ); |
| uint32_t ChromaFullPixelMCFilterMode : MOS_BITFIELD_BIT(27); |
| uint32_t MaxNumPakPasses : MOS_BITFIELD_RANGE(28, 31); // |
| |
| }; |
| uint32_t Value; |
| } DW7; |
| |
| // uint32_t 8 |
| union { |
| struct { |
| uint32_t TemporalLayerID : MOS_BITFIELD_RANGE(0, 7); // |
| uint32_t NumTLevels : MOS_BITFIELD_RANGE(8, 15); // |
| uint32_t ReservedMBZ : MOS_BITFIELD_RANGE(16, 31); // |
| }; |
| uint32_t Value; |
| } DW8; |
| |
| // uint32_t 9 |
| union { |
| struct { |
| uint32_t ReservedMBZ : MOS_BITFIELD_RANGE(0, 31); // |
| }; |
| uint32_t Value; |
| } DW9; |
| |
| // uint32_t 10 |
| union { |
| struct { |
| uint32_t ReservedMBZ : MOS_BITFIELD_RANGE(0, 31); // |
| }; |
| uint32_t Value; |
| } DW10; |
| |
| // uint32_t 11 |
| union { |
| struct { |
| uint32_t ReservedMBZ : MOS_BITFIELD_RANGE(0, 31); // |
| }; |
| uint32_t Value; |
| } DW11; |
| |
| // uint32_t 12 |
| union { |
| struct { |
| uint32_t HistogramBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW12; |
| |
| // uint32_t 13 |
| union { |
| struct { |
| uint32_t ReferenceModeProbabilityBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW13; |
| |
| // uint32_t 14 |
| union { |
| struct { |
| uint32_t ModeProbabilityBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW14; |
| |
| // uint32_t 15 |
| union { |
| struct { |
| uint32_t ReferenceTokenProbabilityBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW15; |
| |
| // uint32_t 16 |
| union { |
| struct { |
| uint32_t TokenProbabilityBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW16; |
| |
| // uint32_t 17 |
| union { |
| struct { |
| uint32_t FrameHeaderBitstreamBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW17; |
| |
| // uint32_t 18 |
| union { |
| struct { |
| uint32_t HeaderMetaDataBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW18; |
| |
| // uint32_t 19 |
| union { |
| struct { |
| uint32_t PictureStateBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW19; |
| |
| // uint32_t 20 |
| union { |
| struct { |
| uint32_t MPUBitStreamBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW20; |
| |
| union { |
| struct { |
| uint32_t TokenBitsDataBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW21; |
| union { |
| struct { |
| uint32_t KernelDebugDumpBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW22; |
| union { |
| struct { |
| uint32_t EntropyCostBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW23; |
| union { |
| struct { |
| uint32_t ModeCostUpdateBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW24; |
| }; |
| C_ASSERT(MOS_BYTES_TO_DWORDS(sizeof(struct MediaObjectVp8MpuFhbStaticDataG10)) == 25); |
| |
| struct MediaObjectVp8TpuFhbStaticDataG10 |
| { |
| // uint32_t 0 |
| union { |
| struct { |
| uint32_t MBsInFrame : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW0; |
| |
| // uint32_t 1 |
| union { |
| struct { |
| uint32_t FrameType : MOS_BITFIELD_BIT( 0 ); // |
| uint32_t EnableSegmentation : MOS_BITFIELD_BIT( 1 ); // |
| uint32_t RebinarizationFrameHdr : MOS_BITFIELD_BIT( 2 ); // |
| uint32_t RefreshEntropyP : MOS_BITFIELD_BIT( 3 ); // |
| uint32_t MBNoCoeffiscientSkip : MOS_BITFIELD_BIT( 4 ); // |
| uint32_t : MOS_BITFIELD_RANGE( 5,31 ); // |
| }; |
| uint32_t Value; |
| } DW1; |
| |
| // uint32_t 2 |
| union { |
| struct { |
| uint32_t TokenProbabilityStatOffset : MOS_BITFIELD_RANGE( 0,15 ); // |
| uint32_t TokenProbabilityEndOffset : MOS_BITFIELD_RANGE( 16,31 ); // |
| }; |
| uint32_t Value; |
| } DW2; |
| |
| // uint32_t 3 |
| union { |
| struct { |
| uint32_t FrameHeaderBitCount : MOS_BITFIELD_RANGE( 0,15 ); // |
| uint32_t MaxQP : MOS_BITFIELD_RANGE( 16,23 ); // |
| uint32_t MinQP : MOS_BITFIELD_RANGE( 24,31 ); // |
| }; |
| uint32_t Value; |
| } DW3; |
| |
| // uint32_t 4 |
| union { |
| struct { |
| uint32_t LoopFilterLevelSegment0 : MOS_BITFIELD_RANGE( 0, 7 ); // |
| uint32_t LoopFilterLevelSegment1 : MOS_BITFIELD_RANGE( 8,15 ); // |
| uint32_t LoopFilterLevelSegment2 : MOS_BITFIELD_RANGE( 16,23 ); // |
| uint32_t LoopFilterLevelSegment3 : MOS_BITFIELD_RANGE( 24,31 ); // |
| }; |
| uint32_t Value; |
| } DW4; |
| |
| // uint32_t 5 |
| union { |
| struct { |
| uint32_t QuantizationIndexSegment0 : MOS_BITFIELD_RANGE( 0, 7 ); // |
| uint32_t QuantizationIndexSegment1 : MOS_BITFIELD_RANGE( 8,15 ); // |
| uint32_t QuantizationIndexSegment2 : MOS_BITFIELD_RANGE( 16,23 ); // |
| uint32_t QuantizationIndexSegment3 : MOS_BITFIELD_RANGE( 24,31 ); // |
| }; |
| uint32_t Value; |
| } DW5; |
| |
| // uint32_t 6 |
| union { |
| struct { |
| uint32_t PakPassNum : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW6; |
| |
| // uint32_t 7 |
| union { |
| struct { |
| uint32_t TokenCostDeltaThreshold : MOS_BITFIELD_RANGE(0, 15); // |
| uint32_t SkipCostDeltaThreshold : MOS_BITFIELD_RANGE(16, 31); // |
| }; |
| uint32_t Value; |
| } DW7; |
| |
| // uint32_t 8 |
| union { |
| struct { |
| uint32_t CumulativeDQIndex01 : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW8; |
| |
| // uint32_t 9 |
| union { |
| struct { |
| uint32_t CumulativeDQIndex02 : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW9; |
| |
| // uint32_t 10 |
| union { |
| struct { |
| uint32_t CumulativeLoopFilter01 : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW10; |
| |
| // uint32_t 11 |
| union { |
| struct { |
| uint32_t CumulativeLoopFilter02 : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW11; |
| |
| // uint32_t 12 |
| union { |
| struct { |
| uint32_t PakTokenStatisticsBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW12; |
| |
| // uint32_t 13 |
| union { |
| struct { |
| uint32_t TokenUpdateFlagsBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW13; |
| |
| // uint32_t 14 |
| union { |
| struct { |
| uint32_t EntropyCostTableBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW14; |
| |
| // uint32_t 15 |
| union { |
| struct { |
| uint32_t FrameHeaderBitstreamBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW15; |
| // uint32_t 16 |
| union { |
| struct { |
| uint32_t DefaultTokenProbabilityBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW16; |
| |
| // uint32_t 17 |
| union { |
| struct { |
| uint32_t PictureStateBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW17; |
| |
| // uint32_t 18 |
| union { |
| struct { |
| uint32_t MpuCurbeDataBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW18; |
| |
| // uint32_t 19 |
| union { |
| struct { |
| uint32_t HeaderMetaDataBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW19; |
| |
| // uint32_t 20 |
| union { |
| struct { |
| uint32_t TokenProbabilityBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW20; |
| |
| // uint32_t 21 |
| union { |
| struct { |
| uint32_t PakHardwareTokenProbabilityPass1BTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW21; |
| |
| // uint32_t 22 |
| union { |
| struct { |
| uint32_t KeyFrameTokenProbabilityBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW22; |
| |
| // uint32_t 23 |
| union { |
| struct { |
| uint32_t UpdatedTokenProbabilityBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW23; |
| |
| // uint32_t 24 |
| union { |
| struct { |
| uint32_t PakHardwareTokenProbabilityPass2BTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW24; |
| |
| // uint32_t 25 |
| union { |
| struct { |
| uint32_t KernelDebugDumpBTI : MOS_BITFIELD_RANGE( 0, 31); // |
| }; |
| uint32_t Value; |
| } DW25; |
| |
| // uint32_t 26 |
| union { |
| struct { |
| uint32_t RepakDecisionSurfaceBTI : MOS_BITFIELD_RANGE(0, 31); // |
| }; |
| uint32_t Value; |
| } DW26; |
| }; |
| C_ASSERT(MOS_BYTES_TO_DWORDS(sizeof(struct MediaObjectVp8TpuFhbStaticDataG10)) == 27); |
| |
| struct CodechalVp8KernelHeaderG10 { |
| int nKernelCount; |
| |
| // Normal mode |
| CODECHAL_KERNEL_HEADER VP8MBEnc_Norm_Frm_I; |
| CODECHAL_KERNEL_HEADER VP8MBEnc_Norm_Frm_P; |
| |
| // MPU/FHB |
| CODECHAL_KERNEL_HEADER VP8_MPU; |
| |
| // TPU |
| CODECHAL_KERNEL_HEADER VP8_TPU; |
| |
| // Intra prediction mode search for only luma components of key-frame. |
| // To be used when HW intra prediction is disabled. |
| CODECHAL_KERNEL_HEADER VP8MBEnc_I_Luma; |
| |
| // HME |
| CODECHAL_KERNEL_HEADER VP8_ME_P; |
| |
| // DownScaling |
| CODECHAL_KERNEL_HEADER PLY_DScale_PLY; |
| |
| // MBEnc I Dist |
| CODECHAL_KERNEL_HEADER VP8MBEnc_I_Dist; |
| |
| // BRC Init |
| CODECHAL_KERNEL_HEADER VP8_BRC_InitFrame; |
| |
| // BRC Reset |
| CODECHAL_KERNEL_HEADER VP8_BRC_ResetFrame; |
| |
| // BRC Update |
| CODECHAL_KERNEL_HEADER VP8_BRC_FrameEncUpdate; |
| }; |
| |
| const uint8_t VP8_IFRAME_VME_COSTS_G10[128][4] = |
| { |
| {0x05, 0x1f, 0x02, 0x09}, |
| {0x05, 0x1f, 0x02, 0x09}, |
| {0x08, 0x2b, 0x03, 0x0e}, |
| {0x08, 0x2b, 0x03, 0x0e}, |
| {0x0a, 0x2f, 0x04, 0x12}, |
| {0x0a, 0x2f, 0x04, 0x12}, |
| {0x0d, 0x39, 0x05, 0x17}, |
| {0x0d, 0x39, 0x05, 0x17}, |
| {0x0d, 0x39, 0x05, 0x17}, |
| {0x0f, 0x3b, 0x06, 0x1b}, |
| {0x0f, 0x3b, 0x06, 0x1b}, |
| {0x19, 0x3d, 0x07, 0x20}, |
| {0x19, 0x3d, 0x07, 0x20}, |
| {0x1a, 0x3f, 0x08, 0x24}, |
| {0x1a, 0x3f, 0x08, 0x24}, |
| {0x1a, 0x3f, 0x08, 0x24}, |
| {0x1b, 0x48, 0x09, 0x29}, |
| {0x1b, 0x48, 0x09, 0x29}, |
| {0x1d, 0x49, 0x09, 0x2d}, |
| {0x1d, 0x49, 0x09, 0x2d}, |
| {0x1d, 0x49, 0x09, 0x2d}, |
| {0x1d, 0x49, 0x09, 0x2d}, |
| {0x1e, 0x4a, 0x0a, 0x32}, |
| {0x1e, 0x4a, 0x0a, 0x32}, |
| {0x1e, 0x4a, 0x0a, 0x32}, |
| {0x1e, 0x4a, 0x0a, 0x32}, |
| {0x1f, 0x4b, 0x0b, 0x36}, |
| {0x1f, 0x4b, 0x0b, 0x36}, |
| {0x1f, 0x4b, 0x0b, 0x36}, |
| {0x28, 0x4c, 0x0c, 0x3b}, |
| {0x28, 0x4c, 0x0c, 0x3b}, |
| {0x29, 0x4d, 0x0d, 0x3f}, |
| {0x29, 0x4d, 0x0d, 0x3f}, |
| {0x29, 0x4e, 0x0e, 0x44}, |
| {0x29, 0x4e, 0x0e, 0x44}, |
| {0x2a, 0x4f, 0x0f, 0x48}, |
| {0x2a, 0x4f, 0x0f, 0x48}, |
| {0x2b, 0x58, 0x10, 0x4d}, |
| {0x2b, 0x58, 0x10, 0x4d}, |
| {0x2b, 0x58, 0x11, 0x51}, |
| {0x2b, 0x58, 0x11, 0x51}, |
| {0x2b, 0x58, 0x11, 0x51}, |
| {0x2c, 0x58, 0x12, 0x56}, |
| {0x2c, 0x58, 0x12, 0x56}, |
| {0x2c, 0x59, 0x13, 0x5a}, |
| {0x2c, 0x59, 0x13, 0x5a}, |
| {0x2d, 0x59, 0x14, 0x5f}, |
| {0x2d, 0x59, 0x14, 0x5f}, |
| {0x2e, 0x5a, 0x15, 0x63}, |
| {0x2e, 0x5a, 0x15, 0x63}, |
| {0x2e, 0x5a, 0x16, 0x68}, |
| {0x2e, 0x5a, 0x16, 0x68}, |
| {0x2e, 0x5a, 0x16, 0x68}, |
| {0x2f, 0x5b, 0x17, 0x6c}, |
| {0x2f, 0x5b, 0x17, 0x6c}, |
| {0x38, 0x5b, 0x18, 0x71}, |
| {0x38, 0x5b, 0x18, 0x71}, |
| {0x38, 0x5c, 0x19, 0x76}, |
| {0x38, 0x5c, 0x19, 0x76}, |
| {0x38, 0x5c, 0x1a, 0x7a}, |
| {0x38, 0x5c, 0x1a, 0x7a}, |
| {0x39, 0x5d, 0x1a, 0x7f}, |
| {0x39, 0x5d, 0x1a, 0x7f}, |
| {0x39, 0x5d, 0x1b, 0x83}, |
| {0x39, 0x5d, 0x1b, 0x83}, |
| {0x39, 0x5e, 0x1c, 0x88}, |
| {0x39, 0x5e, 0x1c, 0x88}, |
| {0x3a, 0x5e, 0x1d, 0x8c}, |
| {0x3a, 0x5e, 0x1d, 0x8c}, |
| {0x3a, 0x5f, 0x1e, 0x91}, |
| {0x3a, 0x5f, 0x1e, 0x91}, |
| {0x3a, 0x5f, 0x1f, 0x95}, |
| {0x3a, 0x5f, 0x1f, 0x95}, |
| {0x3a, 0x68, 0x20, 0x9a}, |
| {0x3a, 0x68, 0x20, 0x9a}, |
| {0x3b, 0x68, 0x21, 0x9e}, |
| {0x3b, 0x68, 0x21, 0x9e}, |
| {0x3b, 0x68, 0x22, 0xa3}, |
| {0x3b, 0x68, 0x22, 0xa3}, |
| {0x3b, 0x68, 0x23, 0xa7}, |
| {0x3b, 0x68, 0x23, 0xa7}, |
| {0x3c, 0x68, 0x24, 0xac}, |
| {0x3c, 0x68, 0x24, 0xac}, |
| {0x3c, 0x68, 0x24, 0xac}, |
| {0x3c, 0x69, 0x25, 0xb0}, |
| {0x3c, 0x69, 0x25, 0xb0}, |
| {0x3c, 0x69, 0x26, 0xb5}, |
| {0x3c, 0x69, 0x26, 0xb5}, |
| {0x3d, 0x69, 0x27, 0xb9}, |
| {0x3d, 0x69, 0x27, 0xb9}, |
| {0x3d, 0x69, 0x28, 0xbe}, |
| {0x3d, 0x69, 0x28, 0xbe}, |
| {0x3d, 0x6a, 0x29, 0xc2}, |
| {0x3d, 0x6a, 0x29, 0xc2}, |
| {0x3e, 0x6a, 0x2a, 0xc7}, |
| {0x3e, 0x6a, 0x2a, 0xc7}, |
| {0x3e, 0x6a, 0x2b, 0xcb}, |
| {0x3e, 0x6a, 0x2b, 0xd0}, |
| {0x3f, 0x6b, 0x2c, 0xd4}, |
| {0x3f, 0x6b, 0x2d, 0xd9}, |
| {0x3f, 0x6b, 0x2e, 0xdd}, |
| {0x48, 0x6b, 0x2f, 0xe2}, |
| {0x48, 0x6b, 0x2f, 0xe2}, |
| {0x48, 0x6c, 0x30, 0xe6}, |
| {0x48, 0x6c, 0x31, 0xeb}, |
| {0x48, 0x6c, 0x32, 0xf0}, |
| {0x48, 0x6c, 0x33, 0xf4}, |
| {0x48, 0x6c, 0x34, 0xf9}, |
| {0x49, 0x6d, 0x35, 0xfd}, |
| {0x49, 0x6d, 0x36, 0xff}, |
| {0x49, 0x6d, 0x37, 0xff}, |
| {0x49, 0x6d, 0x38, 0xff}, |
| {0x49, 0x6e, 0x3a, 0xff}, |
| {0x49, 0x6e, 0x3b, 0xff}, |
| {0x4a, 0x6e, 0x3c, 0xff}, |
| {0x4a, 0x6f, 0x3d, 0xff}, |
| {0x4a, 0x6f, 0x3d, 0xff}, |
| {0x4a, 0x6f, 0x3e, 0xff}, |
| {0x4a, 0x6f, 0x3f, 0xff}, |
| {0x4a, 0x6f, 0x40, 0xff}, |
| {0x4b, 0x78, 0x41, 0xff}, |
| {0x4b, 0x78, 0x42, 0xff}, |
| {0x4b, 0x78, 0x43, 0xff}, |
| {0x4b, 0x78, 0x44, 0xff}, |
| {0x4b, 0x78, 0x46, 0xff}, |
| {0x4c, 0x78, 0x47, 0xff}, |
| {0x4c, 0x79, 0x49, 0xff}, |
| {0x4c, 0x79, 0x4a, 0xff} |
| }; |
| |
| const uint32_t VP8_NewMVSkipThreshold_G10[128] = |
| { |
| 111, 120, 129, 137, 146, 155, 163, 172, 180, 189, 198, 206, 215, 224, 232, 241, |
| 249, 258, 267, 275, 284, 293, 301, 310, 318, 327, 336, 344, 353, 362, 370, 379, |
| 387, 396, 405, 413, 422, 431, 439, 448, 456, 465, 474, 482, 491, 500, 508, 517, |
| 525, 534, 543, 551, 560, 569, 577, 586, 594, 603, 612, 620, 629, 638, 646, 655, |
| 663, 672, 681, 689, 698, 707, 715, 724, 733, 741, 750, 758, 767, 776, 784, 793, |
| 802, 810, 819, 827, 836, 845, 853, 862, 871, 879, 888, 896, 905, 914, 922, 931, |
| 940, 948, 957, 965, 974, 983, 991, 1000, 1009, 1017, 1026, 1034, 1043, 1052, 1060, 1069, |
| 1078, 1086, 1095, 1103, 1112, 1121, 1129, 1138, 1147, 1155, 1164, 1172, 1181, 1190, 1198, 1208 |
| }; |
| |
| const uint32_t VP8_COST_TABLE_G10[128][7] = |
| { |
| {0x398f0500, 0x6f6f6f6f, 0x0000006f, 0x06040402, 0x1a0c0907, 0x08, 0x0e}, |
| {0x3b8f0600, 0x6f6f6f6f, 0x0000006f, 0x06040402, 0x1a0c0907, 0x0a, 0x11}, |
| {0x3e8f0700, 0x6f6f6f6f, 0x0000006f, 0x06040402, 0x1a0c0907, 0x0c, 0x14}, |
| {0x488f0800, 0x6f6f6f6f, 0x0000006f, 0x06040402, 0x1a0c0907, 0x0f, 0x18}, |
| {0x498f0a00, 0x6f6f6f6f, 0x0000006f, 0x0d080805, 0x291b190e, 0x11, 0x1b}, |
| {0x4a8f0b00, 0x6f6f6f6f, 0x0000006f, 0x0d080805, 0x291b190e, 0x13, 0x1e}, |
| {0x4b8f0c00, 0x6f6f6f6f, 0x0000006f, 0x0d080805, 0x291b190e, 0x15, 0x22}, |
| {0x4b8f0c00, 0x6f6f6f6f, 0x0000006f, 0x0d080805, 0x291b190e, 0x15, 0x22}, |
| {0x4d8f0d00, 0x6f6f6f6f, 0x0000006f, 0x0d080805, 0x291b190e, 0x17, 0x25}, |
| {0x4e8f0e00, 0x6f6f6f6f, 0x0000006f, 0x190b0c07, 0x2e281e1a, 0x19, 0x29}, |
| {0x4f8f0f00, 0x6f6f6f6f, 0x0000006f, 0x190b0c07, 0x2e281e1a, 0x1b, 0x2c}, |
| {0x588f1800, 0x6f6f6f6f, 0x0000006f, 0x190b0c07, 0x2e281e1a, 0x1d, 0x2f}, |
| {0x588f1900, 0x6f6f6f6f, 0x0000006f, 0x190b0c07, 0x2e281e1a, 0x1f, 0x33}, |
| {0x598f1900, 0x6f6f6f6f, 0x0000006f, 0x1c0f0f0a, 0x392b291e, 0x21, 0x36}, |
| {0x5a8f1a00, 0x6f6f6f6f, 0x0000006f, 0x1c0f0f0a, 0x392b291e, 0x23, 0x3a}, |
| {0x5a8f1a00, 0x6f6f6f6f, 0x0000006f, 0x1c0f0f0a, 0x392b291e, 0x23, 0x3a}, |
| {0x5a8f1a00, 0x6f6f6f6f, 0x0000006f, 0x1c0f0f0a, 0x392b291e, 0x25, 0x3d}, |
| {0x5b8f1b00, 0x6f6f6f6f, 0x0000006f, 0x1c0f0f0a, 0x392b291e, 0x27, 0x40}, |
| {0x5b8f1c00, 0x6f6f6f6f, 0x0000006f, 0x2819190c, 0x3c2e2b29, 0x2a, 0x44}, |
| {0x5b8f1c00, 0x6f6f6f6f, 0x0000006f, 0x2819190c, 0x3c2e2b29, 0x2a, 0x44}, |
| {0x5c8f1c00, 0x6f6f6f6f, 0x0000006f, 0x2819190c, 0x3c2e2b29, 0x2c, 0x47}, |
| {0x5c8f1c00, 0x6f6f6f6f, 0x0000006f, 0x2819190c, 0x3c2e2b29, 0x2c, 0x47}, |
| {0x5d8f1d00, 0x6f6f6f6f, 0x0000006f, 0x2819190c, 0x3c2e2b29, 0x2e, 0x4a}, |
| {0x5d8f1d00, 0x6f6f6f6f, 0x0000006f, 0x2819190c, 0x3c2e2b29, 0x2e, 0x4a}, |
| {0x5d8f1d00, 0x6f6f6f6f, 0x0000006f, 0x2819190c, 0x3c2e2b29, 0x30, 0x4e}, |
| {0x5d8f1d00, 0x6f6f6f6f, 0x0000006f, 0x2819190c, 0x3c2e2b29, 0x30, 0x4e}, |
| {0x5e8f1e00, 0x6f6f6f6f, 0x0000006f, 0x291b1b0f, 0x3e382e2a, 0x32, 0x51}, |
| {0x5e8f1f00, 0x6f6f6f6f, 0x0000006f, 0x291b1b0f, 0x3e382e2a, 0x34, 0x55}, |
| {0x5e8f1f00, 0x6f6f6f6f, 0x0000006f, 0x291b1b0f, 0x3e382e2a, 0x34, 0x55}, |
| {0x5f8f1f00, 0x6f6f6f6f, 0x0000006f, 0x291b1b0f, 0x3e382e2a, 0x36, 0x58}, |
| {0x688f2800, 0x6f6f6f6f, 0x0000006f, 0x291b1b0f, 0x3e382e2a, 0x38, 0x5b}, |
| {0x688f2800, 0x6f6f6f6f, 0x0000006f, 0x2b1d1d18, 0x483a382c, 0x3a, 0x5f}, |
| {0x688f2800, 0x6f6f6f6f, 0x0000006f, 0x2b1d1d18, 0x483a382c, 0x3c, 0x62}, |
| {0x688f2900, 0x6f6f6f6f, 0x0000006f, 0x2b1d1d18, 0x483a382c, 0x3e, 0x65}, |
| {0x698f2900, 0x6f6f6f6f, 0x0000006f, 0x2b1d1d18, 0x483a382c, 0x40, 0x69}, |
| {0x698f2900, 0x6f6f6f6f, 0x0000006f, 0x2c1f1f19, 0x493b392e, 0x43, 0x6c}, |
| {0x698f2900, 0x6f6f6f6f, 0x0000006f, 0x2c1f1f19, 0x493b392e, 0x45, 0x70}, |
| {0x6a8f2a00, 0x6f6f6f6f, 0x0000006f, 0x2c1f1f19, 0x493b392e, 0x47, 0x73}, |
| {0x6a8f2a00, 0x6f6f6f6f, 0x0000006f, 0x2c1f1f19, 0x493b392e, 0x49, 0x76}, |
| {0x6a8f2a00, 0x6f6f6f6f, 0x0000006f, 0x2e28281b, 0x4b3d3a38, 0x4b, 0x7a}, |
| {0x6b8f2b00, 0x6f6f6f6f, 0x0000006f, 0x2e28281b, 0x4b3d3a38, 0x4d, 0x7d}, |
| {0x6b8f2b00, 0x6f6f6f6f, 0x0000006f, 0x2e28281b, 0x4b3d3a38, 0x4d, 0x7d}, |
| {0x6b8f2b00, 0x6f6f6f6f, 0x0000006f, 0x2e28281b, 0x4b3d3a38, 0x4f, 0x81}, |
| {0x6b8f2b00, 0x6f6f6f6f, 0x0000006f, 0x2e28281b, 0x4b3d3a38, 0x51, 0x84}, |
| {0x6b8f2c00, 0x6f6f6f6f, 0x0000006f, 0x2f29291c, 0x4c3e3b38, 0x53, 0x87}, |
| {0x6c8f2c00, 0x6f6f6f6f, 0x0000006f, 0x2f29291c, 0x4c3e3b38, 0x55, 0x8b}, |
| {0x6c8f2c00, 0x6f6f6f6f, 0x0000006f, 0x2f29291c, 0x4c3e3b38, 0x57, 0x8e}, |
| {0x6c8f2c00, 0x6f6f6f6f, 0x0000006f, 0x2f29291c, 0x4c3e3b38, 0x59, 0x91}, |
| {0x6d8f2d00, 0x6f6f6f6f, 0x0000006f, 0x382a2a1d, 0x4d483c39, 0x5b, 0x95}, |
| {0x6d8f2d00, 0x6f6f6f6f, 0x0000006f, 0x382a2a1d, 0x4d483c39, 0x5e, 0x98}, |
| {0x6d8f2d00, 0x6f6f6f6f, 0x0000006f, 0x382a2a1d, 0x4d483c39, 0x60, 0x9c}, |
| {0x6d8f2d00, 0x6f6f6f6f, 0x0000006f, 0x382a2a1d, 0x4d483c39, 0x60, 0x9c}, |
| {0x6d8f2e00, 0x6f6f6f6f, 0x0000006f, 0x382a2a1d, 0x4d483c39, 0x62, 0x9f}, |
| {0x6e8f2e00, 0x6f6f6f6f, 0x0000006f, 0x392b2b1e, 0x4e483e3a, 0x64, 0xa2}, |
| {0x6e8f2e00, 0x6f6f6f6f, 0x0000006f, 0x392b2b1e, 0x4e483e3a, 0x66, 0xa6}, |
| {0x6e8f2e00, 0x6f6f6f6f, 0x0000006f, 0x392b2b1e, 0x4e483e3a, 0x68, 0xa9}, |
| {0x6f8f2f00, 0x6f6f6f6f, 0x0000006f, 0x392b2b1e, 0x4e483e3a, 0x6a, 0xad}, |
| {0x6f8f2f00, 0x6f6f6f6f, 0x0000006f, 0x3a2c2c1f, 0x4f493f3b, 0x6c, 0xb0}, |
| {0x6f8f2f00, 0x6f6f6f6f, 0x0000006f, 0x3a2c2c1f, 0x4f493f3b, 0x6e, 0xb3}, |
| {0x788f3800, 0x6f6f6f6f, 0x0000006f, 0x3a2c2c1f, 0x4f493f3b, 0x70, 0xb7}, |
| {0x788f3800, 0x6f6f6f6f, 0x0000006f, 0x3a2c2c1f, 0x4f493f3b, 0x72, 0xba}, |
| {0x788f3800, 0x6f6f6f6f, 0x0000006f, 0x3b2d2d28, 0x584a483c, 0x74, 0xbd}, |
| {0x788f3800, 0x6f6f6f6f, 0x0000006f, 0x3b2d2d28, 0x584a483c, 0x76, 0xc1}, |
| {0x788f3800, 0x6f6f6f6f, 0x0000006f, 0x3b2d2d28, 0x584a483c, 0x79, 0xc4}, |
| {0x788f3800, 0x6f6f6f6f, 0x0000006f, 0x3b2d2d28, 0x584a483c, 0x7b, 0xc8}, |
| {0x788f3800, 0x6f6f6f6f, 0x0000006f, 0x3b2e2e29, 0x594b483d, 0x7d, 0xcb}, |
| {0x798f3900, 0x6f6f6f6f, 0x0000006f, 0x3b2e2e29, 0x594b483d, 0x7f, 0xce}, |
| {0x798f3900, 0x6f6f6f6f, 0x0000006f, 0x3b2e2e29, 0x594b483d, 0x81, 0xd2}, |
| {0x798f3900, 0x6f6f6f6f, 0x0000006f, 0x3b2e2e29, 0x594b483d, 0x83, 0xd5}, |
| {0x798f3900, 0x6f6f6f6f, 0x0000006f, 0x3c2f2f29, 0x594b493e, 0x85, 0xd9}, |
| {0x798f3900, 0x6f6f6f6f, 0x0000006f, 0x3c2f2f29, 0x594b493e, 0x87, 0xdc}, |
| {0x798f3900, 0x6f6f6f6f, 0x0000006f, 0x3c2f2f29, 0x594b493e, 0x89, 0xdf}, |
| {0x798f3a00, 0x6f6f6f6f, 0x0000006f, 0x3c2f2f29, 0x594b493e, 0x8b, 0xe3}, |
| {0x7a8f3a00, 0x6f6f6f6f, 0x0000006f, 0x3d38382a, 0x5a4c493f, 0x8d, 0xe6}, |
| {0x7a8f3a00, 0x6f6f6f6f, 0x0000006f, 0x3d38382a, 0x5a4c493f, 0x8f, 0xe9}, |
| {0x7a8f3a00, 0x6f6f6f6f, 0x0000006f, 0x3d38382a, 0x5a4c493f, 0x91, 0xed}, |
| {0x7a8f3a00, 0x6f6f6f6f, 0x0000006f, 0x3d38382a, 0x5a4c493f, 0x94, 0xf0}, |
| {0x7a8f3a00, 0x6f6f6f6f, 0x0000006f, 0x3e38382b, 0x5b4d4a48, 0x96, 0xf4}, |
| {0x7a8f3a00, 0x6f6f6f6f, 0x0000006f, 0x3e38382b, 0x5b4d4a48, 0x98, 0xf7}, |
| {0x7b8f3b00, 0x6f6f6f6f, 0x0000006f, 0x3e38382b, 0x5b4d4a48, 0x9a, 0xfa}, |
| {0x7b8f3b00, 0x6f6f6f6f, 0x0000006f, 0x3e38382b, 0x5b4d4a48, 0x9c, 0xfe}, |
| {0x7b8f3b00, 0x6f6f6f6f, 0x0000006f, 0x3f38392b, 0x5b4d4b48, 0x9e, 0xff}, |
| {0x7b8f3b00, 0x6f6f6f6f, 0x0000006f, 0x3f38392b, 0x5b4d4b48, 0x9e, 0xff}, |
| {0x7b8f3b00, 0x6f6f6f6f, 0x0000006f, 0x3f38392b, 0x5b4d4b48, 0xa0, 0xff}, |
| {0x7b8f3b00, 0x6f6f6f6f, 0x0000006f, 0x3f38392b, 0x5b4d4b48, 0xa2, 0xff}, |
| {0x7b8f3b00, 0x6f6f6f6f, 0x0000006f, 0x3f38392b, 0x5b4d4b48, 0xa4, 0xff}, |
| {0x7b8f3b00, 0x6f6f6f6f, 0x0000006f, 0x3f39392c, 0x5c4e4b48, 0xa6, 0xff}, |
| {0x7c8f3c00, 0x6f6f6f6f, 0x0000006f, 0x3f39392c, 0x5c4e4b48, 0xa8, 0xff}, |
| {0x7c8f3c00, 0x6f6f6f6f, 0x0000006f, 0x3f39392c, 0x5c4e4b48, 0xaa, 0xff}, |
| {0x7c8f3c00, 0x6f6f6f6f, 0x0000006f, 0x3f39392c, 0x5c4e4b48, 0xac, 0xff}, |
| {0x7c8f3c00, 0x6f6f6f6f, 0x0000006f, 0x48393a2c, 0x5c4f4c49, 0xaf, 0xff}, |
| {0x7c8f3c00, 0x6f6f6f6f, 0x0000006f, 0x48393a2c, 0x5c4f4c49, 0xb1, 0xff}, |
| {0x7c8f3c00, 0x6f6f6f6f, 0x0000006f, 0x48393a2c, 0x5c4f4c49, 0xb3, 0xff}, |
| {0x7c8f3c00, 0x6f6f6f6f, 0x0000006f, 0x48393a2c, 0x5c4f4c49, 0xb5, 0xff}, |
| {0x7d8f3d00, 0x6f6f6f6f, 0x0000006f, 0x483a3a2d, 0x5d584c49, 0xb7, 0xff}, |
| {0x7d8f3d00, 0x6f6f6f6f, 0x0000006f, 0x483a3a2d, 0x5d584c49, 0xb9, 0xff}, |
| {0x7d8f3d00, 0x6f6f6f6f, 0x0000006f, 0x483a3a2d, 0x5d584c49, 0xbd, 0xff}, |
| {0x7d8f3d00, 0x6f6f6f6f, 0x0000006f, 0x493a3b2e, 0x5e584d4a, 0xc1, 0xff}, |
| {0x7e8f3e00, 0x6f6f6f6f, 0x0000006f, 0x493a3b2e, 0x5e584d4a, 0xc5, 0xff}, |
| {0x7e8f3e00, 0x6f6f6f6f, 0x0000006f, 0x493b3b2e, 0x5e584e4a, 0xc8, 0xff}, |
| {0x7e8f3e00, 0x6f6f6f6f, 0x0000006f, 0x493b3b2e, 0x5e584e4a, 0xcc, 0xff}, |
| {0x7e8f3e00, 0x6f6f6f6f, 0x0000006f, 0x493b3c2f, 0x5f594e4b, 0xd0, 0xff}, |
| {0x7f8f3f00, 0x6f6f6f6f, 0x0000006f, 0x493b3c2f, 0x5f594e4b, 0xd2, 0xff}, |
| {0x7f8f3f00, 0x6f6f6f6f, 0x0000006f, 0x493b3c2f, 0x5f594e4b, 0xd4, 0xff}, |
| {0x7f8f3f00, 0x6f6f6f6f, 0x0000006f, 0x4a3c3c2f, 0x5f594f4b, 0xd8, 0xff}, |
| {0x7f8f3f00, 0x6f6f6f6f, 0x0000006f, 0x4a3c3c2f, 0x5f594f4b, 0xdc, 0xff}, |
| {0x888f4800, 0x6f6f6f6f, 0x0000006f, 0x4a3c3d38, 0x68594f4c, 0xe0, 0xff}, |
| {0x888f4800, 0x6f6f6f6f, 0x0000006f, 0x4a3c3d38, 0x68594f4c, 0xe5, 0xff}, |
| {0x888f4800, 0x6f6f6f6f, 0x0000006f, 0x4b3d3d38, 0x685a584c, 0xe9, 0xff}, |
| {0x888f4800, 0x6f6f6f6f, 0x0000006f, 0x4b3d3d38, 0x685a584c, 0xed, 0xff}, |
| {0x888f4800, 0x6f6f6f6f, 0x0000006f, 0x4b3d3e38, 0x685a584c, 0xf1, 0xff}, |
| {0x888f4800, 0x6f6f6f6f, 0x0000006f, 0x4b3d3e38, 0x685a584c, 0xf5, 0xff}, |
| {0x898f4900, 0x6f6f6f6f, 0x0000006f, 0x4b3e3e39, 0x695b584d, 0xfe, 0xff}, |
| {0x898f4900, 0x6f6f6f6f, 0x0000006f, 0x4c3e3e39, 0x695b594d, 0xff, 0xff}, |
| {0x898f4900, 0x6f6f6f6f, 0x0000006f, 0x4c3e3e39, 0x695b594d, 0xff, 0xff}, |
| {0x898f4900, 0x6f6f6f6f, 0x0000006f, 0x4c3f3f39, 0x695b594e, 0xff, 0xff}, |
| {0x898f4900, 0x6f6f6f6f, 0x0000006f, 0x4c3f3f39, 0x695b594e, 0xff, 0xff}, |
| {0x898f4900, 0x6f6f6f6f, 0x0000006f, 0x4d3f3f3a, 0x6a5c594e, 0xff, 0xff}, |
| {0x898f4900, 0x6f6f6f6f, 0x0000006f, 0x4d3f3f3a, 0x6a5c594e, 0xff, 0xff}, |
| {0x8a8f4a00, 0x6f6f6f6f, 0x0000006f, 0x4d48483a, 0x6a5c594f, 0xff, 0xff}, |
| {0x8a8f4a00, 0x6f6f6f6f, 0x0000006f, 0x4d48483a, 0x6a5c594f, 0xff, 0xff}, |
| {0x8a8f4a00, 0x6f6f6f6f, 0x0000006f, 0x4d48483a, 0x6a5c5a4f, 0xff, 0xff}, |
| {0x8a8f4a00, 0x6f6f6f6f, 0x0000006f, 0x4d48483a, 0x6a5c5a4f, 0xff, 0xff}, |
| {0x8a8f4a00, 0x6f6f6f6f, 0x0000006f, 0x4e48483a, 0x6a5d5a58, 0xff, 0xff}, |
| {0x8b8f4b00, 0x6f6f6f6f, 0x0000006f, 0x4e48483b, 0x6b5d5a58, 0xff, 0xff}, |
| {0x8b8f4b00, 0x6f6f6f6f, 0x0000006f, 0x4e48483b, 0x6b5d5a58, 0xff, 0xff}, |
| {0x8b8f4b00, 0x6f6f6f6f, 0x0000006f, 0x4f48493b, 0x6b5d5b58, 0xff, 0xff}, |
| {0x8b8f4b00, 0x6f6f6f6f, 0x0000006f, 0x4f49493b, 0x6b5e5b58, 0xff, 0xff} |
| }; |
| |
| const uint32_t VP8_SINGLESU[56] = |
| { |
| 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
| 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
| 0x00000000, 0x00000000, 0x00000000, 0x00000000, |
| 0x00000000, 0x00000000 |
| }; |
| |
| const uint8_t VP8_FULLSPIRAL_48x40[56] = |
| { |
| // L -> U -> R -> D |
| 0x0F, |
| 0xF0, |
| 0x01, 0x01, |
| 0x10, 0x10, |
| 0x0F, 0x0F, 0x0F, |
| 0xF0, 0xF0, 0xF0, |
| 0x01, 0x01, 0x01, 0x01, |
| 0x10, 0x10, 0x10, 0x10, |
| 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, |
| 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, |
| 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, |
| 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, // The last 0x10 steps outside the search window. |
| 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, // These are outside the search window. |
| 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0 |
| }; |
| |
| const uint8_t VP8_RASTERSCAN_48x40[56] = |
| { |
| 0x11, 0x01, 0x01, 0x01, |
| 0x11, 0x01, 0x01, 0x01, |
| 0x11, 0x01, 0x01, 0x01, |
| 0x11, 0x01, 0x01, 0x01, |
| 0x11, 0x01, 0x01, 0x01, |
| 0x01, 0x01, 0x01, 0x01, |
| 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00 |
| }; |
| |
| const uint8_t VP8_DIAMOND[56] = |
| { |
| 0x0F, 0xF1, 0x0F, 0x12,//5 |
| 0x0D, 0xE2, 0x22, 0x1E,//9 |
| 0x10, 0xFF, 0xE2, 0x20,//13 |
| 0xFC, 0x06, 0xDD,//16 |
| 0x2E, 0xF1, 0x3F, 0xD3, 0x11, 0x3D, 0xF3, 0x1F,//24 |
| 0xEB, 0xF1, 0xF1, 0xF1,//28 |
| 0x4E, 0x11, 0x12, 0xF2, 0xF1,//33 |
| 0xE0, 0xFF, 0xFF, 0x0D, 0x1F, 0x1F,//39 |
| 0x20, 0x11, 0xCF, 0xF1, 0x05, 0x11,//45 |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,//51 |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 |
| }; |
| |
| const uint8_t VP8_MAINREF_TABLE_G10[8] = |
| { |
| 0, 1, 2, 9, 3, 13, 14, 57 |
| }; |
| |
| const uint8_t VP8_NUM_REFS_G10[8] = |
| { |
| 0, 1, 1, 2, 1, 2, 2, 3 |
| }; |
| |
| const uint8_t VP8_BRC_IFRAME_COST_TABLE_G10[128][4] = |
| { |
| { 0x5, 0x5, 0x8, 0x8}, |
| { 0xa, 0xa, 0xd, 0xd}, |
| { 0xd, 0xf, 0xf, 0x19}, |
| {0x19, 0x1a, 0x1a, 0x1a}, |
| {0x1b, 0x1b, 0x1d, 0x1d}, |
| {0x1d, 0x1d, 0x1e, 0x1e}, |
| {0x1e, 0x1e, 0x1f, 0x1f}, |
| {0x1f, 0x28, 0x28, 0x29}, |
| {0x29, 0x29, 0x29, 0x2a}, |
| {0x2a, 0x2b, 0x2b, 0x2b}, |
| {0x2b, 0x2b, 0x2c, 0x2c}, |
| {0x2c, 0x2c, 0x2d, 0x2d}, |
| {0x2e, 0x2e, 0x2e, 0x2e}, |
| {0x2e, 0x2f, 0x2f, 0x38}, |
| {0x38, 0x38, 0x38, 0x38}, |
| {0x38, 0x39, 0x39, 0x39}, |
| {0x39, 0x39, 0x39, 0x3a}, |
| {0x3a, 0x3a, 0x3a, 0x3a}, |
| {0x3a, 0x3a, 0x3a, 0x3b}, |
| {0x3b, 0x3b, 0x3b, 0x3b}, |
| {0x3b, 0x3c, 0x3c, 0x3c}, |
| {0x3c, 0x3c, 0x3c, 0x3c}, |
| {0x3d, 0x3d, 0x3d, 0x3d}, |
| {0x3d, 0x3d, 0x3e, 0x3e}, |
| {0x3e, 0x3e, 0x3f, 0x3f}, |
| {0x3f, 0x48, 0x48, 0x48}, |
| {0x48, 0x48, 0x48, 0x48}, |
| {0x49, 0x49, 0x49, 0x49}, |
| {0x49, 0x49, 0x4a, 0x4a}, |
| {0x4a, 0x4a, 0x4a, 0x4a}, |
| {0x4b, 0x4b, 0x4b, 0x4b}, |
| {0x4b, 0x4c, 0x4c, 0x4c}, |
| {0x1f, 0x1f, 0x2b, 0x2b}, |
| {0x2f, 0x2f, 0x39, 0x39}, |
| {0x39, 0x3b, 0x3b, 0x3d}, |
| {0x3d, 0x3f, 0x3f, 0x3f}, |
| {0x48, 0x48, 0x49, 0x49}, |
| {0x49, 0x49, 0x4a, 0x4a}, |
| {0x4a, 0x4a, 0x4b, 0x4b}, |
| {0x4b, 0x4c, 0x4c, 0x4d}, |
| {0x4d, 0x4e, 0x4e, 0x4f}, |
| {0x4f, 0x58, 0x58, 0x58}, |
| {0x58, 0x58, 0x58, 0x58}, |
| {0x59, 0x59, 0x59, 0x59}, |
| {0x5a, 0x5a, 0x5a, 0x5a}, |
| {0x5a, 0x5b, 0x5b, 0x5b}, |
| {0x5b, 0x5c, 0x5c, 0x5c}, |
| {0x5c, 0x5d, 0x5d, 0x5d}, |
| {0x5d, 0x5e, 0x5e, 0x5e}, |
| {0x5e, 0x5f, 0x5f, 0x5f}, |
| {0x5f, 0x68, 0x68, 0x68}, |
| {0x68, 0x68, 0x68, 0x68}, |
| {0x68, 0x68, 0x68, 0x68}, |
| {0x69, 0x69, 0x69, 0x69}, |
| {0x69, 0x69, 0x69, 0x69}, |
| {0x6a, 0x6a, 0x6a, 0x6a}, |
| {0x6a, 0x6a, 0x6b, 0x6b}, |
| {0x6b, 0x6b, 0x6b, 0x6c}, |
| {0x6c, 0x6c, 0x6c, 0x6c}, |
| {0x6d, 0x6d, 0x6d, 0x6d}, |
| {0x6e, 0x6e, 0x6e, 0x6f}, |
| {0x6f, 0x6f, 0x6f, 0x6f}, |
| {0x78, 0x78, 0x78, 0x78}, |
| {0x78, 0x78, 0x79, 0x79}, |
| { 0x2, 0x2, 0x3, 0x3}, |
| { 0x4, 0x4, 0x5, 0x5}, |
| { 0x5, 0x6, 0x6, 0x7}, |
| { 0x7, 0x8, 0x8, 0x8}, |
| { 0x9, 0x9, 0x9, 0x9}, |
| { 0x9, 0x9, 0xa, 0xa}, |
| { 0xa, 0xa, 0xb, 0xb}, |
| { 0xb, 0xc, 0xc, 0xd}, |
| { 0xd, 0xe, 0xe, 0xf}, |
| { 0xf, 0x10, 0x10, 0x11}, |
| {0x11, 0x11, 0x12, 0x12}, |
| {0x13, 0x13, 0x14, 0x14}, |
| {0x15, 0x15, 0x16, 0x16}, |
| {0x16, 0x17, 0x17, 0x18}, |
| {0x18, 0x19, 0x19, 0x1a}, |
| {0x1a, 0x1a, 0x1a, 0x1b}, |
| {0x1b, 0x1c, 0x1c, 0x1d}, |
| {0x1d, 0x1e, 0x1e, 0x1f}, |
| {0x1f, 0x20, 0x20, 0x21}, |
| {0x21, 0x22, 0x22, 0x23}, |
| {0x23, 0x24, 0x24, 0x24}, |
| {0x25, 0x25, 0x26, 0x26}, |
| {0x27, 0x27, 0x28, 0x28}, |
| {0x29, 0x29, 0x2a, 0x2a}, |
| {0x2b, 0x2b, 0x2c, 0x2d}, |
| {0x2e, 0x2f, 0x2f, 0x30}, |
| {0x31, 0x32, 0x33, 0x34}, |
| {0x35, 0x36, 0x37, 0x38}, |
| {0x3a, 0x3b, 0x3c, 0x3d}, |
| {0x3d, 0x3e, 0x3f, 0x40}, |
| {0x41, 0x42, 0x43, 0x44}, |
| {0x46, 0x47, 0x49, 0x4a}, |
| { 0x9, 0x9, 0xe, 0xe}, |
| {0x12, 0x12, 0x17, 0x17}, |
| {0x17, 0x1b, 0x1b, 0x20}, |
| {0x20, 0x24, 0x24, 0x24}, |
| {0x29, 0x29, 0x2d, 0x2d}, |
| {0x2d, 0x2d, 0x32, 0x32}, |
| {0x32, 0x32, 0x36, 0x36}, |
| {0x36, 0x3b, 0x3b, 0x3f}, |
| {0x3f, 0x44, 0x44, 0x48}, |
| {0x48, 0x4d, 0x4d, 0x51}, |
| {0x51, 0x51, 0x56, 0x56}, |
| {0x5a, 0x5a, 0x5f, 0x5f}, |
| {0x63, 0x63, 0x68, 0x68}, |
| {0x68, 0x6c, 0x6c, 0x71}, |
| {0x71, 0x76, 0x76, 0x7a}, |
| {0x7a, 0x7f, 0x7f, 0x83}, |
| {0x83, 0x88, 0x88, 0x8c}, |
| {0x8c, 0x91, 0x91, 0x95}, |
| {0x95, 0x9a, 0x9a, 0x9e}, |
| {0x9e, 0xa3, 0xa3, 0xa7}, |
| {0xa7, 0xac, 0xac, 0xac}, |
| {0xb0, 0xb0, 0xb5, 0xb5}, |
| {0xb9, 0xb9, 0xbe, 0xbe}, |
| {0xc2, 0xc2, 0xc7, 0xc7}, |
| {0xcb, 0xd0, 0xd4, 0xd9}, |
| {0xdd, 0xe2, 0xe2, 0xe6}, |
| {0xeb, 0xf0, 0xf4, 0xf9}, |
| {0xfd, 0xff, 0xff, 0xff}, |
| {0xff, 0xff, 0xff, 0xff}, |
| {0xff, 0xff, 0xff, 0xff}, |
| {0xff, 0xff, 0xff, 0xff}, |
| {0xff, 0xff, 0xff, 0xff} |
| }; |
| |
| const uint32_t VP8_BRC_PFRAME_COST_TABLE_G10[256] = |
| { |
| 0x06040402, |
| 0x06040402, |
| 0x06040402, |
| 0x06040402, |
| 0x0d080805, |
| 0x0d080805, |
| 0x0d080805, |
| 0x0d080805, |
| 0x0d080805, |
| 0x190b0c07, |
| 0x190b0c07, |
| 0x190b0c07, |
| 0x190b0c07, |
| 0x1c0f0f0a, |
| 0x1c0f0f0a, |
| 0x1c0f0f0a, |
| 0x1c0f0f0a, |
| 0x1c0f0f0a, |
| 0x2819190c, |
| 0x2819190c, |
| 0x2819190c, |
| 0x2819190c, |
| 0x2819190c, |
| 0x2819190c, |
| 0x2819190c, |
| 0x2819190c, |
| 0x291b1b0f, |
| 0x291b1b0f, |
| 0x291b1b0f, |
| 0x291b1b0f, |
| 0x291b1b0f, |
| 0x2b1d1d18, |
| 0x2b1d1d18, |
| 0x2b1d1d18, |
| 0x2b1d1d18, |
| 0x2c1f1f19, |
| 0x2c1f1f19, |
| 0x2c1f1f19, |
| 0x2c1f1f19, |
| 0x2e28281b, |
| 0x2e28281b, |
| 0x2e28281b, |
| 0x2e28281b, |
| 0x2e28281b, |
| 0x2f29291c, |
| 0x2f29291c, |
| 0x2f29291c, |
| 0x2f29291c, |
| 0x382a2a1d, |
| 0x382a2a1d, |
| 0x382a2a1d, |
| 0x382a2a1d, |
| 0x382a2a1d, |
| 0x392b2b1e, |
| 0x392b2b1e, |
| 0x392b2b1e, |
| 0x392b2b1e, |
| 0x3a2c2c1f, |
| 0x3a2c2c1f, |
| 0x3a2c2c1f, |
| 0x3a2c2c1f, |
| 0x3b2d2d28, |
| 0x3b2d2d28, |
| 0x3b2d2d28, |
| 0x3b2d2d28, |
| 0x3b2e2e29, |
| 0x3b2e2e29, |
| 0x3b2e2e29, |
| 0x3b2e2e29, |
| 0x3c2f2f29, |
| 0x3c2f2f29, |
| 0x3c2f2f29, |
| 0x3c2f2f29, |
| 0x3d38382a, |
| 0x3d38382a, |
| 0x3d38382a, |
| 0x3d38382a, |
| 0x3e38382b, |
| 0x3e38382b, |
| 0x3e38382b, |
| 0x3e38382b, |
| 0x3f38392b, |
| 0x3f38392b, |
| 0x3f38392b, |
| 0x3f38392b, |
| 0x3f38392b, |
| 0x3f39392c, |
| 0x3f39392c, |
| 0x3f39392c, |
| 0x3f39392c, |
| 0x48393a2c, |
| 0x48393a2c, |
| 0x48393a2c, |
| 0x48393a2c, |
| 0x483a3a2d, |
| 0x483a3a2d, |
| 0x483a3a2d, |
| 0x493a3b2e, |
| 0x493a3b2e, |
| 0x493b3b2e, |
| 0x493b3b2e, |
| 0x493b3c2f, |
| 0x493b3c2f, |
| 0x493b3c2f, |
| 0x4a3c3c2f, |
| 0x4a3c3c2f, |
| 0x4a3c3d38, |
| 0x4a3c3d38, |
| 0x4b3d3d38, |
| 0x4b3d3d38, |
| 0x4b3d3e38, |
| 0x4b3d3e38, |
| 0x4b3e3e39, |
| 0x4c3e3e39, |
| 0x4c3e3e39, |
| 0x4c3f3f39, |
| 0x4c3f3f39, |
| 0x4d3f3f3a, |
| 0x4d3f3f3a, |
| 0x4d48483a, |
| 0x4d48483a, |
| 0x4d48483a, |
| 0x4d48483a, |
| 0x4e48483a, |
| 0x4e48483b, |
| 0x4e48483b, |
| 0x4f48493b, |
| 0x4f49493b, |
| 0x1a0c0907, |
| 0x1a0c0907, |
| 0x1a0c0907, |
| 0x1a0c0907, |
| 0x291b190e, |
| 0x291b190e, |
| 0x291b190e, |
| 0x291b190e, |
| 0x291b190e, |
| 0x2e281e1a, |
| 0x2e281e1a, |
| 0x2e281e1a, |
| 0x2e281e1a, |
| 0x392b291e, |
| 0x392b291e, |
| 0x392b291e, |
| 0x392b291e, |
| 0x392b291e, |
| 0x3c2e2b29, |
| 0x3c2e2b29, |
| 0x3c2e2b29, |
| 0x3c2e2b29, |
| 0x3c2e2b29, |
| 0x3c2e2b29, |
| 0x3c2e2b29, |
| 0x3c2e2b29, |
| 0x3e382e2a, |
| 0x3e382e2a, |
| 0x3e382e2a, |
| 0x3e382e2a, |
| 0x3e382e2a, |
| 0x483a382c, |
| 0x483a382c, |
| 0x483a382c, |
| 0x483a382c, |
| 0x493b392e, |
| 0x493b392e, |
| 0x493b392e, |
| 0x493b392e, |
| 0x4b3d3a38, |
| 0x4b3d3a38, |
| 0x4b3d3a38, |
| 0x4b3d3a38, |
| 0x4b3d3a38, |
| 0x4c3e3b38, |
| 0x4c3e3b38, |
| 0x4c3e3b38, |
| 0x4c3e3b38, |
| 0x4d483c39, |
| 0x4d483c39, |
| 0x4d483c39, |
| 0x4d483c39, |
| 0x4d483c39, |
| 0x4e483e3a, |
| 0x4e483e3a, |
| 0x4e483e3a, |
| 0x4e483e3a, |
| 0x4f493f3b, |
| 0x4f493f3b, |
| 0x4f493f3b, |
| 0x4f493f3b, |
| 0x584a483c, |
| 0x584a483c, |
| 0x584a483c, |
| 0x584a483c, |
| 0x594b483d, |
| 0x594b483d, |
| 0x594b483d, |
| 0x594b483d, |
| 0x594b493e, |
| 0x594b493e, |
| 0x594b493e, |
| 0x594b493e, |
| 0x5a4c493f, |
| 0x5a4c493f, |
| 0x5a4c493f, |
| 0x5a4c493f, |
| 0x5b4d4a48, |
| 0x5b4d4a48, |
| 0x5b4d4a48, |
| 0x5b4d4a48, |
| 0x5b4d4b48, |
| 0x5b4d4b48, |
| 0x5b4d4b48, |
| 0x5b4d4b48, |
| 0x5b4d4b48, |
| 0x5c4e4b48, |
| 0x5c4e4b48, |
| 0x5c4e4b48, |
| 0x5c4e4b48, |
| 0x5c4f4c49, |
| 0x5c4f4c49, |
| 0x5c4f4c49, |
| 0x5c4f4c49, |
| 0x5d584c49, |
| 0x5d584c49, |
| 0x5d584c49, |
| 0x5e584d4a, |
| 0x5e584d4a, |
| 0x5e584e4a, |
| 0x5e584e4a, |
| 0x5f594e4b, |
| 0x5f594e4b, |
| 0x5f594e4b, |
| 0x5f594f4b, |
| 0x5f594f4b, |
| 0x68594f4c, |
| 0x68594f4c, |
| 0x685a584c, |
| 0x685a584c, |
| 0x685a584c, |
| 0x685a584c, |
| 0x695b584d, |
| 0x695b594d, |
| 0x695b594d, |
| 0x695b594e, |
| 0x695b594e, |
| 0x6a5c594e, |
| 0x6a5c594e, |
| 0x6a5c594f, |
| 0x6a5c594f, |
| 0x6a5c5a4f, |
| 0x6a5c5a4f, |
| 0x6a5d5a58, |
| 0x6b5d5a58, |
| 0x6b5d5a58, |
| 0x6b5d5b58, |
| 0x6b5e5b58, |
| }; |
| |
| const uint16_t VP8_MvRefCostContext_G10[6][4][2] = |
| { |
| { { 1328, 10 }, |
| { 2047, 1 }, |
| { 2047, 1 }, |
| { 214, 304 }, |
| }, |
| { { 1072, 21 }, |
| { 979, 27 }, |
| { 1072, 21 }, |
| { 321, 201 }, |
| }, |
| { { 235, 278 }, |
| { 511, 107 }, |
| { 553, 93 }, |
| { 488, 115 }, |
| }, |
| { { 534, 99 }, |
| { 560, 92 }, |
| { 255, 257 }, |
| { 505, 109 }, |
| }, |
| { { 174, 361 }, |
| { 238, 275 }, |
| { 255, 257 }, |
| { 744, 53 }, |
| }, |
| { { 32, 922 }, |
| { 113, 494 }, |
| { 255, 257 }, |
| { 816, 43 }, |
| }, |
| }; |
| |
| const uint16_t VP8_QUANT_DC_G10[CODECHAL_VP8_MAX_QP] = |
| { |
| 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17, |
| 18, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 25, 25, 26, 27, 28, |
| 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, |
| 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, |
| 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, |
| 75, 76, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, |
| 91, 93, 95, 96, 98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118, |
| 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157 |
| }; |
| |
| const uint16_t VP8_QUANT_AC_G10[CODECHAL_VP8_MAX_QP/* + 1 + 32*/] = |
| { |
| /*4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,*/ |
| 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, |
| 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, |
| 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, |
| 52, 53, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, |
| 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, |
| 110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152, |
| 155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, |
| 213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284/*, |
| 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284*/ |
| }; |
| |
| extern const uint16_t VP8_MB_MODE_COST_LUMA_G10[10] = |
| { 657, 869, 915, 917, 208, 0, 0, 0, 0, 0}; |
| |
| static const uint16_t VP8_BLOCK_MODE_COST_G10[10][10][10] = |
| { |
| { {37, 1725, 1868, 1151, 1622, 2096, 2011, 1770, 2218, 2128 }, |
| {139, 759, 1683, 911, 1455, 1846, 1570, 1295, 1792, 1648 }, |
| {560, 1383, 408, 639, 1612, 1174, 1562, 1736, 847, 991 }, |
| {191, 1293, 1299, 466, 1774, 1840, 1784, 1691, 1698, 1505 }, |
| {211, 1624, 1294, 779, 714, 1622, 2222, 1554, 1706, 903 }, |
| {297, 1259, 1098, 1062, 1583, 618, 1053, 1889, 851, 1127 }, |
| {275, 703, 1356, 1111, 1597, 1075, 656, 1529, 1531, 1275 }, |
| {150, 1046, 1760, 1039, 1353, 1981, 2174, 728, 1730, 1379 }, |
| {516, 1414, 741, 1045, 1495, 738, 1288, 1619, 442, 1200 }, |
| {424, 1365, 706, 825, 1197, 1453, 1191, 1462, 1186, 519 }, |
| |
| }, |
| { {393, 515, 1491, 549, 1598, 1524, 964, 1126, 1651, 2172 }, |
| {693, 237, 1954, 641, 1525, 2073, 1183, 971, 1973, 2235 }, |
| {560, 739, 855, 836, 1224, 1115, 966, 839, 1076, 767 }, |
| {657, 368, 1406, 425, 1672, 1853, 1210, 1125, 1969, 1542 }, |
| {321, 1056, 1776, 774, 803, 3311, 1265, 1177, 1366, 636 }, |
| {693, 510, 949, 877, 1049, 658, 882, 1178, 1515, 1111 }, |
| {744, 377, 1278, 958, 1576, 1168, 477, 1146, 1838, 1501 }, |
| {488, 477, 1767, 973, 1107, 1511, 1773, 486, 1527, 1449 }, |
| {744, 1004, 695, 1012, 1326, 834, 1215, 774, 724, 704 }, |
| {522, 567, 1036, 1082, 1039, 1333, 873, 1135, 1189, 677 }, |
| |
| }, |
| { {103, 1441, 1000, 864, 1513, 1928, 1832, 1916, 1663, 1567 }, |
| {304, 872, 1100, 515, 1416, 1417, 3463, 1051, 1305, 1227 }, |
| {684, 2176, 242, 729, 1867, 1496, 2056, 1544, 1038, 930 }, |
| {534, 1198, 669, 300, 1805, 1377, 2165, 1894, 1249, 1153 }, |
| {346, 1602, 1178, 612, 997, 3381, 1335, 1328, 997, 646 }, |
| {393, 1027, 649, 813, 1276, 945, 1545, 1278, 875, 1031 }, |
| {528, 996, 930, 617, 1086, 1190, 621, 2760, 787, 1347 }, |
| {216, 873, 1595, 738, 1339, 3896, 3898, 743, 1343, 1605 }, |
| {675, 1580, 543, 749, 1859, 1245, 1589, 2377, 384, 1075 }, |
| {594, 1163, 415, 684, 1474, 1080, 1491, 1478, 1077, 801 }, |
| }, |
| { {238, 1131, 1483, 398, 1510, 1651, 1495, 1545, 1970, 2090 }, |
| {499, 456, 1499, 449, 1558, 1691, 1272, 969, 2114, 2116 }, |
| {675, 1386, 318, 645, 1449, 1588, 1666, 1925, 979, 859 }, |
| {467, 957, 1223, 238, 1825, 1704, 1608, 1560, 1665, 1376 }, |
| {331, 1460, 1238, 627, 787, 1882, 3928, 1544, 1897, 579 }, |
| {457, 1038, 903, 784, 1158, 725, 955, 1517, 842, 1016 }, |
| {505, 497, 1131, 812, 1508, 1206, 703, 1072, 1254, 1256 }, |
| {397, 741, 1336, 642, 1506, 1852, 1340, 599, 1854, 1000 }, |
| {625, 1212, 597, 750, 1291, 1057, 1401, 1401, 527, 954 }, |
| {499, 1041, 654, 752, 1299, 1217, 1605, 1424, 1377, 505 }, |
| }, |
| { {263, 1094, 1218, 602, 938, 1487, 1231, 1016, 1724, 1448 }, |
| {452, 535, 1728, 562, 1008, 1471, 1473, 873, 3182, 1136 }, |
| {553, 1570, 935, 1093, 826, 1339, 879, 1007, 1006, 476 }, |
| {365, 900, 1050, 582, 866, 1398, 1236, 1123, 1608, 1039 }, |
| {294, 2044, 1790, 1143, 430, 1642, 3688, 1549, 2080, 704 }, |
| {703, 1210, 958, 815, 1211, 960, 623, 2455, 815, 559 }, |
| {675, 574, 862, 1261, 866, 864, 761, 1267, 1014, 936 }, |
| {342, 1254, 1857, 989, 612, 1856, 1858, 553, 1840, 1037 }, |
| {553, 1316, 811, 1072, 1068, 728, 1328, 1317, 1064, 475 }, |
| {288, 1303, 1167, 1167, 823, 1634, 1636, 2497, 1294, 491 }, |
| }, |
| { {227, 1059, 1369, 1066, 1505, 740, 970, 1511, 972, 1775 }, |
| {516, 587, 1033, 646, 1188, 748, 978, 1445, 1294, 1450 }, |
| {684, 1048, 663, 747, 1126, 826, 1386, 1128, 635, 924 }, |
| {494, 814, 933, 510, 1606, 951, 878, 1344, 1031, 1347 }, |
| {553, 1071, 1327, 726, 809, 3376, 1330, 1324, 1062, 407 }, |
| {625, 1120, 988, 1121, 1197, 347, 1064, 1308, 862, 1206 }, |
| {633, 853, 1657, 1073, 1662, 634, 460, 1405, 811, 1155 }, |
| {505, 621, 1394, 876, 1394, 876, 878, 795, 878, 1399 }, |
| {684, 1302, 968, 1704, 1280, 561, 972, 1713, 387, 1104 }, |
| {397, 1447, 1060, 867, 957, 1058, 749, 1475, 1210, 660 }, |
| }, |
| { {331, 933, 1647, 761, 1647, 998, 513, 1402, 1461, 2219 }, |
| {573, 485, 1968, 641, 1570, 1198, 588, 1086, 1382, 1982 }, |
| {790, 942, 570, 790, 1607, 1005, 938, 1193, 714, 751 }, |
| {511, 745, 1152, 492, 1878, 1206, 596, 1867, 1617, 1157 }, |
| {452, 1308, 896, 896, 451, 1308, 3354, 1301, 1306, 794 }, |
| {693, 670, 1072, 1020, 1687, 566, 488, 1432, 1096, 3142 }, |
| {778, 566, 1993, 1283, 3139, 1251, 227, 1378, 1784, 1447 }, |
| {393, 937, 1091, 934, 939, 1348, 1092, 579, 1351, 1095 }, |
| {560, 1013, 1007, 1014, 1011, 644, 1165, 1155, 605, 1016 }, |
| {567, 627, 997, 793, 2562, 998, 849, 1260, 922, 748 }, |
| }, |
| { {338, 762, 1868, 717, 1247, 1757, 1263, 535, 1751, 2162 }, |
| {488, 442, 3235, 756, 1658, 1814, 1264, 528, 1857, 2119 }, |
| {522, 1087, 840, 1103, 843, 1354, 1098, 888, 946, 588 }, |
| {483, 688, 1502, 651, 1213, 1446, 1397, 491, 1908, 1253 }, |
| {452, 1386, 1910, 1175, 298, 1507, 3553, 930, 1904, 905 }, |
| {713, 839, 716, 715, 932, 719, 931, 848, 3088, 1042 }, |
| {516, 495, 1331, 1340, 1331, 1069, 665, 702, 1593, 1337 }, |
| {401, 977, 2167, 1537, 1069, 1764, 3810, 259, 3624, 1578 }, |
| {560, 1104, 601, 1371, 965, 658, 2704, 779, 967, 969 }, |
| {547, 1057, 801, 1141, 1133, 1397, 937, 605, 1252, 631 }, |
| }, |
| { {163, 1240, 925, 983, 1653, 1321, 1353, 1566, 946, 1601 }, |
| {401, 726, 758, 836, 1241, 926, 1656, 795, 1394, 1396 }, |
| {905, 1073, 366, 876, 1436, 1576, 1732, 2432, 459, 1019 }, |
| {594, 922, 835, 417, 1387, 1124, 1098, 2042, 843, 1023 }, |
| {415, 1262, 860, 1274, 758, 1272, 3318, 1010, 1276, 503 }, |
| {641, 1018, 1020, 1095, 1619, 667, 1371, 2348, 397, 849 }, |
| {560, 817, 903, 1014, 1420, 695, 756, 904, 821, 1421 }, |
| {406, 596, 1001, 993, 1257, 1258, 1260, 746, 1002, 1264 }, |
| {979, 1371, 780, 1188, 1693, 1024, 1286, 1699, 183, 1405 }, |
| {733, 1292, 458, 884, 1554, 889, 1151, 1286, 738, 740 }, |
| }, |
| { {109, 1377, 1177, 933, 1140, 1928, 1639, 1705, 1861, 1292 }, |
| {342, 570, 1081, 638, 1154, 1231, 1339, 1342, 1750, 1494 }, |
| {560, 1203, 345, 767, 1325, 1681, 1425, 1905, 1205, 786 }, |
| {406, 1027, 1011, 410, 1306, 1901, 1389, 1636, 1493, 776 }, |
| {206, 1329, 1337, 1037, 802, 1600, 3646, 1451, 1603, 693 }, |
| {472, 1167, 758, 911, 1424, 703, 2749, 1428, 703, 764 }, |
| {342, 780, 1139, 889, 1290, 1139, 781, 1544, 957, 1042 }, |
| {227, 888, 1039, 929, 988, 3753, 1707, 818, 1710, 1306 }, |
| {767, 1055, 627, 725, 1312, 980, 1065, 1324, 599, 811 }, |
| {304, 1372, 888, 1173, 979, 1578, 1580, 1974, 1318, 482 }, |
| } |
| }; |
| |
| // VP8 BRC |
| extern const uint8_t VP8_BRC_IFRAME_COST_TABLE_G10[128][4]; |
| extern const uint32_t VP8_BRC_PFRAME_COST_TABLE_G10[256]; |
| extern const uint32_t VP8_NewMVSkipThreshold_G10[128]; |
| |
| const uint8_t VP8_BRC_QPAdjustment_DistThreshold_MaxFrameThreshold_DistQPAdjustment_IPB_g10[576] = |
| { |
| 0x01, 0x03, 0x05, 0x07, 0x09, 0x01, 0x02, 0x03, 0x05, 0x07, 0x00, 0x00, 0x01, 0x02, 0x04, 0x00, |
| 0x00, 0x00, 0x01, 0x02, 0xff, 0x00, 0x00, 0x00, 0x01, 0xfd, 0xfe, 0xff, 0x00, 0x00, 0xfb, 0xfc, |
| 0xfe, 0xff, 0x00, 0xf9, 0xfa, 0xfc, 0xfe, 0xff, 0xf7, 0xf9, 0xfb, 0xfe, 0xff, 0x00, 0x04, 0x1e, |
| 0x3c, 0x50, 0x78, 0x8c, 0xc8, 0xff, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x01, 0x02, 0x05, 0x08, 0x0a, 0x01, 0x02, 0x04, 0x06, 0x08, 0x00, 0x01, 0x02, 0x04, 0x06, 0x00, |
| 0x00, 0x00, 0x01, 0x02, 0xff, 0x00, 0x00, 0x00, 0x01, 0xfe, 0xff, 0xff, 0x00, 0x00, 0xfd, 0xfe, |
| 0xff, 0xff, 0x00, 0xfb, 0xfd, 0xfe, 0xff, 0x00, 0xf9, 0xfa, 0xfc, 0xfe, 0xff, 0x00, 0x04, 0x1e, |
| 0x3c, 0x50, 0x78, 0x8c, 0xc8, 0xff, 0x04, 0x05, 0x06, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x01, 0x02, 0x05, 0x08, 0x0a, 0x01, 0x02, 0x04, 0x06, 0x08, 0x00, 0x01, 0x02, 0x04, 0x06, 0x00, |
| 0x00, 0x00, 0x01, 0x02, 0xff, 0x00, 0x00, 0x00, 0x01, 0xfe, 0xff, 0xff, 0x00, 0x00, 0xfd, 0xfe, |
| 0xff, 0xff, 0x00, 0xfb, 0xfd, 0xfe, 0xff, 0x00, 0xf9, 0xfa, 0xfc, 0xfe, 0xff, 0x00, 0x02, 0x14, |
| 0x28, 0x46, 0x82, 0xa0, 0xc8, 0xff, 0x04, 0x05, 0x06, 0x06, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x08, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, |
| 0x07, 0x09, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x06, 0x07, 0xfe, 0xff, 0x00, 0x00, 0x00, |
| 0x01, 0x02, 0x03, 0x05, 0xfd, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x01, 0x03, 0x05, 0xfc, 0xfe, 0xff, |
| 0x00, 0x00, 0x00, 0x01, 0x03, 0x05, 0xfb, 0xfd, 0xfe, 0xff, 0x00, 0x00, 0x01, 0x03, 0x05, 0xfa, |
| 0xfc, 0xfe, 0xff, 0x00, 0x00, 0x01, 0x03, 0x05, 0xfa, 0xfc, 0xfe, 0xff, 0x00, 0x00, 0x01, 0x03, |
| 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0x07, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, |
| 0x06, 0x08, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0x07, 0x08, 0xfe, 0xff, 0x00, 0x00, 0x00, |
| 0x02, 0x04, 0x05, 0x06, 0xfd, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x01, 0x04, 0x05, 0xfc, 0xfe, 0xff, |
| 0x00, 0x00, 0x00, 0x01, 0x04, 0x05, 0xfc, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x05, 0xfc, |
| 0xfd, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x01, 0x05, 0xfb, 0xfc, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x01, |
| 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0x07, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, |
| 0x06, 0x08, 0xff, 0x00, 0x00, 0x00, 0x00, 0x03, 0x05, 0x07, 0x08, 0xfe, 0xff, 0x00, 0x00, 0x00, |
| 0x02, 0x04, 0x05, 0x06, 0xfd, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x01, 0x04, 0x05, 0xfc, 0xfe, 0xff, |
| 0x00, 0x00, 0x00, 0x01, 0x04, 0x05, 0xfc, 0xfe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x04, 0x05, 0xfc, |
| 0xfd, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x01, 0x05, 0xfb, 0xfc, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x01, |
| 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
| }; |
| |
| const uint16_t VP8_BRC_QUANT_DC_TABLE [128] = |
| { |
| 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17, |
| 18, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 25, 25, 26, 27, 28, |
| 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, |
| 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, |
| 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, |
| 75, 76, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, |
| 91, 93, 95, 96, 98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118, |
| 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157 |
| }; |
| |
| const uint16_t VP8_BRC_QUANT_AC_TABLE [128] = |
| { |
| 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, |
| 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, |
| 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, |
| 52, 53, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, |
| 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, |
| 110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152, |
| 155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, |
| 213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284 |
| }; |
| |
| const uint16_t VP8_BRC_SKIP_MV_THRESHOLD_TABLE [256] = |
| { |
| 111, 120, 129, 137, 146, 155, 163, 172, 180, 189, 198, 206, 215, 224, 232, 241, |
| 249, 258, 267, 275, 284, 293, 301, 310, 318, 327, 336, 344, 353, 362, 370, 379, |
| 387, 396, 405, 413, 422, 431, 439, 448, 456, 465, 474, 482, 491, 500, 508, 517, |
| 525, 534, 543, 551, 560, 569, 577, 586, 594, 603, 612, 620, 629, 638, 646, 655, |
| 663, 672, 681, 689, 698, 707, 715, 724, 733, 741, 750, 758, 767, 776, 784, 793, |
| 802, 810, 819, 827, 836, 845, 853, 862, 871, 879, 888, 896, 905, 914, 922, 931, |
| 940, 948, 957, 965, 974, 983, 991, 1000, 1009, 1017, 1026, 1034, 1043, 1052, 1060, 1069, |
| 1078,1086, 1095, 1103, 1112, 1121, 1129, 1138, 1147, 1155, 1164, 1172, 1181, 1190, 1198, 1208 |
| }; |
| |
| extern const uint32_t VP8_MODE_MV_COST_TABLE_G10[128][5] = |
| { |
| {0x008f0000, 0x006f0000, 0x00000000, 0x09060400, 0x000e000a}, |
| {0x008f0000, 0x006f0000, 0x00000000, 0x09000400, 0x0f000c00}, |
| {0x008f0000, 0x006f0000, 0x00000000, 0x09000400, 0x0f000c00}, |
| {0x008f0000, 0x006f0000, 0x00000000, 0x09000400, 0x0f000c00}, |
| {0x008f0000, 0x006f0000, 0x00000000, 0x12000900, 0x1e001800}, |
| {0x008f0000, 0x006f0000, 0x00000000, 0x12000900, 0x1e001800}, |
| {0x008f0000, 0x006f0000, 0x00000000, 0x12000900, 0x1e001800}, |
| {0x008f0000, 0x006f0000, 0x00000000, 0x12000900, 0x1e001800}, |
| {0x008f0000, 0x006f0000, 0x00000000, 0x12000900, 0x1e001800}, |
| {0x008f0000, 0x006f0000, 0x00000000, 0x1b000d00, 0x2d002400}, |
| {0x008f0000, 0x006f0000, 0x00000000, 0x1b000d00, 0x2d002400}, |
| {0x008f0000, 0x006f0000, 0x00000000, 0x1b000d00, 0x2d002400}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x468f0000, 0x006f0200, 0x05000000, 0x00000000, 0x00000000}, |
| {0x6f8f0000, 0x006f0500, 0x0b000000, 0x00000000, 0x00000000}, |
| {0x6f8f0000, 0x006f0500, 0x0b000000, 0x00000000, 0x00000000}, |
| {0x6f8f0000, 0x006f0500, 0x0b000000, 0x00000000, 0x00000000}, |
| {0x6f8f0000, 0x006f0500, 0x0b000000, 0x00000000, 0x00000000}, |
| {0x6f8f0000, 0x006f0500, 0x0b000000, 0x00000000, 0x00000000}, |
| {0x6f8f0000, 0x006f0500, 0x0b000000, 0x00000000, 0x00000000}, |
| {0x6f8f0000, 0x006f0500, 0x0b000000, 0x00000000, 0x00000000}, |
| {0x6f8f0000, 0x006f0500, 0x0b000000, 0x00000000, 0x00000000}, |
| {0x6f8f0000, 0x006f0500, 0x0b000000, 0x00000000, 0x00000000}, |
| {0x6f8f0000, 0x006f0500, 0x0b000000, 0x00000000, 0x00000000}, |
| {0x6f8f0000, 0x006f0500, 0x0b000000, 0x00000000, 0x00000000}, |
| {0x6f8f0000, 0x006f0500, 0x0b000000, 0x00000000, 0x00000000}, |
| {0x6f8f0000, 0x006f0500, 0x0b000000, 0x00000000, 0x00000000}, |
| {0x6f8f0000, 0x006f0500, 0x0b000000, 0x00000000, 0x00000000}, |
| {0x6f8f0000, 0x006f0500, 0x0b000000, 0x00000000, 0x00000000}, |
| {0x6f8f0010, 0x006f0700, 0x18000000, 0x00000000, 0x00000000}, |
| {0x6f8f0010, 0x006f0700, 0x18000000, 0x00000000, 0x00000000}, |
| {0x6f8f0010, 0x006f0700, 0x18000000, 0x00000000, 0x00000000}, |
| {0x6f8f0010, 0x006f0700, 0x18000000, 0x00000000, 0x00000000}, |
| {0x6f8f0010, 0x006f0700, 0x18000000, 0x00000000, 0x00000000}, |
| {0x6f8f0010, 0x006f0700, 0x18000000, 0x00000000, 0x00000000}, |
| {0x6f8f0010, 0x006f0700, 0x18000000, 0x00000000, 0x00000000}, |
| {0x6f8f0010, 0x006f0700, 0x18000000, 0x00000000, 0x00000000}, |
| {0x6f8f0010, 0x006f0700, 0x18000000, 0x00000000, 0x00000000}, |
| {0x6f8f0010, 0x006f0700, 0x18000000, 0x00000000, 0x00000000}, |
| {0x6f8f0010, 0x006f0700, 0x18000000, 0x00000000, 0x00000000}, |
| {0x6f8f0010, 0x006f0700, 0x18000000, 0x00000000, 0x00000000}, |
| {0x6f8f0010, 0x006f0700, 0x18000000, 0x00000000, 0x00000000}, |
| {0x6f8f0010, 0x006f0700, 0x18000000, 0x00000000, 0x00000000}, |
| {0x6f8f0010, 0x006f0700, 0x18000000, 0x00000000, 0x00000000}, |
| {0x188f0010, 0x006f0a00, 0x16000000, 0x00000000, 0x00000000}, |
| {0x188f0010, 0x006f0a00, 0x16000000, 0x00000000, 0x00000000}, |
| {0x188f0010, 0x006f0a00, 0x16000000, 0x00000000, 0x00000000}, |
| {0x188f0010, 0x006f0a00, 0x16000000, 0x00000000, 0x00000000}, |
| {0x188f0010, 0x006f0a00, 0x16000000, 0x00000000, 0x00000000}, |
| {0x188f0010, 0x006f0a00, 0x16000000, 0x00000000, 0x00000000}, |
| {0x188f0010, 0x006f0a00, 0x16000000, 0x00000000, 0x00000000}, |
| {0x188f0010, 0x006f0a00, 0x16000000, 0x00000000, 0x00000000}, |
| {0x188f0010, 0x006f0a00, 0x16000000, 0x00000000, 0x00000000}, |
| {0x188f0010, 0x006f0a00, 0x16000000, 0x00000000, 0x00000000}, |
| {0x188f0010, 0x006f0a00, 0x16000000, 0x00000000, 0x00000000}, |
| {0x188f0010, 0x006f0a00, 0x16000000, 0x00000000, 0x00000000}, |
| {0x188f0010, 0x006f0a00, 0x16000000, 0x00000000, 0x00000000}, |
| {0x188f0010, 0x006f0a00, 0x16000000, 0x00000000, 0x00000000}, |
| {0x5e8f0020, 0x006f0d00, 0x1b000000, 0x00000000, 0x00000000}, |
| {0x5e8f0020, 0x006f0d00, 0x1b000000, 0x00000000, 0x00000000}, |
| {0x5e8f0020, 0x006f0d00, 0x1b000000, 0x00000000, 0x00000000}, |
| {0x5e8f0020, 0x006f0d00, 0x1b000000, 0x00000000, 0x00000000}, |
| {0x5e8f0020, 0x006f0d00, 0x1b000000, 0x00000000, 0x00000000}, |
| {0x5e8f0020, 0x006f0d00, 0x1b000000, 0x00000000, 0x00000000}, |
| {0x5e8f0020, 0x006f0d00, 0x1b000000, 0x00000000, 0x00000000}, |
| {0x5e8f0020, 0x006f0d00, 0x1b000000, 0x00000000, 0x00000000}, |
| {0x5e8f0020, 0x006f0d00, 0x1b000000, 0x00000000, 0x00000000}, |
| {0x5e8f0020, 0x006f0d00, 0x1b000000, 0x00000000, 0x00000000}, |
| {0x5e8f0020, 0x006f0d00, 0x1b000000, 0x00000000, 0x00000000}, |
| {0x5e8f0020, 0x006f0d00, 0x1b000000, 0x00000000, 0x00000000}, |
| {0x5e8f0020, 0x006f0d00, 0x1b000000, 0x00000000, 0x00000000}, |
| {0x5e8f0020, 0x006f0d00, 0x1b000000, 0x00000000, 0x00000000}, |
| {0x5e8f0020, 0x006f0d00, 0x1b000000, 0x00000000, 0x00000000}, |
| {0x6f8f0020, 0x006f0f00, 0x21000000, 0x00000000, 0x00000000}, |
| {0x6f8f0020, 0x006f0f00, 0x21000000, 0x00000000, 0x00000000}, |
| {0x6f8f0020, 0x006f0f00, 0x21000000, 0x00000000, 0x00000000}, |
| {0x6f8f0020, 0x006f0f00, 0x21000000, 0x00000000, 0x00000000}, |
| {0x6f8f0020, 0x006f0f00, 0x21000000, 0x00000000, 0x00000000}, |
| {0x6f8f0020, 0x006f0f00, 0x21000000, 0x00000000, 0x00000000}, |
| {0x6f8f0020, 0x006f0f00, 0x21000000, 0x00000000, 0x00000000}, |
| {0x6f8f0020, 0x006f0f00, 0x21000000, 0x00000000, 0x00000000}, |
| {0x6f8f0020, 0x006f0f00, 0x21000000, 0x00000000, 0x00000000}, |
| {0x6f8f0020, 0x006f0f00, 0x21000000, 0x00000000, 0x00000000}, |
| {0xea8f0030, 0x006f1200, 0x26000000, 0x00000000, 0x00000000}, |
| {0xea8f0030, 0x006f1200, 0x26000000, 0x00000000, 0x00000000}, |
| {0xea8f0030, 0x006f1200, 0x26000000, 0x00000000, 0x00000000}, |
| {0xea8f0030, 0x006f1200, 0x26000000, 0x00000000, 0x00000000}, |
| {0xea8f0030, 0x006f1200, 0x26000000, 0x00000000, 0x00000000}, |
| {0xea8f0030, 0x006f1200, 0x26000000, 0x00000000, 0x00000000}, |
| {0xea8f0030, 0x006f1200, 0x26000000, 0x00000000, 0x00000000}, |
| {0xea8f0030, 0x006f1200, 0x26000000, 0x00000000, 0x00000000}, |
| {0x388f0030, 0x006f1500, 0x2c000000, 0x00000000, 0x00000000}, |
| {0x388f0030, 0x006f1500, 0x2c000000, 0x00000000, 0x00000000}, |
| {0x388f0030, 0x006f1500, 0x2c000000, 0x00000000, 0x00000000}, |
| {0x388f0030, 0x006f1500, 0x2c000000, 0x00000000, 0x00000000}, |
| {0x388f0030, 0x006f1500, 0x2c000000, 0x00000000, 0x00000000}, |
| {0x388f0030, 0x006f1500, 0x2c000000, 0x00000000, 0x00000000}, |
| {0x768f0030, 0x006f1700, 0x31000000, 0x00000000, 0x00000000}, |
| {0x768f0030, 0x006f1700, 0x31000000, 0x00000000, 0x00000000}, |
| {0x768f0030, 0x006f1700, 0x31000000, 0x00000000, 0x00000000}, |
| {0x768f0030, 0x006f1700, 0x31000000, 0x00000000, 0x00000000}, |
| {0x768f0030, 0x006f1700, 0x31000000, 0x00000000, 0x00000000}, |
| {0x768f0030, 0x006f1700, 0x31000000, 0x00000000, 0x00000000}, |
| {0x768f0030, 0x006f1700, 0x31000000, 0x00000000, 0x00000000}, |
| {0x6f8f0040, 0x006f1a00, 0x37000000, 0x00000000, 0x00000000}, |
| {0x6f8f0040, 0x006f1a00, 0x37000000, 0x00000000, 0x00000000}, |
| {0x6f8f0040, 0x006f1a00, 0x37000000, 0x00000000, 0x00000000}, |
| {0x6f8f0040, 0x006f1a00, 0x37000000, 0x00000000, 0x00000000}, |
| {0x6f8f0040, 0x006f1a00, 0x37000000, 0x00000000, 0x00000000}, |
| {0x028f0040, 0x006f1d00, 0x3c000000, 0x00000000, 0x00000000}, |
| }; |
| |
| extern const uint8_t VP8_DEFAULT_COEFF_PROBS_G10[4][8][3][11] = |
| { |
| { |
| { |
| { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128}, |
| { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128}, |
| { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128} |
| }, |
| { |
| { 253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128}, |
| { 189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128}, |
| { 106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128} |
| }, |
| { |
| { 1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128}, |
| { 181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128}, |
| { 78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128} |
| }, |
| { |
| { 1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128}, |
| { 184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128}, |
| { 77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128} |
| }, |
| { |
| { 1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128}, |
| { 170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128}, |
| { 37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128} |
| }, |
| { |
| { 1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128}, |
| { 207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128}, |
| { 102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128} |
| }, |
| { |
| { 1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128}, |
| { 177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128}, |
| { 80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128} |
| }, |
| { |
| { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128}, |
| { 246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128}, |
| { 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128} |
| } |
| }, |
| { |
| { |
| { 198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62}, |
| { 131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1}, |
| { 68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128} |
| }, |
| { |
| { 1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128}, |
| { 184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128}, |
| { 81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128} |
| }, |
| { |
| { 1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128}, |
| { 99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128}, |
| { 23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128} |
| }, |
| { |
| { 1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128}, |
| { 109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128}, |
| { 44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128} |
| }, |
| { |
| { 1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128}, |
| { 94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128}, |
| { 22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128} |
| }, |
| { |
| { 1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128}, |
| { 124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128}, |
| { 35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128} |
| }, |
| { |
| { 1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128}, |
| { 121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128}, |
| { 45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128} |
| }, |
| { |
| { 1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128}, |
| { 203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128}, |
| { 137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128} |
| } |
| }, |
| { |
| { |
| { 253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128}, |
| { 175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128}, |
| { 73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128} |
| }, |
| { |
| { 1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128}, |
| { 239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128}, |
| { 155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128} |
| }, |
| { |
| { 1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128}, |
| { 201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128}, |
| { 69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128} |
| }, |
| { |
| { 1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128}, |
| { 223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128}, |
| { 141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128} |
| }, |
| { |
| { 1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128}, |
| { 190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128}, |
| { 149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128} |
| }, |
| { |
| { 1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128}, |
| { 247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128}, |
| { 240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128} |
| }, |
| { |
| { 1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128}, |
| { 213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128}, |
| { 55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128} |
| }, |
| { |
| { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128}, |
| { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128}, |
| { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128} |
| } |
| }, |
| { |
| { |
| { 202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255}, |
| { 126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128}, |
| { 61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128} |
| }, |
| { |
| { 1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128}, |
| { 166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128}, |
| { 39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128} |
| }, |
| { |
| { 1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128}, |
| { 124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128}, |
| { 24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128} |
| }, |
| { |
| { 1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128}, |
| { 149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128}, |
| { 28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128} |
| }, |
| { |
| { 1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128}, |
| { 123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128}, |
| { 20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128} |
| }, |
| { |
| { 1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128}, |
| { 168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128}, |
| { 47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128} |
| }, |
| { |
| { 1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128}, |
| { 141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128}, |
| { 42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128} |
| }, |
| { |
| { 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128}, |
| { 244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128}, |
| { 238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128} |
| } |
| } |
| }; |
| |
| const uint16_t VP8_C0_TABLE[256] = |
| { |
| 2047, 2047, 1791, 1641, 1535, 1452, 1385, 1328, 1279, 1235, 1196, 1161, 1129, 1099, 1072, 1046, |
| 1023, 1000, 979, 959, 940, 922, 905, 889, 873, 858, 843, 829, 816, 803, 790, 778, |
| 767, 755, 744, 733, 723, 713, 703, 693, 684, 675, 666, 657, 649, 641, 633, 625, |
| 617, 609, 602, 594, 587, 580, 573, 567, 560, 553, 547, 541, 534, 528, 522, 516, |
| 511, 505, 499, 494, 488, 483, 477, 472, 467, 462, 457, 452, 447, 442, 437, 433, |
| 428, 424, 419, 415, 410, 406, 401, 397, 393, 389, 385, 381, 377, 373, 369, 365, |
| 361, 357, 353, 349, 346, 342, 338, 335, 331, 328, 324, 321, 317, 314, 311, 307, |
| 304, 301, 297, 294, 291, 288, 285, 281, 278, 275, 272, 269, 266, 263, 260, 257, |
| 255, 252, 249, 246, 243, 240, 238, 235, 232, 229, 227, 224, 221, 219, 216, 214, |
| 211, 208, 206, 203, 201, 198, 196, 194, 191, 189, 186, 184, 181, 179, 177, 174, |
| 172, 170, 168, 165, 163, 161, 159, 156, 154, 152, 150, 148, 145, 143, 141, 139, |
| 137, 135, 133, 131, 129, 127, 125, 123, 121, 119, 117, 115, 113, 111, 109, 107, |
| 105, 103, 101, 99, 97, 95, 93, 92, 90, 88, 86, 84, 82, 81, 79, 77, |
| 75, 73, 72, 70, 68, 66, 65, 63, 61, 60, 58, 56, 55, 53, 51, 50, |
| 48, 46, 45, 43, 41, 40, 38, 37, 35, 33, 32, 30, 29, 27, 25, 24, |
| 22, 21, 19, 18, 16, 15, 13, 12, 10, 9, 7, 6, 4, 3, 1, 1 |
| }; |
| |
| extern const uint8_t VP8_PROBABILITY_UPDATE_FLAGS_G10 [VP8_NUM_COEFF_PLANES][VP8_NUM_COEFF_BANDS][VP8_NUM_LOCAL_COMPLEXITIES][VP8_NUM_COEFF_NODES]= { |
| |
| { |
| {{0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0}}, |
| {{1,1,1,0,0,0,0,0,0,0,0}, {1,1,1,1,0,0,0,0,0,0,0}, {1,1,1,1,1,0,0,0,0,0,0}}, |
| {{0,1,1,1,0,0,0,0,0,0,0}, {1,1,1,0,0,0,0,0,0,0,0}, {1,1,1,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,1,0,0,0,0,0,0,0}, {1,1,1,0,0,0,0,0,0,0,0}, {1,1,1,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,1,0,0,0,0,0,0,0}, {1,1,1,0,0,0,0,0,0,0,0}, {1,1,1,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,1,0,0,0,0,0,0,0}, {1,1,1,0,0,0,0,0,0,0,0}, {1,1,1,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,1,0,0,0,0,0,0,0}, {1,1,1,0,0,0,0,0,0,0,0}, {1,1,1,0,0,0,0,0,0,0,0}}, |
| {{0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0}} |
| }, |
| |
| { |
| {{1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,1,0,0,0,0,0,0,0,0}, {1,1,1,1,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0}} |
| }, |
| |
| { |
| {{1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0}} |
| }, |
| |
| { |
| {{1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,1,0,0,0,0,0,0,0,0}, {1,1,1,1,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,1,1,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}, {1,1,0,0,0,0,0,0,0,0,0}}, |
| {{0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0}} |
| } |
| }; |
| |
| extern const uint8_t VP8_COEFF_UPDATE_PROBS_G10[4][8][3][11] = |
| { |
| { |
| { |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255}, |
| { 250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255}, |
| { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| } |
| }, |
| { |
| { |
| { 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255}, |
| { 234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255} |
| }, |
| { |
| { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| } |
| }, |
| { |
| { |
| { 186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255}, |
| { 251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| } |
| }, |
| { |
| { |
| { 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255}, |
| { 248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| }, |
| { |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255}, |
| { 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255} |
| } |
| } |
| }; |
| |
| static const int32_t iMbEncCurbeSize_g10[CODECHAL_ENCODE_VP8_MBENC_IDX_NUM] = { |
| sizeof(struct MediaObjectVp8MbencIStaticDataG10), |
| sizeof(struct MediaObjectVp8MbencIStaticDataG10), |
| sizeof(struct MediaObjectVp8MbencPStaticDataG10) |
| }; |
| |
| static const int32_t iBrcBtCount_g10[CODECHAL_ENCODE_VP8_BRC_IDX_NUM] = { |
| CODECHAL_VP8_MBENC_NUM_SURFACES_G10, |
| CODECHAL_VP8_BRC_INIT_RESET_NUM_SURFACES_G10, |
| CODECHAL_VP8_BRC_INIT_RESET_NUM_SURFACES_G10, |
| CODECHAL_VP8_BRC_UPDATE_NUM_SURFACES_G10 |
| }; |
| |
| static const int32_t iBrcCurbeSize_g10[CODECHAL_ENCODE_VP8_BRC_IDX_NUM] = { |
| sizeof(struct MediaObjectVp8MbencIStaticDataG10), |
| sizeof(struct MediaObjectVp8BrcInitResetStaticDataG10), |
| sizeof(struct MediaObjectVp8BrcInitResetStaticDataG10), |
| sizeof(struct MediaObjectVp8BrcUpdateStaticDataG10) |
| }; |
| |
| CodechalEncodeVp8G10::CodechalEncodeVp8G10( |
| CodechalHwInterface* hwInterface, |
| CodechalDebugInterface* debugInterface, |
| PCODECHAL_STANDARD_INFO standardInfo) |
| :CodechalEncodeVp8(hwInterface, debugInterface, standardInfo) |
| { |
| CODECHAL_ENCODE_FUNCTION_ENTER; |
| |
| pfnGetKernelHeaderAndSize = GetKernelHeaderAndSize; |
| |
| m_kuid = IDR_CODEC_AllVP8Enc; |
| #ifndef _FULL_OPEN_SOURCE |
| m_kernelBase = (uint8_t*)IGCODECKRN_G10; |
| #else |
| m_kernelBase = nullptr; |
| #endif |
| |
| CodecHalGetKernelBinaryAndSize( |
| m_kernelBase, |
| m_kuid, |
| &m_kernelBinary, |
| &m_combinedKernelSize); |
| |
| m_hwInterface->GetStateHeapSettings()->dwNumSyncTags = CODECHAL_NUM_VP8_ENC_SYNC_TAGS; |
| m_hwInterface->GetStateHeapSettings()->dwIshSize += |
| MOS_ALIGN_CEIL(m_combinedKernelSize, (1 << MHW_KERNEL_OFFSET_SHIFT)); |
| m_hwInterface->GetStateHeapSettings()->dwDshSize = CODECHAL_INIT_DSH_SIZE_VP8_ENC; |
| |
| m_brcDistortionBufferSupported = true; |
| m_brcConstantBufferSupported = true; |
| m_brcConstantSurfaceWidth = CODECHAL_ENCODE_VP8_BRC_CONSTANTSURFACE_WIDTH; |
| m_brcConstantSurfaceHeight = CODECHAL_ENCODE_VP8_BRC_CONSTANTSURFACE_HEIGHT; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::Initialize(CodechalSetting * codecHalSettings) |
| { |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_FUNCTION_ENTER; |
| |
| // common initilization |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodechalEncodeVp8::Initialize(codecHalSettings)); |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::InitKernelState() |
| { |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_FUNCTION_ENTER; |
| |
| // Init kernel state |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(InitKernelStateMe()); |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(InitKernelStateMbEnc()); |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(InitKernelStateBrc()); |
| |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(InitKernelStateTpu()); |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(InitKernelStateMpu()); |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::GetKernelHeaderAndSize( |
| void *binary, |
| EncOperation operation, |
| uint32_t krnStateIdx, |
| void *krnHeader, |
| uint32_t *krnSize) |
| { |
| struct CodechalVp8KernelHeaderG10 * kernelHeaderTable; |
| PCODECHAL_KERNEL_HEADER currKrnHeader, invalidEntry, nextKrnHeader; |
| uint32_t nextKrnOffset; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(binary); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(krnHeader); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(krnSize); |
| |
| kernelHeaderTable = (struct CodechalVp8KernelHeaderG10*)binary; |
| invalidEntry = &(kernelHeaderTable->VP8_BRC_FrameEncUpdate) + 1; |
| nextKrnOffset = *krnSize; |
| |
| if (operation == ENC_SCALING4X) |
| { |
| currKrnHeader = &kernelHeaderTable->PLY_DScale_PLY; |
| } |
| else if (operation == ENC_ME) |
| { |
| currKrnHeader = &kernelHeaderTable->VP8_ME_P; |
| } |
| else if (operation == ENC_BRC) |
| { |
| currKrnHeader = &kernelHeaderTable->VP8MBEnc_I_Dist; |
| } |
| else if (operation == ENC_MBENC_I_LUMA) |
| { |
| currKrnHeader = &kernelHeaderTable->VP8MBEnc_I_Luma; |
| } |
| else if (operation == ENC_MBENC) |
| { |
| currKrnHeader = &kernelHeaderTable->VP8MBEnc_Norm_Frm_I; |
| } |
| else if (operation == ENC_MPU) |
| { |
| currKrnHeader = &kernelHeaderTable->VP8_MPU; |
| } |
| else if (operation == ENC_TPU) |
| { |
| currKrnHeader = &kernelHeaderTable->VP8_TPU; |
| } |
| else |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Unsupported ENC mode requested"); |
| return MOS_STATUS_INVALID_PARAMETER; |
| } |
| |
| currKrnHeader += krnStateIdx; |
| *((PCODECHAL_KERNEL_HEADER)krnHeader) = *currKrnHeader; |
| |
| nextKrnHeader = (currKrnHeader + 1); |
| if (nextKrnHeader < invalidEntry) |
| { |
| nextKrnOffset = nextKrnHeader->KernelStartPointer << MHW_KERNEL_OFFSET_SHIFT; |
| } |
| *krnSize = nextKrnOffset - (currKrnHeader->KernelStartPointer << MHW_KERNEL_OFFSET_SHIFT); |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::InitKernelStateHelper( |
| struct CodechalEncodeVp8InitKernelStateParams * params) |
| { |
| PMHW_STATE_HEAP_INTERFACE stateHeapInterface; |
| PMHW_KERNEL_STATE kernelStatePtr; |
| CODECHAL_KERNEL_HEADER currKrnHeader; |
| uint32_t kernelSize; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_FUNCTION_ENTER; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pKernelState); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pRenderEngineInterface); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pRenderEngineInterface->GetHwCaps()); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pRenderEngineInterface->m_stateHeapInterface); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pui8Binary); |
| |
| stateHeapInterface = params->pRenderEngineInterface->m_stateHeapInterface; |
| kernelStatePtr = params->pKernelState; |
| kernelSize = params->dwCombinedKernelSize; |
| |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(pfnGetKernelHeaderAndSize( |
| params->pui8Binary, |
| params->Operation, |
| params->dwKrnStateIdx, |
| &currKrnHeader, |
| &kernelSize)); |
| |
| kernelStatePtr->KernelParams.iBTCount = params->iBtCount; |
| kernelStatePtr->KernelParams.iThreadCount = params->pRenderEngineInterface->GetHwCaps()->dwMaxThreads; |
| kernelStatePtr->KernelParams.iCurbeLength = params->iCurbeCount; |
| kernelStatePtr->KernelParams.iBlockWidth = CODECHAL_MACROBLOCK_WIDTH; |
| kernelStatePtr->KernelParams.iBlockHeight = CODECHAL_MACROBLOCK_HEIGHT; |
| kernelStatePtr->KernelParams.iIdCount = 1; |
| |
| kernelStatePtr->dwCurbeOffset = stateHeapInterface->pStateHeapInterface->GetSizeofCmdInterfaceDescriptorData(); |
| kernelStatePtr->KernelParams.pBinary = |
| params->pui8Binary + |
| (currKrnHeader.KernelStartPointer << MHW_KERNEL_OFFSET_SHIFT); |
| kernelStatePtr->KernelParams.iSize = kernelSize; |
| |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(stateHeapInterface->pfnCalculateSshAndBtSizesRequested( |
| stateHeapInterface, |
| kernelStatePtr->KernelParams.iBTCount, |
| &kernelStatePtr->dwSshSize, |
| &kernelStatePtr->dwBindingTableSize)); |
| |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(m_hwInterface->MhwInitISH(stateHeapInterface, kernelStatePtr)); |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::InitKernelStateMbEnc() |
| { |
| MhwRenderInterface *renderEngineInterface; |
| PMHW_STATE_HEAP_INTERFACE stateHeapInterface; |
| PMHW_KERNEL_STATE kernelStatePtr; |
| uint32_t combinedKernelSize; |
| uint32_t krnStateIdx; |
| struct CodechalBindingTableVp8Mbenc* bindingTable; |
| uint8_t *binary; |
| struct CodechalEncodeVp8InitKernelStateParams initKernelStateParams; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_FUNCTION_ENTER; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(m_hwInterface->GetRenderInterface()); |
| |
| renderEngineInterface = m_hwInterface->GetRenderInterface(); |
| stateHeapInterface = renderEngineInterface->m_stateHeapInterface; |
| CODECHAL_ENCODE_CHK_NULL_RETURN(stateHeapInterface); |
| |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalGetKernelBinaryAndSize( |
| m_kernelBase, |
| m_kuid, |
| &binary, |
| (uint32_t*)&combinedKernelSize)); |
| |
| for (krnStateIdx = 0; krnStateIdx < CODECHAL_ENCODE_VP8_MBENC_IDX_NUM; krnStateIdx++) |
| { |
| kernelStatePtr = &m_mbEncKernelStates[krnStateIdx]; |
| |
| MOS_ZeroMemory(&initKernelStateParams, sizeof(initKernelStateParams)); |
| initKernelStateParams.pKernelState = kernelStatePtr; |
| initKernelStateParams.pRenderEngineInterface = renderEngineInterface; |
| initKernelStateParams.pui8Binary = binary; |
| if (krnStateIdx == CODECHAL_ENCODE_VP8_MBENC_IDX_P) |
| { |
| initKernelStateParams.Operation = ENC_MBENC; |
| initKernelStateParams.dwKrnStateIdx = 1; // VP8MBEnc_Norm_Frm_P |
| } |
| else |
| { |
| initKernelStateParams.dwKrnStateIdx = 0; |
| if (krnStateIdx == CODECHAL_ENCODE_VP8_MBENC_IDX_I_CHROMA) |
| { |
| initKernelStateParams.Operation = ENC_MBENC; // VP8MBEnc_Norm_Frm_I |
| } |
| else // CODECHAL_ENCODE_VP8_MBENC_IDX_I_LUMA |
| { |
| initKernelStateParams.Operation = ENC_MBENC_I_LUMA; // VP8MBEnc_I_Luma |
| } |
| } |
| initKernelStateParams.dwCombinedKernelSize = combinedKernelSize; |
| initKernelStateParams.iBtCount = CODECHAL_VP8_MBENC_NUM_SURFACES_G10; |
| initKernelStateParams.iCurbeCount = iMbEncCurbeSize_g10[krnStateIdx]; |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(InitKernelStateHelper( |
| &initKernelStateParams)); |
| |
| if (krnStateIdx != CODECHAL_ENCODE_VP8_MBENC_IDX_P) |
| { |
| // I luma and chroma kernels share a single CURBE, so the DSH contains 2 IDs and 1 CURBE |
| kernelStatePtr->dwCurbeOffset = |
| stateHeapInterface->pStateHeapInterface->GetSizeofCmdInterfaceDescriptorData() * 2; |
| |
| if (krnStateIdx == CODECHAL_ENCODE_VP8_MBENC_IDX_I_CHROMA) |
| { |
| // The luma kernel ID will occur before the chroma kernel ID |
| kernelStatePtr->dwIdOffset = |
| stateHeapInterface->pStateHeapInterface->GetSizeofCmdInterfaceDescriptorData(); |
| } |
| } |
| } |
| |
| m_mbEncIFrameDshSize = |
| (stateHeapInterface->pStateHeapInterface->GetSizeofCmdInterfaceDescriptorData() * 2) + |
| MOS_ALIGN_CEIL(m_mbEncKernelStates[CODECHAL_ENCODE_VP8_MBENC_IDX_I_LUMA].KernelParams.iCurbeLength, |
| stateHeapInterface->pStateHeapInterface->GetCurbeAlignment()); |
| |
| // Until a better way can be found, maintain old binding table structures |
| bindingTable = &m_mbEncBindingTable; |
| |
| bindingTable->dwVp8MBEncMBOut = CODECHAL_VP8_MBENC_PER_MB_OUT_G10; |
| bindingTable->dwVp8MBEncCurrY = CODECHAL_VP8_MBENC_CURR_Y_G10; |
| bindingTable->dwVp8MBEncCurrUV = CODECHAL_VP8_MBENC_CURR_UV_G10; |
| bindingTable->dwVp8MBEncMVDataFromME = CODECHAL_VP8_MBENC_MV_DATA_FROM_ME_G10; |
| bindingTable->dwVp8MBEncIndMVData = CODECHAL_VP8_MBENC_IND_MV_DATA_G10; |
| bindingTable->dwVp8MBEncRef1Pic = CODECHAL_VP8_MBENC_REF1_PIC_G10; |
| bindingTable->dwVp8MBEncRef2Pic = CODECHAL_VP8_MBENC_REF2_PIC_G10; |
| bindingTable->dwVp8MBEncRef3Pic = CODECHAL_VP8_MBENC_REF3_PIC_G10; |
| bindingTable->dwVp8MBEncRefMBCount = CODECHAL_VP8_MBENC_REF_MB_COUNT_G10; |
| bindingTable->dwVp8MBEncMBModeCostLuma = CODECHAL_VP8_MBENC_MB_MODE_COST_LUMA_G10; |
| bindingTable->dwVp8MBEncBlockModeCost = CODECHAL_VP8_MBENC_BLOCK_MODE_COST_G10; |
| bindingTable->dwVp8MBEncChromaRecon = CODECHAL_VP8_MBENC_CHROMA_RECON_G10; |
| bindingTable->dwVp8MBEncHistogram = CODECHAL_VP8_MBENC_HISTOGRAM_G10; |
| bindingTable->dwVp8MBEncSegmentationMap = CODECHAL_VP8_MBENC_SEGMENTATION_MAP_G10; |
| bindingTable->dwVp8MBEncBRCDist = CODECHAL_VP8_MBENC_IDIST_G10; |
| bindingTable->dwVp8MbEncCurrYDownscaled = CODECHAL_VP8_MBENC_CURR_Y_DOWNSCALED_G10; |
| bindingTable->dwVp8MBEncVMECoarseIntra = CODECHAL_VP8_MBENC_VME_Coarse_Intra_G10; |
| bindingTable->dwVp8InterPredDistortion = CODECHAL_VP8_MBEBC_INTER_PRED_DISTORTION_G10; |
| bindingTable->dwVp8PerMVDataSurface = CODECHAL_VP8_MBEBC_PER_MV_DATA_G10; |
| bindingTable->dwVp8MBEncPerMBQuantDataP = CODECHAL_VP8_MBENC_P_PER_MB_QUANT_G10; |
| bindingTable->dwVp8MBEncVMEInterPred = CODECHAL_VP8_MBENC_INTER_PRED_G10; |
| bindingTable->dwVp8MBEncVMEDebugStreamoutI = CODECHAL_VP8_MBENC_I_VME_DEBUG_STREAMOUT_G10; |
| bindingTable->dwVp8MBModeCostUpdateSurface = CODECHAL_VP8_MBENC_MODE_COST_UPDATE_G10; |
| bindingTable->dwVp8MBEncVMEDebugStreamoutP = CODECHAL_VP8_MBENC_P_VME_DEBUG_STREAMOUT_G10; |
| bindingTable->dwVp8MBEncVME = CODECHAL_VP8_MBENC_VME_G10; |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::InitKernelStateBrc() |
| { |
| MhwRenderInterface *renderEngineInterface; |
| PMHW_KERNEL_STATE kernelStatePtr; |
| uint32_t combinedKernelSize; |
| uint32_t krnStateIdx; |
| struct CodechalBindingTableVp8BrcUpdate* bindingTable; |
| uint8_t *binary; |
| struct CodechalEncodeVp8InitKernelStateParams initKernelStateParams; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_FUNCTION_ENTER; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(m_hwInterface->GetRenderInterface()); |
| |
| renderEngineInterface = m_hwInterface->GetRenderInterface(); |
| |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalGetKernelBinaryAndSize( |
| m_kernelBase, |
| m_kuid, |
| &binary, |
| (uint32_t*)&combinedKernelSize)); |
| |
| for (krnStateIdx = 0; krnStateIdx < CODECHAL_ENCODE_VP8_BRC_IDX_NUM; krnStateIdx++) |
| { |
| kernelStatePtr = &m_brcKernelStates[krnStateIdx]; |
| |
| MOS_ZeroMemory(&initKernelStateParams, sizeof(initKernelStateParams)); |
| initKernelStateParams.pKernelState = kernelStatePtr; |
| initKernelStateParams.pRenderEngineInterface = renderEngineInterface; |
| initKernelStateParams.pui8Binary = binary; |
| initKernelStateParams.Operation = ENC_BRC; |
| initKernelStateParams.dwKrnStateIdx = krnStateIdx; |
| initKernelStateParams.dwCombinedKernelSize = combinedKernelSize; |
| initKernelStateParams.iBtCount = iBrcBtCount_g10[krnStateIdx]; |
| initKernelStateParams.iCurbeCount = iBrcCurbeSize_g10[krnStateIdx]; |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(InitKernelStateHelper( |
| &initKernelStateParams)); |
| } |
| |
| // Until a better way can be found, maintain old binding table structures |
| bindingTable = &m_brcUpdateBindingTable; |
| bindingTable->dwBrcHistoryBuffer = CODECHAL_VP8_BRC_UPDATE_HISTORY_G10; |
| bindingTable->dwBrcPakStatisticsOutputBuffer = CODECHAL_VP8_BRC_UPDATE_PAK_STATISTICS_OUTPUT_G10; |
| bindingTable->dwBrcEncoderCfgReadBuffer = CODECHAL_VP8_BRC_UPDATE_MFX_ENCODER_CFG_READ_G10; |
| bindingTable->dwBrcEncoderCfgWriteBuffer = CODECHAL_VP8_BRC_UPDATE_MFX_ENCODER_CFG_WRITE_G10; |
| bindingTable->dwBrcMbEncCurbeReadBuffer = CODECHAL_VP8_BRC_UPDATE_MBENC_CURBE_READ_G10; |
| bindingTable->dwBrcMbEncCurbeWriteData = CODECHAL_VP8_BRC_UPDATE_MBENC_CURBE_WRITE_G10; |
| bindingTable->dwBrcDistortionBuffer = CODECHAL_VP8_BRC_UPDATE_DISTORTION_SURFACE_G10; |
| bindingTable->dwBrcConstantData = CODECHAL_VP8_BRC_UPDATE_CONSTANT_DATA_G10; |
| bindingTable->dwVp8BrcSegmentationMap = CODECHAL_VP8_BRC_UPDATE_SEGMENT_MAP_G10; |
| bindingTable->dwBrcMpuCurbeReadBuffer = CODECHAL_VP8_BRC_UPDATE_MPU_CURBE_READ_G10; |
| bindingTable->dwBrcMpuCurbeWriteData = CODECHAL_VP8_BRC_UPDATE_MPU_CURBE_WRITE_G10; |
| bindingTable->dwBrcTpuCurbeReadBuffer = CODECHAL_VP8_BRC_UPDATE_TPU_CURBE_READ_G10; |
| bindingTable->dwBrcTpuCurbeWriteData = CODECHAL_VP8_BRC_UPDATE_TPU_CURBE_WRITE_G10; |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::InitKernelStateMe() |
| { |
| MhwRenderInterface *renderEngineInterface; |
| uint32_t combinedKernelSize; |
| struct CodechalBindingTableVp8Me* bindingTable; |
| uint8_t *binary; |
| struct CodechalEncodeVp8InitKernelStateParams initKernelStateParams; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_FUNCTION_ENTER; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(m_hwInterface->GetRenderInterface()); |
| |
| renderEngineInterface = m_hwInterface->GetRenderInterface(); |
| |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalGetKernelBinaryAndSize( |
| m_kernelBase, |
| m_kuid, |
| &binary, |
| (uint32_t*)&combinedKernelSize)); |
| |
| MOS_ZeroMemory(&initKernelStateParams, sizeof(initKernelStateParams)); |
| initKernelStateParams.pKernelState = &m_meKernelState; |
| initKernelStateParams.pRenderEngineInterface = renderEngineInterface; |
| initKernelStateParams.pui8Binary = binary; |
| initKernelStateParams.Operation = ENC_ME; |
| initKernelStateParams.dwCombinedKernelSize = combinedKernelSize; |
| initKernelStateParams.iBtCount = CODECHAL_VP8_ME_NUM_SURFACES_G10; |
| initKernelStateParams.iCurbeCount = sizeof(struct MediaObjectVp8MeStaticDataG10); |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(InitKernelStateHelper( |
| &initKernelStateParams)); |
| |
| // Until a better way can be found, maintain old binding table structures |
| bindingTable = &m_meBindingTable; |
| |
| bindingTable->dwVp8MEMVDataSurface = CODECHAL_VP8_ME_MV_DATA_G10; |
| bindingTable->dwVp816xMEMVDataSurface = CODECHAL_VP8_16xME_MV_DATA_G10; |
| bindingTable->dwVp8MeDist = CODECHAL_VP8_ME_DISTORTION_G10; |
| bindingTable->dwVp8MeBrcDist = CODECHAL_VP8_ME_MIN_DIST_BRC_DATA_G10; |
| bindingTable->dwVp8MeCurrPic = CODECHAL_VP8_VME_INTER_PRED_G10; |
| bindingTable->dwVp8MeRef1Pic = CODECHAL_VP8_ME_REF1_PIC_G10; |
| bindingTable->dwVp8MeRef2Pic = CODECHAL_VP8_ME_REF2_PIC_G10; |
| bindingTable->dwVp8MeRef3Pic = CODECHAL_VP8_ME_REF3_PIC_G10; |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::InitKernelStateMpu() |
| { |
| MhwRenderInterface *renderEngineInterface; |
| uint32_t combinedKernelSize; |
| struct CodechalBindingTableVp8Mpu* bindingTable; |
| uint8_t *binary; |
| struct CodechalEncodeVp8InitKernelStateParams initKernelStateParams; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_FUNCTION_ENTER; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(m_hwInterface->GetRenderInterface()); |
| |
| renderEngineInterface = m_hwInterface->GetRenderInterface(); |
| |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalGetKernelBinaryAndSize( |
| m_kernelBase, |
| m_kuid, |
| &binary, |
| (uint32_t*)&combinedKernelSize)); |
| |
| MOS_ZeroMemory(&initKernelStateParams, sizeof(initKernelStateParams)); |
| initKernelStateParams.pKernelState = &m_mpuKernelState; |
| initKernelStateParams.pRenderEngineInterface = renderEngineInterface; |
| initKernelStateParams.pui8Binary = binary; |
| initKernelStateParams.Operation = ENC_MPU; |
| initKernelStateParams.dwCombinedKernelSize = combinedKernelSize; |
| initKernelStateParams.iBtCount = CODECHAL_VP8_MPU_FHB_NUM_SURFACES_G10; |
| initKernelStateParams.iCurbeCount = sizeof(struct MediaObjectVp8MpuFhbStaticDataG10); |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(InitKernelStateHelper( |
| &initKernelStateParams)); |
| |
| // Until a better way can be found, maintain old binding table structures |
| bindingTable = &m_mpuBindingTable; |
| |
| bindingTable->dwVp8MpuHistogram = CODECHAL_VP8_MPU_FHB_HISTOGRAM_G10; |
| bindingTable->dwVp8MpuReferenceModeProbability = CODECHAL_VP8_MPU_FHB_REF_MODE_PROBABILITY_G10; |
| bindingTable->dwVp8MpuModeProbability = CODECHAL_VP8_MPU_FHB_CURR_MODE_PROBABILITY_G10; |
| bindingTable->dwVp8MpuReferenceTokenProbability = CODECHAL_VP8_MPU_FHB_REF_TOKEN_PROBABILITY_G10; |
| bindingTable->dwVp8MpuTokenProbability = CODECHAL_VP8_MPU_FHB_CURR_TOKEN_PROBABILITY_G10; |
| bindingTable->dwVp8MpuFrameHeaderBitstream = CODECHAL_VP8_MPU_FHB_HEADER_BITSTREAM_G10; |
| bindingTable->dwVp8MpuHeaderMetaData = CODECHAL_VP8_MPU_FHB_HEADER_METADATA_G10; |
| bindingTable->dwVp8MpuPictureState = CODECHAL_VP8_MPU_FHB_PICTURE_STATE_G10; |
| bindingTable->dwVp8MpuMpuBitstream = CODECHAL_VP8_MPU_FHB_MPU_BITSTREAM_G10; |
| bindingTable->dwVp8MpuTokenBitsData = CODECHAL_VP8_MPU_FHB_TOKEN_BITS_DATA_TABLE_G10; |
| bindingTable->dwVp8MpuKernelDebugDump = CODECHAL_VP8_MPU_FHB_VME_DEBUG_STREAMOUT_G10; |
| bindingTable->dwVp8MpuEntropyCost = CODECHAL_VP8_MPU_FHB_ENTROPY_COST_TABLE_G10; |
| bindingTable->dwVp8MpuModeCostUpdateSurface = CODECHAL_VP8_MPU_MODE_COST_UPDATE_G10; |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::InitKernelStateTpu() |
| { |
| MhwRenderInterface *renderEngineInterface; |
| uint32_t combinedKernelSize; |
| struct CodechalBindingTableVp8Tpu* bindingTable; |
| uint8_t *binary; |
| struct CodechalEncodeVp8InitKernelStateParams initKernelStateParams; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_FUNCTION_ENTER; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(m_hwInterface->GetRenderInterface()); |
| |
| renderEngineInterface = m_hwInterface->GetRenderInterface(); |
| |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalGetKernelBinaryAndSize( |
| m_kernelBase, |
| m_kuid, |
| &binary, |
| (uint32_t*)&combinedKernelSize)); |
| |
| MOS_ZeroMemory(&initKernelStateParams, sizeof(initKernelStateParams)); |
| initKernelStateParams.pKernelState = &m_tpuKernelState; |
| initKernelStateParams.pRenderEngineInterface = renderEngineInterface; |
| initKernelStateParams.pui8Binary = binary; |
| initKernelStateParams.Operation = ENC_TPU; |
| initKernelStateParams.dwCombinedKernelSize = combinedKernelSize; |
| initKernelStateParams.iBtCount = CODECHAL_VP8_TPU_FHB_NUM_SURFACES_G10; |
| initKernelStateParams.iCurbeCount = sizeof(struct MediaObjectVp8TpuFhbStaticDataG10); |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(InitKernelStateHelper( |
| &initKernelStateParams)); |
| |
| // Until a better way can be found, maintain old binding table structures |
| bindingTable = &m_tpuBindingTable; |
| |
| bindingTable->dwVp8TpuPakTokenStatistics = CODECHAL_VP8_TPU_FHB_PAK_TOKEN_STATISTICS_G10; |
| bindingTable->dwVp8TpuTokenUpdateFlags = CODECHAL_VP8_TPU_FHB_TOKEN_UPDATE_FLAGS_G10; |
| bindingTable->dwVp8TpuEntropyCost = CODECHAL_VP8_TPU_FHB_ENTROPY_COST_TABLE_G10; |
| bindingTable->dwVp8TpuFrameHeaderBitstream = CODECHAL_VP8_TPU_FHB_HEADER_BITSTREAM_G10; |
| bindingTable->dwVp8TpuDefaultTokenProbability = CODECHAL_VP8_TPU_FHB_DEFAULT_TOKEN_PROBABILITY_G10; |
| bindingTable->dwVp8TpuPictureState = CODECHAL_VP8_TPU_FHB_PICTURE_STATE_G10; |
| bindingTable->dwVp8TpuMpuCurbeData = CODECHAL_VP8_TPU_FHB_MPU_CURBE_DATA_G10; |
| bindingTable->dwVp8TpuHeaderMetaData = CODECHAL_VP8_TPU_FHB_HEADER_METADATA_G10; |
| bindingTable->dwVp8TpuTokenProbability = CODECHAL_VP8_TPU_FHB_TOKEN_PROBABILITY_G10; |
| bindingTable->dwVp8TpuPakHardwareTokenProbabilityPass1 = CODECHAL_VP8_TPU_FHB_PAK_HW_PASS1_PROBABILITY_G10; |
| bindingTable->dwVp8TpuKeyFrameTokenProbability = CODECHAL_VP8_TPU_FHB_KEY_TOKEN_PROBABILITY_G10; |
| bindingTable->dwVp8TpuUpdatedTokenProbability = CODECHAL_VP8_TPU_FHB_UPDATED_TOKEN_PROBABILITY_G10; |
| bindingTable->dwVp8TpuPakHardwareTokenProbabilityPass2 = CODECHAL_VP8_TPU_FHB_PAK_HW_PASS2_PROBABILITY_G10; |
| bindingTable->dwVp8TpuKernelDebugDump = CODECHAL_VP8_TPU_FHB_VME_DEBUG_STREAMOUT_G10; |
| bindingTable->dwVp8TpuRepakDecision = CODECHAL_VP8_TPU_FHB_REPAK_DECISION_G10; |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::InitBrcConstantBuffer(struct CodechalVp8InitBrcConstantBufferParams* params) |
| { |
| uint8_t* data; |
| MOS_LOCK_PARAMS lockFlags; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_FUNCTION_ENTER; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pOsInterface); |
| |
| MOS_ZeroMemory(&lockFlags, sizeof(MOS_LOCK_PARAMS)); |
| lockFlags.WriteOnly = 1; |
| data = (uint8_t *)params->pOsInterface->pfnLockResource( |
| params->pOsInterface, |
| ¶ms->resBrcConstantDataBuffer, |
| &lockFlags); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(data); |
| |
| MOS_ZeroMemory(data, BRC_CONSTANTSURFACE_VP8); |
| |
| // Fill surface with QP Adjustment table, Distortion threshold table, MaxFrame threshold table, Distortion QP Adjustment Table for I frame |
| status = MOS_SecureMemcpy( |
| data, |
| sizeof(VP8_BRC_QPAdjustment_DistThreshold_MaxFrameThreshold_DistQPAdjustment_IPB_g10), |
| (void *)VP8_BRC_QPAdjustment_DistThreshold_MaxFrameThreshold_DistQPAdjustment_IPB_g10, |
| sizeof(VP8_BRC_QPAdjustment_DistThreshold_MaxFrameThreshold_DistQPAdjustment_IPB_g10)); |
| if(status != MOS_STATUS_SUCCESS) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to copy memory."); |
| return status; |
| } |
| |
| data += sizeof(VP8_BRC_QPAdjustment_DistThreshold_MaxFrameThreshold_DistQPAdjustment_IPB_g10); |
| |
| status = MOS_SecureMemcpy( |
| data, |
| sizeof(VP8_BRC_IFRAME_COST_TABLE_G10), |
| (void *)VP8_BRC_IFRAME_COST_TABLE_G10, |
| sizeof(VP8_BRC_IFRAME_COST_TABLE_G10)); |
| if(status != MOS_STATUS_SUCCESS) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to copy memory."); |
| return status; |
| } |
| |
| data += sizeof(VP8_BRC_IFRAME_COST_TABLE_G10); |
| |
| status = MOS_SecureMemcpy( |
| data, |
| sizeof(VP8_BRC_PFRAME_COST_TABLE_G10), |
| (void *)VP8_BRC_PFRAME_COST_TABLE_G10, |
| sizeof(VP8_BRC_PFRAME_COST_TABLE_G10)); |
| if(status != MOS_STATUS_SUCCESS) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to copy memory."); |
| return status; |
| } |
| |
| data += sizeof(VP8_BRC_PFRAME_COST_TABLE_G10); |
| |
| status = MOS_SecureMemcpy( |
| data, |
| sizeof(VP8_BRC_QUANT_DC_TABLE), |
| (void *)VP8_BRC_QUANT_DC_TABLE, |
| sizeof(VP8_BRC_QUANT_DC_TABLE)); |
| if(status != MOS_STATUS_SUCCESS) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to copy memory."); |
| return status; |
| } |
| |
| data += sizeof(VP8_BRC_QUANT_DC_TABLE); |
| |
| status = MOS_SecureMemcpy( |
| data, |
| sizeof(VP8_BRC_QUANT_AC_TABLE), |
| (void *)VP8_BRC_QUANT_AC_TABLE, |
| sizeof(VP8_BRC_QUANT_AC_TABLE)); |
| if(status != MOS_STATUS_SUCCESS) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to copy memory."); |
| return status; |
| } |
| |
| data += sizeof(VP8_BRC_QUANT_AC_TABLE); |
| |
| status = MOS_SecureMemcpy( |
| data, |
| sizeof(VP8_BRC_SKIP_MV_THRESHOLD_TABLE), |
| (void *)VP8_BRC_SKIP_MV_THRESHOLD_TABLE, |
| sizeof(VP8_BRC_SKIP_MV_THRESHOLD_TABLE)); |
| if(status != MOS_STATUS_SUCCESS) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to copy memory."); |
| return status; |
| } |
| |
| params->pOsInterface->pfnUnlockResource( |
| params->pOsInterface, |
| ¶ms->resBrcConstantDataBuffer); |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::InitBrcDistortionBuffer() |
| { |
| uint8_t *data; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| MOS_LOCK_PARAMS lockFlagsWriteOnly; |
| uint32_t size, width, height; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(m_osInterface); |
| |
| data = (uint8_t *)m_osInterface->pfnLockResource( |
| m_osInterface, |
| &(m_brcBuffers.sMeBrcDistortionBuffer.OsResource), |
| &lockFlagsWriteOnly); |
| |
| if (data == nullptr) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to Lock ME BRC Distortion Buffer."); |
| status = MOS_STATUS_UNKNOWN; |
| return status; |
| } |
| width = MOS_ALIGN_CEIL((m_downscaledWidthInMb4x * 8), 64); |
| height = 2 * MOS_ALIGN_CEIL((m_downscaledHeightInMb4x * 4), 8); |
| size = width * height; |
| |
| MOS_ZeroMemory(data,size); |
| m_osInterface->pfnUnlockResource( |
| m_osInterface, &m_brcBuffers.sMeBrcDistortionBuffer.OsResource); |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::InitMBEncConstantBuffer(struct CodechalVp8InitMbencConstantBufferParams* params) |
| { |
| uint8_t *data; |
| MOS_LOCK_PARAMS lockFlagsWriteOnly; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_FUNCTION_ENTER; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pOsInterface); |
| |
| MOS_ZeroMemory(&lockFlagsWriteOnly, sizeof(MOS_LOCK_PARAMS)); |
| lockFlagsWriteOnly.WriteOnly = 1; |
| |
| /* First copy MB_MODE_COST_LUMA table */ |
| data = (uint8_t *)params->pOsInterface->pfnLockResource( |
| params->pOsInterface, |
| ¶ms->sMBModeCostLumaBuffer.OsResource, |
| &lockFlagsWriteOnly); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(data); |
| |
| MOS_ZeroMemory(data, params->sMBModeCostLumaBuffer.dwPitch * params->sMBModeCostLumaBuffer.dwHeight); |
| |
| // Fill surface with VP8_MB_MODE_COST_LUMA table for I frame |
| status = MOS_SecureMemcpy( |
| data, |
| sizeof(VP8_MB_MODE_COST_LUMA_G10), |
| (void *)VP8_MB_MODE_COST_LUMA_G10, |
| sizeof(VP8_MB_MODE_COST_LUMA_G10)); |
| if(status != MOS_STATUS_SUCCESS) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to copy memory."); |
| return status; |
| } |
| |
| params->pOsInterface->pfnUnlockResource( |
| params->pOsInterface, |
| ¶ms->sMBModeCostLumaBuffer.OsResource); |
| |
| /* Now copy BLOCK_MODE_COST table */ |
| data = (uint8_t *)params->pOsInterface->pfnLockResource( |
| params->pOsInterface, |
| ¶ms->sBlockModeCostBuffer.OsResource, |
| &lockFlagsWriteOnly); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(data); |
| |
| MOS_ZeroMemory(data, params->sBlockModeCostBuffer.dwPitch * params->sBlockModeCostBuffer.dwHeight); |
| |
| // Fill surface with VP8_BLOCK_MODE_COST table for I frame |
| status = MOS_SecureMemcpy( |
| data, |
| sizeof(VP8_BLOCK_MODE_COST_G10), |
| (void *)VP8_BLOCK_MODE_COST_G10, |
| sizeof(VP8_BLOCK_MODE_COST_G10)); |
| if(status != MOS_STATUS_SUCCESS) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to copy memory."); |
| return status; |
| } |
| |
| params->pOsInterface->pfnUnlockResource( |
| params->pOsInterface, |
| ¶ms->sBlockModeCostBuffer.OsResource); |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::InitMpuTpuBuffer() |
| { |
| uint8_t *data = nullptr; |
| uint8_t *origData = nullptr; |
| MOS_LOCK_PARAMS lockFlagsWriteOnly; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_FUNCTION_ENTER; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(m_osInterface); |
| |
| MOS_ZeroMemory(&lockFlagsWriteOnly, sizeof(MOS_LOCK_PARAMS)); |
| lockFlagsWriteOnly.WriteOnly = 1; |
| |
| // Last 12 bytes of LFDeltas to be initialized by kernel |
| origData = data = (uint8_t *)m_osInterface->pfnLockResource( |
| m_osInterface, |
| &m_mpuTpuBuffers.resModeProbs, |
| &lockFlagsWriteOnly); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(data); |
| |
| MOS_ZeroMemory(data, MODE_PROPABILITIES_SIZE); |
| |
| m_osInterface->pfnUnlockResource( |
| m_osInterface, |
| &m_mpuTpuBuffers.resModeProbs); |
| |
| data = nullptr; |
| |
| data = (uint8_t *)m_osInterface->pfnLockResource( |
| m_osInterface, |
| &m_mpuTpuBuffers.resRefModeProbs, |
| &lockFlagsWriteOnly); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(data); |
| |
| MOS_ZeroMemory(data, MODE_PROPABILITIES_SIZE); |
| |
| m_osInterface->pfnUnlockResource( |
| m_osInterface, |
| &m_mpuTpuBuffers.resRefModeProbs); |
| |
| data = nullptr; |
| |
| // Fill surface with VP8_DEFAULT_COEFF_PROBS_G10 table |
| data = (uint8_t *)m_osInterface->pfnLockResource( |
| m_osInterface, |
| &m_mpuTpuBuffers.resRefCoeffProbs, |
| &lockFlagsWriteOnly); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(data); |
| |
| status = MOS_SecureMemcpy( |
| data, |
| sizeof(VP8_DEFAULT_COEFF_PROBS_G10), |
| (void *)VP8_DEFAULT_COEFF_PROBS_G10, |
| sizeof(VP8_DEFAULT_COEFF_PROBS_G10)); |
| if(status != MOS_STATUS_SUCCESS) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to copy memory."); |
| return status; |
| } |
| |
| m_osInterface->pfnUnlockResource( |
| m_osInterface, |
| &m_mpuTpuBuffers.resRefCoeffProbs); |
| |
| data = nullptr; |
| |
| // Init Entropy cost surface |
| data = (uint8_t *)m_osInterface->pfnLockResource( |
| m_osInterface, |
| &m_mpuTpuBuffers.resEntropyCostTable, |
| &lockFlagsWriteOnly); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(data); |
| |
| status = MOS_SecureMemcpy( |
| data, |
| sizeof(VP8_C0_TABLE), |
| (void *)VP8_C0_TABLE, |
| sizeof(VP8_C0_TABLE)); |
| if(status != MOS_STATUS_SUCCESS) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to copy memory."); |
| return status; |
| } |
| |
| m_osInterface->pfnUnlockResource( |
| m_osInterface, |
| &m_mpuTpuBuffers.resEntropyCostTable); |
| |
| data = nullptr; |
| |
| // Init Token update flags surface |
| data = (uint8_t *)m_osInterface->pfnLockResource( |
| m_osInterface, |
| &m_mpuTpuBuffers.resPakTokenUpdateFlags, |
| &lockFlagsWriteOnly); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(data); |
| |
| status = MOS_SecureMemcpy( |
| data, |
| sizeof(VP8_PROBABILITY_UPDATE_FLAGS_G10), |
| (void *)VP8_PROBABILITY_UPDATE_FLAGS_G10, |
| sizeof(VP8_PROBABILITY_UPDATE_FLAGS_G10)); |
| if(status != MOS_STATUS_SUCCESS) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to copy memory."); |
| return status; |
| } |
| |
| m_osInterface->pfnUnlockResource( |
| m_osInterface, |
| &m_mpuTpuBuffers.resPakTokenUpdateFlags); |
| |
| data = nullptr; |
| |
| // Init Token update flags surface |
| data = (uint8_t *)m_osInterface->pfnLockResource( |
| m_osInterface, |
| &m_mpuTpuBuffers.resDefaultTokenProbability, |
| &lockFlagsWriteOnly); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(data); |
| |
| status = MOS_SecureMemcpy( |
| data, |
| sizeof(VP8_COEFF_UPDATE_PROBS_G10), |
| (void *)VP8_COEFF_UPDATE_PROBS_G10, |
| sizeof(VP8_COEFF_UPDATE_PROBS_G10)); |
| |
| m_osInterface->pfnUnlockResource( |
| m_osInterface, |
| &m_mpuTpuBuffers.resDefaultTokenProbability); |
| |
| data = nullptr; |
| |
| // Init key frame prob |
| data = (uint8_t *)m_osInterface->pfnLockResource( |
| m_osInterface, |
| &m_mpuTpuBuffers.resKeyFrameTokenProbability, |
| &lockFlagsWriteOnly); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(data); |
| |
| status = MOS_SecureMemcpy( |
| data, |
| sizeof(VP8_DEFAULT_COEFF_PROBS_G10), |
| (void *)VP8_DEFAULT_COEFF_PROBS_G10, |
| sizeof(VP8_DEFAULT_COEFF_PROBS_G10)); |
| if(status != MOS_STATUS_SUCCESS) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to copy memory."); |
| return status; |
| } |
| |
| m_osInterface->pfnUnlockResource( |
| m_osInterface, |
| &m_mpuTpuBuffers.resKeyFrameTokenProbability); |
| |
| data = nullptr; |
| |
| // Init updated frame token probability |
| data = (uint8_t *)m_osInterface->pfnLockResource( |
| m_osInterface, |
| &m_mpuTpuBuffers.resUpdatedTokenProbability, |
| &lockFlagsWriteOnly); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(data); |
| |
| status = MOS_SecureMemcpy( |
| data, |
| sizeof(VP8_DEFAULT_COEFF_PROBS_G10), |
| (void *)VP8_DEFAULT_COEFF_PROBS_G10, |
| sizeof(VP8_DEFAULT_COEFF_PROBS_G10)); |
| |
| if (status != MOS_STATUS_SUCCESS) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to copy memory."); |
| return status; |
| } |
| |
| m_osInterface->pfnUnlockResource( |
| m_osInterface, |
| &m_mpuTpuBuffers.resUpdatedTokenProbability); |
| |
| data = nullptr; |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::KeyFrameUpdateMpuTpuBuffer(struct CodechalVp8UpdateMpuTpuBufferParams* params) |
| { |
| uint8_t *data=nullptr; |
| uint8_t *origData=nullptr; |
| MOS_LOCK_PARAMS lockFlagsWriteOnly; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_FUNCTION_ENTER; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pOsInterface); |
| |
| MOS_ZeroMemory(&lockFlagsWriteOnly, sizeof(MOS_LOCK_PARAMS)); |
| lockFlagsWriteOnly.WriteOnly = 1; |
| |
| // Copy Key frame surface to cur probability surface |
| origData = (uint8_t *)params->pOsInterface->pfnLockResource( |
| params->pOsInterface, |
| params->presKeyFrameTokenProbability, |
| &lockFlagsWriteOnly); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(origData); |
| |
| data = (uint8_t *)params->pOsInterface->pfnLockResource( |
| params->pOsInterface, |
| params->presCurrFrameTokenProbability, |
| &lockFlagsWriteOnly); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(data); |
| |
| status = MOS_SecureMemcpy( |
| data, |
| params->dwCoeffProbsSize, |
| origData, |
| params->dwCoeffProbsSize); |
| |
| if(status != MOS_STATUS_SUCCESS) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to copy memory."); |
| return status; |
| } |
| |
| params->pOsInterface->pfnUnlockResource( |
| params->pOsInterface, |
| params->presCurrFrameTokenProbability); |
| |
| params->pOsInterface->pfnUnlockResource( |
| params->pOsInterface, |
| params->presKeyFrameTokenProbability); |
| |
| data = nullptr; |
| |
| // Fill surface with VP8_DEFAULT_COEFF_PROBS_G10 table |
| data = (uint8_t *)params->pOsInterface->pfnLockResource( |
| params->pOsInterface, |
| params->presHwTokenProbabilityPass1, |
| &lockFlagsWriteOnly); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(data); |
| |
| status = MOS_SecureMemcpy( |
| data, |
| sizeof(VP8_DEFAULT_COEFF_PROBS_G10), |
| (void *)VP8_DEFAULT_COEFF_PROBS_G10, |
| sizeof(VP8_DEFAULT_COEFF_PROBS_G10)); |
| |
| if(status != MOS_STATUS_SUCCESS) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to copy memory."); |
| return status; |
| } |
| |
| params->pOsInterface->pfnUnlockResource( |
| params->pOsInterface, |
| params->presHwTokenProbabilityPass1); |
| data = nullptr; |
| |
| data = (uint8_t *)params->pOsInterface->pfnLockResource( |
| params->pOsInterface, |
| params->presHwTokenProbabilityPass2, |
| &lockFlagsWriteOnly); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(data); |
| |
| status = MOS_SecureMemcpy( |
| data, |
| sizeof(VP8_DEFAULT_COEFF_PROBS_G10), |
| (void *)VP8_DEFAULT_COEFF_PROBS_G10, |
| sizeof(VP8_DEFAULT_COEFF_PROBS_G10)); |
| |
| if(status != MOS_STATUS_SUCCESS) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to copy memory."); |
| return status; |
| } |
| |
| params->pOsInterface->pfnUnlockResource( |
| params->pOsInterface, |
| params->presHwTokenProbabilityPass2); |
| data = nullptr; |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::SetBrcInitResetCurbe(struct CodechalVp8BrcInitResetCurbeParams* params) |
| { |
| struct MediaObjectVp8BrcInitResetStaticDataG10 cmd; |
| PCODEC_VP8_ENCODE_PIC_PARAMS picParams; |
| PCODEC_VP8_ENCODE_SEQUENCE_PARAMS seqParams; |
| PMHW_STATE_HEAP_INTERFACE stateHeapInterface; |
| double inputBitsPerFrame, bpsRatio; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(m_hwInterface->GetRenderInterface()); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pPicParams); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pSeqParams); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pKernelState); |
| |
| stateHeapInterface = m_hwInterface->GetRenderInterface()->m_stateHeapInterface; |
| CODECHAL_ENCODE_CHK_NULL_RETURN(stateHeapInterface); |
| |
| picParams = params->pPicParams; |
| seqParams = params->pSeqParams; |
| |
| MOS_ZeroMemory(&cmd, sizeof(cmd)); |
| |
| cmd.DW1.InitBufFullInBits = seqParams->InitVBVBufferFullnessInBit; |
| cmd.DW2.BufSizeInBits = seqParams->VBVBufferSizeInBit; |
| cmd.DW3.AverageBitRate = seqParams->TargetBitRate[seqParams->NumTemporalLayersMinus1] * CODECHAL_ENCODE_BRC_KBPS; //DDI in Kbits |
| cmd.DW4.MaxBitRate = seqParams->MaxBitRate * CODECHAL_ENCODE_BRC_KBPS; |
| cmd.DW8.GopP = seqParams->GopPicSize - 1; |
| cmd.DW9.FrameWidthInBytes = params->dwFrameWidth; |
| cmd.DW10.FrameHeightInBytes = params->dwFrameHeight; |
| cmd.DW10.AVBRAccuracy = 30; |
| |
| // change FrameRateD from 1 to 100 instead of dividing FramesPer100Sec by 100 in DDI |
| // this is needed to handle precision issue with decimal frame rate ex) 29.97 fps |
| cmd.DW6.FrameRateM = seqParams->FramesPer100Sec[seqParams->NumTemporalLayersMinus1]; |
| cmd.DW7.FrameRateD = 100; // change FrameRateD from 1 to 100 instead of dividing FramesPer100Sec by 100 in DDI |
| cmd.DW8.BRCFlag = 0; |
| |
| if (seqParams->RateControlMethod == RATECONTROL_CBR) |
| { |
| cmd.DW4.MaxBitRate = cmd.DW3.AverageBitRate; |
| cmd.DW8.BRCFlag = cmd.DW8.BRCFlag | CODECHAL_ENCODE_BRCINIT_ISCBR; |
| } |
| else if (seqParams->RateControlMethod == RATECONTROL_VBR) |
| { |
| if (cmd.DW4.MaxBitRate < cmd.DW3.AverageBitRate) |
| { |
| cmd.DW4.MaxBitRate = 2 * cmd.DW3.AverageBitRate; |
| } |
| cmd.DW8.BRCFlag = cmd.DW8.BRCFlag | CODECHAL_ENCODE_BRCINIT_ISVBR; |
| } |
| |
| // Profile & level max frame size |
| // DW0 is DDI param seq param. |
| cmd.DW0.ProfileLevelMaxFrame = params->pSeqParams->UserMaxFrameSize; |
| cmd.DW0.ProfileLevelMaxFrame = params->dwFrameWidth * params->dwFrameHeight; |
| |
| // Set dynamic thresholds |
| inputBitsPerFrame = |
| ((double)(cmd.DW4.MaxBitRate) * (double)(cmd.DW7.FrameRateD) / |
| (double)(cmd.DW6.FrameRateM)); |
| |
| if (cmd.DW2.BufSizeInBits < (uint32_t)inputBitsPerFrame * 4) |
| { |
| cmd.DW2.BufSizeInBits = (uint32_t)inputBitsPerFrame * 4; |
| } |
| |
| if (cmd.DW1.InitBufFullInBits == 0) |
| { |
| cmd.DW1.InitBufFullInBits = 7 * cmd.DW2.BufSizeInBits / 8; |
| } |
| if (cmd.DW1.InitBufFullInBits < (uint32_t)(inputBitsPerFrame * 2)) |
| { |
| cmd.DW1.InitBufFullInBits = (uint32_t)(inputBitsPerFrame * 2); |
| } |
| if (cmd.DW1.InitBufFullInBits > cmd.DW2.BufSizeInBits) |
| { |
| cmd.DW1.InitBufFullInBits = cmd.DW2.BufSizeInBits; |
| } |
| |
| bpsRatio = inputBitsPerFrame / ((double)(cmd.DW2.BufSizeInBits) / 30); |
| bpsRatio = (bpsRatio < 0.1) ? 0.1 : (bpsRatio > 3.5) ? 3.5 : bpsRatio; |
| |
| cmd.DW9.FrameWidthInBytes = seqParams->FrameWidth; |
| cmd.DW10.FrameHeightInBytes = seqParams->FrameHeight; |
| cmd.DW10.AVBRAccuracy = 30; |
| cmd.DW11.AVBRConvergence = 150; |
| cmd.DW11.MinQP = picParams->ClampQindexLow; |
| cmd.DW12.MaxQP = picParams->ClampQindexHigh; |
| |
| cmd.DW12.LevelQP = 60; |
| // DW13 default 100 |
| cmd.DW13.MaxSection_pct = 100; |
| cmd.DW13.OverShootCBR_pct = 115; |
| |
| // DW14 default 100 |
| cmd.DW14.MinSection_pct = 100; |
| cmd.DW14.VBRBias_pct = 100; |
| cmd.DW15.InstantRateThreshold0ForP = 30; |
| cmd.DW15.InstantRateThreshold1ForP = 50; |
| cmd.DW15.InstantRateThreshold2ForP = 70; |
| cmd.DW15.InstantRateThreshold3ForP = 120; |
| |
| cmd.DW17.InstantRateThreshold0ForI = 30; |
| cmd.DW17.InstantRateThreshold1ForI = 50; |
| cmd.DW17.InstantRateThreshold2ForI = 90; |
| cmd.DW17.InstantRateThreshold3ForI = 115; |
| cmd.DW18.DeviationThreshold0ForP = (uint32_t)(-50 * pow(0.9, bpsRatio)); |
| cmd.DW18.DeviationThreshold1ForP = (uint32_t)(-50 * pow(0.66, bpsRatio)); |
| cmd.DW18.DeviationThreshold2ForP = (uint32_t)(-50 * pow(0.46, bpsRatio)); |
| cmd.DW18.DeviationThreshold3ForP = (uint32_t)(-50 * pow(0.3, bpsRatio)); |
| cmd.DW19.DeviationThreshold4ForP = (uint32_t)(50 * pow(0.3, bpsRatio)); |
| cmd.DW19.DeviationThreshold5ForP = (uint32_t)(50 * pow(0.46, bpsRatio)); |
| cmd.DW19.DeviationThreshold6ForP = (uint32_t)(50 * pow(0.7, bpsRatio)); |
| cmd.DW19.DeviationThreshold7ForP = (uint32_t)(50 * pow(0.9, bpsRatio)); |
| cmd.DW20.DeviationThreshold0ForVBR = (uint32_t)(-50 * pow(0.9, bpsRatio)); |
| cmd.DW20.DeviationThreshold1ForVBR = (uint32_t)(-50 * pow(0.7, bpsRatio)); |
| cmd.DW20.DeviationThreshold2ForVBR = (uint32_t)(-50 * pow(0.5, bpsRatio)); |
| cmd.DW20.DeviationThreshold3ForVBR = (uint32_t)(-50 * pow(0.3, bpsRatio)); |
| cmd.DW21.DeviationThreshold4ForVBR = (uint32_t)(100 * pow(0.4, bpsRatio)); |
| cmd.DW21.DeviationThreshold5ForVBR = (uint32_t)(100 * pow(0.5, bpsRatio)); |
| cmd.DW21.DeviationThreshold6ForVBR = (uint32_t)(100 * pow(0.75, bpsRatio)); |
| cmd.DW21.DeviationThreshold7ForVBR = (uint32_t)(100 * pow(0.9, bpsRatio)); |
| cmd.DW22.DeviationThreshold0ForI = (uint32_t)(-50 * pow(0.8, bpsRatio)); |
| cmd.DW22.DeviationThreshold1ForI = (uint32_t)(-50 * pow(0.6, bpsRatio)); |
| cmd.DW22.DeviationThreshold2ForI = (uint32_t)(-50 * pow(0.34, bpsRatio)); |
| cmd.DW22.DeviationThreshold3ForI = (uint32_t)(-50 * pow(0.2, bpsRatio)); |
| cmd.DW23.DeviationThreshold4ForI = (uint32_t)(50 * pow(0.2, bpsRatio)); |
| cmd.DW23.DeviationThreshold5ForI = (uint32_t)(50 * pow(0.4, bpsRatio)); |
| cmd.DW23.DeviationThreshold6ForI = (uint32_t)(50 * pow(0.66, bpsRatio)); |
| cmd.DW23.DeviationThreshold7ForI = (uint32_t)(50 * pow(0.9, bpsRatio)); |
| cmd.DW24.NumTLevels = seqParams->NumTemporalLayersMinus1 + 1; |
| |
| if( seqParams->NumTemporalLayersMinus1 > 0) |
| { |
| uint32_t tempBitRate[NAX_NUM_TEMPORAL_LAYERS]; |
| |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CalMaxLevelRatioForTL( |
| seqParams->FramesPer100Sec, |
| seqParams->TargetBitRate, |
| (uint32_t)seqParams->NumTemporalLayersMinus1, |
| tempBitRate)); |
| |
| cmd.DW24.INITBCK_MaxLevel_Ratio_U8_Layer0 = uint32_t(tempBitRate[0]); |
| cmd.DW24.INITBCK_MaxLevel_Ratio_U8_Layer1 = uint32_t(tempBitRate[1]); |
| cmd.DW24.INITBCK_MaxLevel_Ratio_U8_Layer2 = uint32_t(tempBitRate[2]); |
| cmd.DW25.INITBCK_MaxLevel_Ratio_U8_Layer3 = uint32_t(tempBitRate[3]); |
| } |
| else |
| { |
| cmd.DW24.INITBCK_MaxLevel_Ratio_U8_Layer0 = 0; |
| cmd.DW24.INITBCK_MaxLevel_Ratio_U8_Layer1 = 0; |
| cmd.DW24.INITBCK_MaxLevel_Ratio_U8_Layer2 = 0; |
| cmd.DW25.INITBCK_MaxLevel_Ratio_U8_Layer3 = 0; |
| } |
| |
| if (params->bInitBrc) |
| { |
| *params->pdBrcInitCurrentTargetBufFullInBits = cmd.DW1.InitBufFullInBits; |
| } |
| |
| *params->pdwBrcInitResetBufSizeInBits = cmd.DW2.BufSizeInBits; |
| *params->pdBrcInitResetInputBitsPerFrame = inputBitsPerFrame; |
| |
| cmd.DW26.HistoryBufferBTI = CODECHAL_VP8_BRC_INIT_RESET_HISTORY_G10; |
| cmd.DW27.DistortionBufferBTI = CODECHAL_VP8_BRC_INIT_RESET_DISTORTION_G10; |
| |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(params->pKernelState->m_dshRegion.AddData( |
| &cmd, |
| params->pKernelState->dwCurbeOffset, |
| sizeof(cmd))); |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::SendBrcInitResetSurfaces( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| struct CodechalVp8BrcInitResetSurfaceParams* params) |
| { |
| uint32_t size; |
| PMHW_KERNEL_STATE kernelState; |
| CODECHAL_SURFACE_CODEC_PARAMS surfaceCodecParams; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_FUNCTION_ENTER; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(cmdBuffer); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->presBrcHistoryBuffer); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pKernelState); |
| |
| kernelState = params->pKernelState; |
| |
| // BRC history buffer |
| size = ENCODE_VP8_BRC_HISTORY_BUFFER_SIZE; |
| MOS_ZeroMemory(&surfaceCodecParams, sizeof(CODECHAL_SURFACE_CODEC_PARAMS)); |
| surfaceCodecParams.bIsWritable = true; |
| surfaceCodecParams.presBuffer = params->presBrcHistoryBuffer; |
| surfaceCodecParams.dwSize = size; |
| surfaceCodecParams.dwBindingTableOffset = CODECHAL_VP8_BRC_INIT_RESET_HISTORY_G10; |
| surfaceCodecParams.bRenderTarget = true; |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalSetRcsSurfaceState( |
| m_hwInterface, |
| cmdBuffer, |
| &surfaceCodecParams, |
| kernelState)); |
| |
| // Distortion Surface (output) |
| MOS_ZeroMemory(&surfaceCodecParams, sizeof(CODECHAL_SURFACE_CODEC_PARAMS)); |
| surfaceCodecParams.bIs2DSurface = true; |
| surfaceCodecParams.bMediaBlockRW = true; |
| surfaceCodecParams.psSurface = params->psMeBrcDistortionBuffer; |
| surfaceCodecParams.dwBindingTableOffset = CODECHAL_VP8_BRC_INIT_RESET_DISTORTION_G10; |
| surfaceCodecParams.bIsWritable = true; |
| surfaceCodecParams.bRenderTarget = true; |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalSetRcsSurfaceState( |
| m_hwInterface, |
| cmdBuffer, |
| &surfaceCodecParams, |
| kernelState)); |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::SetBrcUpdateCurbe(struct CodechalVp8BrcUpdateCurbeParams* params) |
| { |
| struct MediaObjectVp8BrcUpdateStaticDataG10 cmd; |
| PCODEC_VP8_ENCODE_PIC_PARAMS picParams; |
| PCODEC_VP8_ENCODE_SEQUENCE_PARAMS seqParams; |
| PCODEC_VP8_ENCODE_QUANT_DATA vp8QuantData; |
| PMHW_STATE_HEAP_INTERFACE stateHeapInterface; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| uint32_t i; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(m_hwInterface->GetRenderInterface()); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pPicParams); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pSeqParams); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pVp8QuantData); |
| |
| stateHeapInterface = |
| m_hwInterface->GetRenderInterface()->m_stateHeapInterface; |
| CODECHAL_ENCODE_CHK_NULL_RETURN(stateHeapInterface); |
| |
| picParams = params->pPicParams; |
| seqParams = params->pSeqParams; |
| vp8QuantData = params->pVp8QuantData; |
| |
| MOS_ZeroMemory(&cmd, sizeof(cmd)); |
| |
| cmd.DW0.TargetSize = 0; |
| cmd.DW2.PictureHeaderSize = 0; // matching kernel value |
| cmd.DW5.TargetSizeFlag = 0; |
| |
| if (*params->pdBrcInitCurrentTargetBufFullInBits > (double)params->dwBrcInitResetBufSizeInBits) |
| { |
| *params->pdBrcInitCurrentTargetBufFullInBits -= (double)params->dwBrcInitResetBufSizeInBits; |
| cmd.DW5.TargetSizeFlag = 1; |
| } |
| |
| cmd.DW0.TargetSize = (uint32_t)(*params->pdBrcInitCurrentTargetBufFullInBits); |
| |
| cmd.DW5.CurrFrameType = (params->wPictureCodingType == I_TYPE) ? 2 : 0; |
| cmd.DW5.BRCFlag = 16 * seqParams->RateControlMethod; |
| cmd.DW5.MaxNumPAKs = params->dwVp8BrcNumPakPasses; |
| |
| cmd.DW6.TID = picParams->temporal_id; // Default: 0 - if temporal scalability is not supported |
| cmd.DW6.NumTLevels = seqParams->NumTemporalLayersMinus1 + 1; // Default: 1 - if temporal scalability is not supported |
| |
| cmd.DW8.StartGlobalAdjustMult0 = 1; |
| cmd.DW8.StartGlobalAdjustMult1 = 1; |
| cmd.DW8.StartGlobalAdjustMult2 = 3; |
| cmd.DW8.StartGlobalAdjustMult3 = 2; |
| |
| cmd.DW9.StartGlobalAdjustDiv0 = 40; |
| cmd.DW9.StartGlobalAdjustDiv1 = 5; |
| cmd.DW9.StartGlobalAdjustDiv2 = 5; |
| cmd.DW9.StartGlobalAdjustMult4 = 1; |
| |
| cmd.DW10.StartGlobalAdjustDiv3 = 3; |
| cmd.DW10.StartGlobalAdjustDiv4 = 1; |
| cmd.DW10.QPThreshold0 = 20;//7; |
| cmd.DW10.QPThreshold1 = 40;//18; |
| |
| cmd.DW11.QPThreshold2 = 60;//25; |
| cmd.DW11.QPThreshold3 = 90;//37; |
| cmd.DW11.gRateRatioThreshold0 = 40; |
| cmd.DW11.gRateRatioThreshold1 = 75; |
| |
| cmd.DW12.gRateRatioThreshold2 = 97; |
| cmd.DW12.gRateRatioThreshold3 = 103; |
| cmd.DW12.gRateRatioThreshold4 = 125; |
| cmd.DW12.gRateRatioThreshold5 = 160; |
| |
| cmd.DW13.gRateRatioThresholdQP0 = MOS_BITFIELD_VALUE((uint32_t)-3, 8); |
| cmd.DW13.gRateRatioThresholdQP1 = MOS_BITFIELD_VALUE((uint32_t)-2, 8); |
| cmd.DW13.gRateRatioThresholdQP2 = MOS_BITFIELD_VALUE((uint32_t)-1, 8); |
| cmd.DW13.gRateRatioThresholdQP3 = 0; |
| |
| cmd.DW14.gRateRatioThresholdQP4 = 1; |
| cmd.DW14.gRateRatioThresholdQP5 = 2; |
| cmd.DW14.gRateRatioThresholdQP6 = 3; |
| cmd.DW14.IndexOfPreviousQP = 0; |
| |
| *params->pdBrcInitCurrentTargetBufFullInBits += params->dBrcInitResetInputBitsPerFrame; |
| |
| cmd.DW3.startGAdjFrame0 = 10; |
| cmd.DW3.startGAdjFrame1 = 50; |
| cmd.DW4.startGAdjFrame2 = 100; |
| cmd.DW4.startGAdjFrame3 = 150; |
| cmd.DW11.gRateRatioThreshold0 = 40; |
| |
| cmd.DW11.gRateRatioThreshold1 = 75; |
| |
| cmd.DW12.gRateRatioThreshold2 = 97; |
| cmd.DW12.gRateRatioThreshold3 = 103; |
| cmd.DW12.gRateRatioThreshold4 = 125; |
| cmd.DW12.gRateRatioThreshold5 = 160; |
| |
| cmd.DW13.gRateRatioThresholdQP0 = MOS_BITFIELD_VALUE((uint32_t)-3, 8); |
| cmd.DW13.gRateRatioThresholdQP1 = MOS_BITFIELD_VALUE((uint32_t)-2, 8); |
| cmd.DW13.gRateRatioThresholdQP2 = MOS_BITFIELD_VALUE((uint32_t)-1, 8); |
| cmd.DW13.gRateRatioThresholdQP3 = 0; |
| |
| cmd.DW14.gRateRatioThresholdQP4 = 1; |
| cmd.DW14.gRateRatioThresholdQP5 = 2; |
| cmd.DW14.gRateRatioThresholdQP6 = 3; |
| cmd.DW14.IndexOfPreviousQP = 0; |
| |
| // 16bits are used instead of 8bits to fix 4K related issue |
| cmd.DW15.FrameWidthInMB = params->dwFrameWidthInMB; |
| cmd.DW15.FrameHeightInMB = params->dwFrameHeightInMB; |
| |
| cmd.DW16.PFrameQPSeg0 = vp8QuantData->QIndex[0]; |
| cmd.DW16.PFrameQPSeg1 = vp8QuantData->QIndex[1]; |
| cmd.DW16.PFrameQPSeg2 = vp8QuantData->QIndex[2]; |
| cmd.DW16.PFrameQPSeg3 = vp8QuantData->QIndex[3]; |
| |
| cmd.DW17.KeyFrameQPSeg0 = vp8QuantData->QIndex[0]; |
| cmd.DW17.KeyFrameQPSeg1 = vp8QuantData->QIndex[1]; |
| cmd.DW17.KeyFrameQPSeg2 = vp8QuantData->QIndex[2]; |
| cmd.DW17.KeyFrameQPSeg3 = vp8QuantData->QIndex[3]; |
| |
| cmd.DW18.QDeltaPlane0 = vp8QuantData->QIndexDelta[VP8_QINDEX_Y1_DC]; |
| cmd.DW18.QDeltaPlane1 = vp8QuantData->QIndexDelta[VP8_QINDEX_Y2_AC]; |
| cmd.DW18.QDeltaPlane2 = vp8QuantData->QIndexDelta[VP8_QINDEX_Y2_DC]; |
| cmd.DW18.QDeltaPlane3 = vp8QuantData->QIndexDelta[VP8_QINDEX_UV_AC]; |
| |
| cmd.DW19.QDeltaPlane4 = vp8QuantData->QIndexDelta[VP8_QINDEX_UV_DC]; |
| |
| // temporal scaliability is enable |
| cmd.DW19.MainRef = 0; |
| cmd.DW19.RefFrameFlags = 0; |
| |
| if (params->wPictureCodingType == P_TYPE) // P frame |
| { |
| if (seqParams->NumTemporalLayersMinus1 > 0) |
| { |
| uint32_t m_ref_frame_flags = picParams->ref_frame_ctrl; |
| uint8_t m_rfo[3]; |
| |
| m_rfo[2] = picParams->first_ref; |
| m_rfo[1] = picParams->second_ref; |
| m_rfo[0] = 6 - m_rfo[2] - m_rfo[1]; |
| |
| uint32_t MainRef = 0; |
| uint32_t k = 0; |
| |
| for (i = 0; i <3; i++) |
| { |
| if (m_ref_frame_flags & (0x1 << (m_rfo[i] - 1))) { |
| MainRef |= (m_rfo[i] << (2 * k)); |
| k++; |
| } |
| } |
| |
| cmd.DW19.MainRef = MainRef; |
| cmd.DW19.RefFrameFlags = m_ref_frame_flags; |
| } |
| else { |
| // original one for MainRef and RefFlag |
| cmd.DW19.MainRef = VP8_MAINREF_TABLE_G10[picParams->ref_frame_ctrl]; |
| cmd.DW19.RefFrameFlags = picParams->ref_frame_ctrl; |
| } |
| } |
| |
| cmd.DW20.SegOn = picParams->segmentation_enabled; |
| cmd.DW20.BRCMethod = seqParams->RateControlMethod; |
| // DDI Seq Parameter |
| // 0: Default, decided internally based on target usage. |
| // 1: MB BRC enabled. |
| // 2: MB BRC disabled. |
| // Curbe 1: MBRC on, 0: MBRC off |
| cmd.DW20.MBRC = (seqParams->MBBRC == 1)? 1 : 0; |
| cmd.DW20.VMEIntraPrediction = (params->ucKernelMode == encodePerformanceMode) ? 1 : 0; |
| |
| cmd.DW22.HistorytBufferBTI = CODECHAL_VP8_BRC_UPDATE_HISTORY_G10; |
| cmd.DW23.PakStatisticsBTI = CODECHAL_VP8_BRC_UPDATE_PAK_STATISTICS_OUTPUT_G10; |
| cmd.DW24.MfxVp8EncoderCfgReadBTI = CODECHAL_VP8_BRC_UPDATE_MFX_ENCODER_CFG_READ_G10; |
| cmd.DW25.MfxVp8EncoderCfgWriteBTI = CODECHAL_VP8_BRC_UPDATE_MFX_ENCODER_CFG_WRITE_G10; |
| cmd.DW26.MBEncCurbeReadBTI = CODECHAL_VP8_BRC_UPDATE_MBENC_CURBE_READ_G10; |
| cmd.DW27.MBEncCurbeWriteBTI = CODECHAL_VP8_BRC_UPDATE_MBENC_CURBE_WRITE_G10; |
| cmd.DW28.DistortionBTI = CODECHAL_VP8_BRC_UPDATE_DISTORTION_SURFACE_G10; |
| cmd.DW29.ConstantDataBTI = CODECHAL_VP8_BRC_UPDATE_CONSTANT_DATA_G10; |
| cmd.DW30.SegmentMapBTI = CODECHAL_VP8_BRC_UPDATE_SEGMENT_MAP_G10; |
| cmd.DW31.MpuCurbeReadBTI = CODECHAL_VP8_BRC_UPDATE_MPU_CURBE_READ_G10; |
| cmd.DW32.MpuCurbeWriteBTI = CODECHAL_VP8_BRC_UPDATE_MPU_CURBE_WRITE_G10; |
| cmd.DW33.TpuCurbeReadBTI = CODECHAL_VP8_BRC_UPDATE_TPU_CURBE_READ_G10; |
| cmd.DW34.TpuCurbeWriteBTI = CODECHAL_VP8_BRC_UPDATE_TPU_CURBE_WRITE_G10; |
| |
| CODECHAL_ENCODE_CHK_STATUS_RETURN( |
| m_brcKernelStates[CODECHAL_ENCODE_VP8_BRC_IDX_UPDATE].m_dshRegion.AddData( |
| &cmd, |
| m_brcKernelStates[CODECHAL_ENCODE_VP8_BRC_IDX_UPDATE].dwCurbeOffset, |
| sizeof(cmd))); |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::SetMbEncCurbe(struct CodechalVp8MbencCurbeParams* params) |
| { |
| PCODEC_VP8_ENCODE_PIC_PARAMS picParams; |
| PCODEC_VP8_ENCODE_SEQUENCE_PARAMS seqParams; |
| PCODEC_VP8_ENCODE_QUANT_DATA vp8QuantData; |
| PMHW_STATE_HEAP_INTERFACE stateHeapInterface; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(m_hwInterface->GetRenderInterface()); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pPicParams); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pSeqParams); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pVp8QuantData); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pKernelState); |
| |
| stateHeapInterface = |
| m_hwInterface->GetRenderInterface()->m_stateHeapInterface; |
| CODECHAL_ENCODE_CHK_NULL_RETURN(stateHeapInterface); |
| |
| picParams = params->pPicParams; |
| seqParams = params->pSeqParams; |
| vp8QuantData = params->pVp8QuantData; |
| |
| if (params->wPictureCodingType == I_TYPE) |
| { |
| struct MediaObjectVp8MbencIStaticDataG10 cmd; |
| int16_t usQi_Y_Dc, usQi_UV_Dc, usQi_UV_Ac; |
| |
| MOS_ZeroMemory(&cmd, sizeof(cmd)); |
| |
| cmd.DW0.FrameWidth = (seqParams->FrameWidth + 15) & (~0xF); /* Kernel require MB boundary aligned dimensions */ |
| cmd.DW0.FrameHeight = (seqParams->FrameHeight + 15) & (~0xF); |
| |
| cmd.DW1.FrameType = 0; /* key frame I-Frame */ |
| cmd.DW1.EnableSegmentation = picParams->segmentation_enabled; |
| cmd.DW1.EnableHWIntraPrediction = (params->ucKernelMode == encodePerformanceMode) ? 1 : 0; |
| cmd.DW1.EnableEnableChromaIPEnhancement = 1; /* Always enabled and cannot be disabled */ |
| cmd.DW1.EnableDebugDumps = 0; |
| cmd.DW1.EnableMPUHistogramUpdate = 1; |
| cmd.DW1.VMEDistortionMeasure = 2; |
| cmd.DW1.VMEEnableTMCheck = 0; |
| |
| usQi_Y_Dc = vp8QuantData->QIndex[0] + vp8QuantData->QIndexDelta[VP8_QINDEX_Y1_DC]; |
| usQi_Y_Dc = usQi_Y_Dc < 0 ? 0 : (usQi_Y_Dc > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_Y_Dc); |
| cmd.DW2.LambdaSegment0 = (uint16_t)((VP8_QUANT_DC_G10[usQi_Y_Dc] * VP8_QUANT_DC_G10[usQi_Y_Dc]) / 4); |
| if (picParams->segmentation_enabled) |
| { |
| usQi_Y_Dc = vp8QuantData->QIndex[1] + vp8QuantData->QIndexDelta[VP8_QINDEX_Y1_DC]; |
| usQi_Y_Dc = usQi_Y_Dc < 0 ? 0 : (usQi_Y_Dc > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_Y_Dc); |
| cmd.DW2.LambdaSegment1 = (uint16_t)((VP8_QUANT_DC_G10[usQi_Y_Dc] * VP8_QUANT_DC_G10[usQi_Y_Dc]) / 4); |
| |
| usQi_Y_Dc = vp8QuantData->QIndex[2] + vp8QuantData->QIndexDelta[VP8_QINDEX_Y1_DC]; |
| usQi_Y_Dc = usQi_Y_Dc < 0 ? 0 : (usQi_Y_Dc > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_Y_Dc); |
| cmd.DW3.LambdaSegment2 = (uint16_t)((VP8_QUANT_DC_G10[usQi_Y_Dc] * VP8_QUANT_DC_G10[usQi_Y_Dc]) / 4); |
| |
| usQi_Y_Dc = vp8QuantData->QIndex[3] + vp8QuantData->QIndexDelta[VP8_QINDEX_Y1_DC]; |
| usQi_Y_Dc = usQi_Y_Dc < 0 ? 0 : (usQi_Y_Dc > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_Y_Dc); |
| cmd.DW3.LambdaSegment3 = (uint16_t)((VP8_QUANT_DC_G10[usQi_Y_Dc] * VP8_QUANT_DC_G10[usQi_Y_Dc]) / 4); |
| } |
| |
| cmd.DW4.AllDCBiasSegment0 = VP8_ALL_DC_BIAS_DEFAULT; |
| if (picParams->segmentation_enabled) |
| { |
| cmd.DW4.AllDCBiasSegment1 = VP8_ALL_DC_BIAS_DEFAULT; |
| cmd.DW5.AllDCBiasSegment2 = VP8_ALL_DC_BIAS_DEFAULT; |
| cmd.DW5.AllDCBiasSegment3 = VP8_ALL_DC_BIAS_DEFAULT; |
| } |
| |
| usQi_UV_Dc = vp8QuantData->QIndex[0] + vp8QuantData->QIndexDelta[VP8_QINDEX_UV_DC]; |
| usQi_UV_Dc = usQi_UV_Dc < 0 ? 0 : (usQi_UV_Dc > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_UV_Dc); |
| cmd.DW6.ChromaDCDeQuantSegment0 = VP8_QUANT_DC_G10[usQi_UV_Dc]; |
| if (picParams->segmentation_enabled) |
| { |
| usQi_UV_Dc = vp8QuantData->QIndex[1] + vp8QuantData->QIndexDelta[VP8_QINDEX_UV_DC]; |
| usQi_UV_Dc = usQi_UV_Dc < 0 ? 0 : (usQi_UV_Dc > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_UV_Dc); |
| cmd.DW6.ChromaDCDeQuantSegment1 = VP8_QUANT_DC_G10[usQi_UV_Dc]; |
| usQi_UV_Dc = vp8QuantData->QIndex[2] + vp8QuantData->QIndexDelta[VP8_QINDEX_UV_DC]; |
| usQi_UV_Dc = usQi_UV_Dc < 0 ? 0 : (usQi_UV_Dc > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_UV_Dc); |
| cmd.DW7.ChromaDCDeQuantSegment2 = VP8_QUANT_DC_G10[usQi_UV_Dc]; |
| usQi_UV_Dc = vp8QuantData->QIndex[3] + vp8QuantData->QIndexDelta[VP8_QINDEX_UV_DC]; |
| usQi_UV_Dc = usQi_UV_Dc < 0 ? 0 : (usQi_UV_Dc > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_UV_Dc); |
| cmd.DW7.ChromaDCDeQuantSegment3 = VP8_QUANT_DC_G10[usQi_UV_Dc]; |
| } |
| |
| usQi_UV_Ac = vp8QuantData->QIndex[0] + vp8QuantData->QIndexDelta[VP8_QINDEX_UV_AC]; |
| usQi_UV_Ac = usQi_UV_Ac < 0 ? 0 : (usQi_UV_Ac > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_UV_Ac); |
| cmd.DW8.ChromaACDeQuantSegment0 = VP8_QUANT_AC_G10[usQi_UV_Ac]; |
| cmd.DW10.ChromaAC0Threshold0Segment0 = (uint16_t)((((((1) << 16) - 1)*1.0 / ((1 << 16) / VP8_QUANT_AC_G10[usQi_UV_Ac]) - ((48 * VP8_QUANT_AC_G10[usQi_UV_Ac]) >> 7))* (1 << 13) + 3400) / 2217.0); |
| cmd.DW10.ChromaAC0Threshold1Segment0 = (uint16_t)((((((2) << 16) - 1)*1.0 / ((1 << 16) / VP8_QUANT_AC_G10[usQi_UV_Ac]) - ((48 * VP8_QUANT_AC_G10[usQi_UV_Ac]) >> 7))* (1 << 13) + 3400) / 2217.0); |
| if (picParams->segmentation_enabled) |
| { |
| usQi_UV_Ac = vp8QuantData->QIndex[1] + vp8QuantData->QIndexDelta[VP8_QINDEX_UV_AC]; |
| usQi_UV_Ac = usQi_UV_Ac < 0 ? 0 : (usQi_UV_Ac > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_UV_Ac); |
| cmd.DW8.ChromaACDeQuantSegment1 = VP8_QUANT_AC_G10[usQi_UV_Ac]; |
| cmd.DW11.ChromaAC0Threshold0Segment1 = (uint16_t)((((((1) << 16) - 1)*1.0 / ((1 << 16) / VP8_QUANT_AC_G10[usQi_UV_Ac]) - ((48 * VP8_QUANT_AC_G10[usQi_UV_Ac]) >> 7))* (1 << 13) + 3400) / 2217.0); |
| cmd.DW11.ChromaAC0Threshold1Segment1 = (uint16_t)((((((2) << 16) - 1)*1.0 / ((1 << 16) / VP8_QUANT_AC_G10[usQi_UV_Ac]) - ((48 * VP8_QUANT_AC_G10[usQi_UV_Ac]) >> 7))* (1 << 13) + 3400) / 2217.0); |
| |
| usQi_UV_Ac = vp8QuantData->QIndex[2] + vp8QuantData->QIndexDelta[VP8_QINDEX_UV_AC]; |
| usQi_UV_Ac = usQi_UV_Ac < 0 ? 0 : (usQi_UV_Ac > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_UV_Ac); |
| cmd.DW9.ChromaACDeQuantSegment2 = VP8_QUANT_AC_G10[usQi_UV_Ac]; |
| cmd.DW12.ChromaAC0Threshold0Segment2 = (uint16_t)((((((1) << 16) - 1)*1.0 / ((1 << 16) / VP8_QUANT_AC_G10[usQi_UV_Ac]) - ((48 * VP8_QUANT_AC_G10[usQi_UV_Ac]) >> 7))* (1 << 13) + 3400) / 2217.0); |
| cmd.DW12.ChromaAC0Threshold1Segment2 = (uint16_t)((((((2) << 16) - 1)*1.0 / ((1 << 16) / VP8_QUANT_AC_G10[usQi_UV_Ac]) - ((48 * VP8_QUANT_AC_G10[usQi_UV_Ac]) >> 7))* (1 << 13) + 3400) / 2217.0); |
| |
| usQi_UV_Ac = vp8QuantData->QIndex[3] + vp8QuantData->QIndexDelta[VP8_QINDEX_UV_AC]; |
| usQi_UV_Ac = usQi_UV_Ac < 0 ? 0 : (usQi_UV_Ac > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_UV_Ac); |
| cmd.DW9.ChromaACDeQuantSegment3 = VP8_QUANT_AC_G10[usQi_UV_Ac]; |
| cmd.DW13.ChromaAC0Threshold0Segment3 = (uint16_t)((((((1) << 16) - 1)*1.0 / ((1 << 16) / VP8_QUANT_AC_G10[usQi_UV_Ac]) - ((48 * VP8_QUANT_AC_G10[usQi_UV_Ac]) >> 7))* (1 << 13) + 3400) / 2217.0); |
| cmd.DW13.ChromaAC0Threshold1Segment3 = (uint16_t)((((((2) << 16) - 1)*1.0 / ((1 << 16) / VP8_QUANT_AC_G10[usQi_UV_Ac]) - ((48 * VP8_QUANT_AC_G10[usQi_UV_Ac]) >> 7))* (1 << 13) + 3400) / 2217.0); |
| } |
| |
| usQi_UV_Dc = vp8QuantData->QIndex[0] + vp8QuantData->QIndexDelta[VP8_QINDEX_UV_DC]; |
| usQi_UV_Dc = usQi_UV_Dc < 0 ? 0 : (usQi_UV_Dc > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_UV_Dc); |
| cmd.DW14.ChromaDCThreshold0Segment0 = (((1) << 16) - 1) / ((1 << 16) / VP8_QUANT_DC_G10[usQi_UV_Dc]) - ((48 * VP8_QUANT_DC_G10[usQi_UV_Dc]) >> 7); |
| cmd.DW14.ChromaDCThreshold1Segment0 = (((2) << 16) - 1) / ((1 << 16) / VP8_QUANT_DC_G10[usQi_UV_Dc]) - ((48 * VP8_QUANT_DC_G10[usQi_UV_Dc]) >> 7); |
| cmd.DW15.ChromaDCThreshold2Segment0 = (((3) << 16) - 1) / ((1 << 16) / VP8_QUANT_DC_G10[usQi_UV_Dc]) - ((48 * VP8_QUANT_DC_G10[usQi_UV_Dc]) >> 7); |
| cmd.DW15.ChromaDCThreshold3Segment0 = (((4) << 16) - 1) / ((1 << 16) / VP8_QUANT_DC_G10[usQi_UV_Dc]) - ((48 * VP8_QUANT_DC_G10[usQi_UV_Dc]) >> 7); |
| if (picParams->segmentation_enabled) |
| { |
| usQi_UV_Dc = vp8QuantData->QIndex[1] + vp8QuantData->QIndexDelta[VP8_QINDEX_UV_DC]; |
| usQi_UV_Dc = usQi_UV_Dc < 0 ? 0 : (usQi_UV_Dc > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_UV_Dc); |
| cmd.DW16.ChromaDCThreshold0Segment1 = (((1) << 16) - 1) / ((1 << 16) / VP8_QUANT_DC_G10[usQi_UV_Dc]) - ((48 * VP8_QUANT_DC_G10[usQi_UV_Dc]) >> 7); |
| cmd.DW16.ChromaDCThreshold1Segment1 = (((2) << 16) - 1) / ((1 << 16) / VP8_QUANT_DC_G10[usQi_UV_Dc]) - ((48 * VP8_QUANT_DC_G10[usQi_UV_Dc]) >> 7); |
| cmd.DW17.ChromaDCThreshold2Segment1 = (((3) << 16) - 1) / ((1 << 16) / VP8_QUANT_DC_G10[usQi_UV_Dc]) - ((48 * VP8_QUANT_DC_G10[usQi_UV_Dc]) >> 7); |
| cmd.DW17.ChromaDCThreshold3Segment1 = (((4) << 16) - 1) / ((1 << 16) / VP8_QUANT_DC_G10[usQi_UV_Dc]) - ((48 * VP8_QUANT_DC_G10[usQi_UV_Dc]) >> 7); |
| |
| usQi_UV_Dc = vp8QuantData->QIndex[2] + vp8QuantData->QIndexDelta[VP8_QINDEX_UV_DC]; |
| usQi_UV_Dc = usQi_UV_Dc < 0 ? 0 : (usQi_UV_Dc > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_UV_Dc); |
| cmd.DW18.ChromaDCThreshold0Segment2 = (((1) << 16) - 1) / ((1 << 16) / VP8_QUANT_DC_G10[usQi_UV_Dc]) - ((48 * VP8_QUANT_DC_G10[usQi_UV_Dc]) >> 7); |
| cmd.DW18.ChromaDCThreshold1Segment2 = (((2) << 16) - 1) / ((1 << 16) / VP8_QUANT_DC_G10[usQi_UV_Dc]) - ((48 * VP8_QUANT_DC_G10[usQi_UV_Dc]) >> 7); |
| cmd.DW19.ChromaDCThreshold2Segment2 = (((3) << 16) - 1) / ((1 << 16) / VP8_QUANT_DC_G10[usQi_UV_Dc]) - ((48 * VP8_QUANT_DC_G10[usQi_UV_Dc]) >> 7); |
| cmd.DW19.ChromaDCThreshold3Segment2 = (((4) << 16) - 1) / ((1 << 16) / VP8_QUANT_DC_G10[usQi_UV_Dc]) - ((48 * VP8_QUANT_DC_G10[usQi_UV_Dc]) >> 7); |
| |
| usQi_UV_Dc = vp8QuantData->QIndex[3] + vp8QuantData->QIndexDelta[VP8_QINDEX_UV_DC]; |
| usQi_UV_Dc = usQi_UV_Dc < 0 ? 0 : (usQi_UV_Dc > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_UV_Dc); |
| cmd.DW20.ChromaDCThreshold0Segment3 = (((1) << 16) - 1) / ((1 << 16) / VP8_QUANT_DC_G10[usQi_UV_Dc]) - ((48 * VP8_QUANT_DC_G10[usQi_UV_Dc]) >> 7); |
| cmd.DW20.ChromaDCThreshold1Segment3 = (((2) << 16) - 1) / ((1 << 16) / VP8_QUANT_DC_G10[usQi_UV_Dc]) - ((48 * VP8_QUANT_DC_G10[usQi_UV_Dc]) >> 7); |
| cmd.DW21.ChromaDCThreshold2Segment3 = (((3) << 16) - 1) / ((1 << 16) / VP8_QUANT_DC_G10[usQi_UV_Dc]) - ((48 * VP8_QUANT_DC_G10[usQi_UV_Dc]) >> 7); |
| cmd.DW21.ChromaDCThreshold3Segment3 = (((4) << 16) - 1) / ((1 << 16) / VP8_QUANT_DC_G10[usQi_UV_Dc]) - ((48 * VP8_QUANT_DC_G10[usQi_UV_Dc]) >> 7); |
| } |
| |
| usQi_UV_Ac = vp8QuantData->QIndex[0] + vp8QuantData->QIndexDelta[VP8_QINDEX_UV_AC]; |
| usQi_UV_Ac = usQi_UV_Ac < 0 ? 0 : (usQi_UV_Ac > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_UV_Ac); |
| cmd.DW22.ChromaAC1ThresholdSegment0 = ((1 << (16)) - 1) / ((1 << 16) / VP8_QUANT_AC_G10[usQi_UV_Ac]) - ((48 * VP8_QUANT_AC_G10[usQi_UV_Ac]) >> 7); |
| if (picParams->segmentation_enabled) |
| { |
| usQi_UV_Ac = vp8QuantData->QIndex[1] + vp8QuantData->QIndexDelta[VP8_QINDEX_UV_AC]; |
| usQi_UV_Ac = usQi_UV_Ac < 0 ? 0 : (usQi_UV_Ac > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_UV_Ac); |
| cmd.DW22.ChromaAC1ThresholdSegment1 = ((1 << (16)) - 1) / ((1 << 16) / VP8_QUANT_AC_G10[usQi_UV_Ac]) - ((48 * VP8_QUANT_AC_G10[usQi_UV_Ac]) >> 7); |
| |
| usQi_UV_Ac = vp8QuantData->QIndex[2] + vp8QuantData->QIndexDelta[VP8_QINDEX_UV_AC]; |
| usQi_UV_Ac = usQi_UV_Ac < 0 ? 0 : (usQi_UV_Ac > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_UV_Ac); |
| cmd.DW23.ChromaAC1ThresholdSegment2 = ((1 << (16)) - 1) / ((1 << 16) / VP8_QUANT_AC_G10[usQi_UV_Ac]) - ((48 * VP8_QUANT_AC_G10[usQi_UV_Ac]) >> 7); |
| usQi_UV_Ac = vp8QuantData->QIndex[3] + vp8QuantData->QIndexDelta[VP8_QINDEX_UV_AC]; |
| usQi_UV_Ac = usQi_UV_Ac < 0 ? 0 : (usQi_UV_Ac > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_UV_Ac); |
| cmd.DW23.ChromaAC1ThresholdSegment3 = ((1 << (16)) - 1) / ((1 << 16) / VP8_QUANT_AC_G10[usQi_UV_Ac]) - ((48 * VP8_QUANT_AC_G10[usQi_UV_Ac]) >> 7); |
| } |
| |
| usQi_Y_Dc = vp8QuantData->QIndex[0] + vp8QuantData->QIndexDelta[VP8_QINDEX_Y1_DC]; |
| usQi_Y_Dc = usQi_Y_Dc < 0 ? 0 : (usQi_Y_Dc > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_Y_Dc); |
| cmd.DW24.VME16x16CostSegment0 = VP8_IFRAME_VME_COSTS_G10[usQi_Y_Dc & 0x7F][0]; |
| cmd.DW25.VME4x4CostSegment0 = VP8_IFRAME_VME_COSTS_G10[usQi_Y_Dc & 0x7F][1]; |
| cmd.DW26.VME16x16NonDCPenaltySegment0 = VP8_IFRAME_VME_COSTS_G10[usQi_Y_Dc & 0x7F][2]; |
| cmd.DW27.VME4x4NonDCPenaltySegment0 = VP8_IFRAME_VME_COSTS_G10[usQi_Y_Dc & 0x7F][3]; |
| if (picParams->segmentation_enabled) |
| { |
| usQi_Y_Dc = vp8QuantData->QIndex[1] + vp8QuantData->QIndexDelta[VP8_QINDEX_Y1_DC]; |
| usQi_Y_Dc = usQi_Y_Dc < 0 ? 0 : (usQi_Y_Dc > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_Y_Dc); |
| cmd.DW24.VME16x16CostSegment1 = VP8_IFRAME_VME_COSTS_G10[usQi_Y_Dc & 0x7F][0]; |
| cmd.DW25.VME4x4CostSegment1 = VP8_IFRAME_VME_COSTS_G10[usQi_Y_Dc & 0x7F][1]; |
| cmd.DW26.VME16x16NonDCPenaltySegment1 = VP8_IFRAME_VME_COSTS_G10[usQi_Y_Dc & 0x7F][2]; |
| cmd.DW27.VME4x4NonDCPenaltySegment1 = VP8_IFRAME_VME_COSTS_G10[usQi_Y_Dc & 0x7F][3]; |
| |
| usQi_Y_Dc = vp8QuantData->QIndex[2] + vp8QuantData->QIndexDelta[VP8_QINDEX_Y1_DC]; |
| usQi_Y_Dc = usQi_Y_Dc < 0 ? 0 : (usQi_Y_Dc > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_Y_Dc); |
| cmd.DW24.VME16x16CostSegment2 = VP8_IFRAME_VME_COSTS_G10[usQi_Y_Dc & 0x7F][0]; |
| cmd.DW25.VME4x4CostSegment2 = VP8_IFRAME_VME_COSTS_G10[usQi_Y_Dc & 0x7F][1]; |
| cmd.DW26.VME16x16NonDCPenaltySegment2 = VP8_IFRAME_VME_COSTS_G10[usQi_Y_Dc & 0x7F][2]; |
| cmd.DW27.VME4x4NonDCPenaltySegment2 = VP8_IFRAME_VME_COSTS_G10[usQi_Y_Dc & 0x7F][3]; |
| |
| usQi_Y_Dc = vp8QuantData->QIndex[3] + vp8QuantData->QIndexDelta[VP8_QINDEX_Y1_DC]; |
| usQi_Y_Dc = usQi_Y_Dc < 0 ? 0 : (usQi_Y_Dc > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_Y_Dc); |
| cmd.DW24.VME16x16CostSegment3 = VP8_IFRAME_VME_COSTS_G10[usQi_Y_Dc & 0x7F][0]; |
| cmd.DW25.VME4x4CostSegment3 = VP8_IFRAME_VME_COSTS_G10[usQi_Y_Dc & 0x7F][1]; |
| cmd.DW26.VME16x16NonDCPenaltySegment3 = VP8_IFRAME_VME_COSTS_G10[usQi_Y_Dc & 0x7F][2]; |
| cmd.DW27.VME4x4NonDCPenaltySegment3 = VP8_IFRAME_VME_COSTS_G10[usQi_Y_Dc & 0x7F][3]; |
| } |
| |
| cmd.DW32.MBEncPerMBOutDataSurfBTI = CODECHAL_VP8_MBENC_PER_MB_OUT_G10; |
| |
| /* For CM kernels the Surface index of UV surface gets incremented by 1, so the Luma surface index itself is programmed in the Curbe data */ |
| cmd.DW33.MBEncCurrYBTI = CODECHAL_VP8_MBENC_CURR_Y_G10; |
| cmd.DW34.MBEncCurrUVBTI = CODECHAL_VP8_MBENC_CURR_Y_G10;//CODECHAL_VP8_MBENC_CURR_UV_G10; |
| cmd.DW35.MBModeCostLumaBTI = CODECHAL_VP8_MBENC_MB_MODE_COST_LUMA_G10; |
| cmd.DW36.MBEncBlockModeCostBTI = CODECHAL_VP8_MBENC_BLOCK_MODE_COST_G10; |
| cmd.DW37.ChromaReconSurfBTI = CODECHAL_VP8_MBENC_CHROMA_RECON_G10; |
| cmd.DW38.SegmentationMapBTI = CODECHAL_VP8_MBENC_SEGMENTATION_MAP_G10; |
| cmd.DW39.HistogramBTI = CODECHAL_VP8_MBENC_HISTOGRAM_G10; |
| cmd.DW40.MBEncVMEDebugStreamOutBTI = CODECHAL_VP8_MBENC_I_VME_DEBUG_STREAMOUT_G10; |
| cmd.DW41.VmeBTI = CODECHAL_VP8_MBENC_VME_G10; |
| cmd.DW42.IDistortionSurfaceBTI = CODECHAL_VP8_MBENC_IDIST_G10; |
| cmd.DW43.MBEncCurrYDownScaledBTI = CODECHAL_VP8_MBENC_CURR_Y_DOWNSCALED_G10; |
| cmd.DW44.MBEncVMECoarseIntraBTI = CODECHAL_VP8_MBENC_VME_Coarse_Intra_G10; |
| |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(params->pKernelState->m_dshRegion.AddData( |
| &cmd, |
| params->pKernelState->dwCurbeOffset, |
| sizeof(cmd))); |
| } |
| else |
| { |
| //P frame CURBE |
| struct MediaObjectVp8MbencPStaticDataG10 cmd; |
| int16_t usQi_Y_Dc_Seg0, usQi_Y_Dc_Seg1, usQi_Y_Dc_Seg2, usQi_Y_Dc_Seg3; |
| int16_t usQp_Seg0, usQp_Seg1, usQp_Seg2, usQp_Seg3; |
| |
| MOS_ZeroMemory(&cmd, sizeof(cmd)); |
| |
| usQi_Y_Dc_Seg0 = vp8QuantData->QIndex[0] + vp8QuantData->QIndexDelta[VP8_QINDEX_Y1_DC];/* TBC */ |
| usQi_Y_Dc_Seg1 = vp8QuantData->QIndex[1] + vp8QuantData->QIndexDelta[VP8_QINDEX_Y1_DC]; |
| usQi_Y_Dc_Seg2 = vp8QuantData->QIndex[2] + vp8QuantData->QIndexDelta[VP8_QINDEX_Y1_DC]; |
| usQi_Y_Dc_Seg3 = vp8QuantData->QIndex[3] + vp8QuantData->QIndexDelta[VP8_QINDEX_Y1_DC]; |
| |
| usQp_Seg0 = usQi_Y_Dc_Seg0 < 0 ? 0 : (usQi_Y_Dc_Seg0 > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_Y_Dc_Seg0); |
| usQp_Seg1 = usQi_Y_Dc_Seg1 < 0 ? 0 : (usQi_Y_Dc_Seg1 > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_Y_Dc_Seg1); |
| usQp_Seg2 = usQi_Y_Dc_Seg2 < 0 ? 0 : (usQi_Y_Dc_Seg2 > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_Y_Dc_Seg2); |
| usQp_Seg3 = usQi_Y_Dc_Seg3 < 0 ? 0 : (usQi_Y_Dc_Seg3 > CODECHAL_VP8_QP_MAX ? CODECHAL_VP8_QP_MAX : usQi_Y_Dc_Seg3); |
| |
| uint8_t MEMethod = (params->ucKernelMode == encodeNormalMode) ? 6 : 4; |
| |
| //DW0 |
| cmd.DW0.FrameWidth = (seqParams->FrameWidth + 15) & (~0xF); /* Kernel require MB boundary aligned dimensions */ |
| cmd.DW0.FrameHeight = (seqParams->FrameHeight + 15) & (~0xF); |
| // DW1 |
| cmd.DW1.FrameType = 1; // P-frame |
| cmd.DW1.MultiplePred = (params->ucKernelMode == encodeNormalMode) ? 1 : ((params->ucKernelMode == encodePerformanceMode) ? 0 : 2); |
| cmd.DW1.HMEEnable = params->bHmeEnabled; |
| cmd.DW1.HMECombineOverlap = 1; |
| cmd.DW1.EnableTemporalScalability = 0; |
| cmd.DW1.RefFrameFlags = picParams->ref_frame_ctrl; |
| cmd.DW1.EnableSegmentation = picParams->segmentation_enabled; |
| cmd.DW1.EnableSegmentationInfoUpdate = 1;//dont care field hardcoding to match kernel- picParams->update_mb_segmentation_map; |
| cmd.DW1.MultiReferenceQPCheck = false; |
| cmd.DW1.ModecostEnableFlag = 1; |
| |
| // temporal scaliability is enable |
| cmd.DW1.MainRef = 0; |
| |
| if (seqParams->NumTemporalLayersMinus1 > 0) |
| { |
| uint32_t m_ref_frame_flags = picParams->ref_frame_ctrl; |
| uint8_t m_rfo[3]; |
| |
| m_rfo[2] = picParams->first_ref; |
| m_rfo[1] = picParams->second_ref; |
| m_rfo[0] = 6 - m_rfo[2] - m_rfo[1]; |
| |
| uint32_t MainRef = 0; |
| uint32_t k = 0; |
| uint32_t i; |
| |
| for (i = 0; i <3; i++) |
| { |
| if (m_ref_frame_flags & (0x1 << (m_rfo[i] - 1))) { |
| MainRef |= (m_rfo[i] << (2 * k)); |
| k++; |
| } |
| } |
| |
| cmd.DW1.MainRef = MainRef; |
| } |
| else { |
| // original one for MainRef and RefFlag |
| cmd.DW1.MainRef = VP8_MAINREF_TABLE_G10[picParams->ref_frame_ctrl]; |
| } |
| |
| //DW2 |
| cmd.DW2.LambdaIntraSegment0 = VP8_QUANT_DC_G10[usQp_Seg0]; |
| cmd.DW2.LambdaInterSegment0 = (VP8_QUANT_DC_G10[usQp_Seg0] >> 2); |
| //DW3 |
| cmd.DW3.LambdaIntraSegment1 = (VP8_QUANT_DC_G10[usQp_Seg1]); |
| cmd.DW3.LambdaInterSegment1 = (VP8_QUANT_DC_G10[usQp_Seg1] >> 2); |
| //DW4 |
| cmd.DW4.LambdaIntraSegment2 = (VP8_QUANT_DC_G10[usQp_Seg2]); |
| cmd.DW4.LambdaInterSegment2 = (VP8_QUANT_DC_G10[usQp_Seg2] >> 2); |
| //DW5 |
| cmd.DW5.LambdaIntraSegment3 = (VP8_QUANT_DC_G10[usQp_Seg3]); |
| cmd.DW5.LambdaInterSegment3 = (VP8_QUANT_DC_G10[usQp_Seg3] >> 2); |
| //DW6 |
| cmd.DW6.ReferenceFrameSignBias_3 = picParams->sign_bias_golden; |
| cmd.DW6.ReferenceFrameSignBias_2 = picParams->sign_bias_alternate; |
| cmd.DW6.ReferenceFrameSignBias_1 = picParams->sign_bias_golden ^ picParams->sign_bias_alternate; |
| cmd.DW6.ReferenceFrameSignBias_0 = 0; |
| //DW7 |
| cmd.DW7.RawDistThreshold = (params->ucKernelMode == encodeNormalMode) ? 50 : ((params->ucKernelMode == encodePerformanceMode) ? 0 : 100); |
| cmd.DW7.TemporalLayerID = picParams->temporal_id; |
| //DW8 |
| cmd.DW8.EarlyIMESuccessfulStopThreshold = 0; |
| cmd.DW8.AdaptiveSearchEnable = (params->ucKernelMode != encodePerformanceMode) ? 1 : 0; |
| cmd.DW8.SkipModeEnable = 1; |
| cmd.DW8.BidirectionalMixDisbale = 0; |
| cmd.DW8.Transform8x8FlagForInterEnable = 0; |
| cmd.DW8.EarlyIMESuccessEnable = 0; |
| //DW9 |
| cmd.DW9.RefPixelBiasEnable = 0; |
| cmd.DW9.UnidirectionMixEnable = 0; |
| cmd.DW9.BidirectionalWeight = 0; |
| cmd.DW9.RefIDPolarityBits = 0; |
| cmd.DW9.MaximumNumberOfMotionVectors = 0 /* 32 */; // from BDW |
| //DW10 |
| cmd.DW10.MaxFixedSearchPathLength = (params->ucKernelMode == encodeNormalMode) ? 25 : ((params->ucKernelMode == encodePerformanceMode) ? 9 : 57); |
| cmd.DW10.MaximumSearchPathLength = 57; |
| //DW11 |
| cmd.DW11.SubMacroBlockSubPartitionMask = 0 /* 0x30 */; //from BDW |
| cmd.DW11.IntraSADMeasureAdjustment = 2; |
| cmd.DW11.InterSADMeasureAdjustment = 2; |
| cmd.DW11.BlockBasedSkipEnable = 0; |
| cmd.DW11.BMEdisableforFBRMessage = 0 /* 1 */; // from BDW |
| cmd.DW11.ForwardTransformSkipCheckEnable = 0; |
| cmd.DW11.ProcessInterChromaPixelsMode = 0; |
| cmd.DW11.DisableFieldCacheAllocation = 0; |
| cmd.DW11.SkipModeType = 0; |
| cmd.DW11.SubPelMode = 3; |
| cmd.DW11.DualSearchPathOption = 0; |
| cmd.DW11.SearchControl = 0; |
| cmd.DW11.ReferenceAccess = 0; |
| cmd.DW11.SourceAccess = 0; |
| cmd.DW11.InterMbTypeRoadMap = 0; |
| cmd.DW11.SourceBlockSize = 0; |
| //DW12 |
| cmd.DW12.ReferenceSearchWindowsHeight = (params->ucKernelMode != encodePerformanceMode) ? 40 : 28; |
| cmd.DW12.ReferenceSearchWindowsWidth = (params->ucKernelMode != encodePerformanceMode) ? 48 : 28; |
| //DW13 |
| cmd.DW13.Value = VP8_COST_TABLE_G10[usQp_Seg0][0]; |
| cmd.DW14.Value = VP8_COST_TABLE_G10[usQp_Seg0][1]; |
| cmd.DW15.Value = VP8_COST_TABLE_G10[usQp_Seg0][2]; |
| // which table to load is selected by MEMethod parameter determined by the driver based on the usage model (normal/quality/performance) |
| switch (MEMethod) |
| { |
| case 2: |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(MOS_SecureMemcpy(&(cmd.DW16), sizeof(VP8_SINGLESU), VP8_SINGLESU, sizeof(VP8_SINGLESU))); |
| break; |
| |
| case 3: |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(MOS_SecureMemcpy(&(cmd.DW16), sizeof(VP8_RASTERSCAN_48x40), VP8_RASTERSCAN_48x40, sizeof(VP8_RASTERSCAN_48x40))); |
| break; |
| |
| case 4: |
| case 5: |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(MOS_SecureMemcpy(&(cmd.DW16), sizeof(VP8_FULLSPIRAL_48x40), VP8_FULLSPIRAL_48x40, sizeof(VP8_FULLSPIRAL_48x40))); |
| break; |
| |
| case 6: |
| default: |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(MOS_SecureMemcpy(&(cmd.DW16), sizeof(VP8_DIAMOND), VP8_DIAMOND, sizeof(VP8_DIAMOND))); |
| break; |
| } |
| //DW30 |
| cmd.DW30.Value = VP8_COST_TABLE_G10[usQp_Seg0][3]; |
| //DW31 |
| cmd.DW31.Value = VP8_COST_TABLE_G10[usQp_Seg0][4]; |
| //DW32 |
| cmd.DW32.BilinearEnable = 0; |
| cmd.DW32.Intra16x16NoDCPenaltySegment0 = VP8_COST_TABLE_G10[usQp_Seg0][5]; |
| cmd.DW32.Intra16x16NoDCPenaltySegment1 = VP8_COST_TABLE_G10[usQp_Seg1][5]; |
| //DW33 |
| cmd.DW33.Intra16x16NoDCPenaltySegment2 = VP8_COST_TABLE_G10[usQp_Seg2][5]; |
| cmd.DW33.Intra16x16NoDCPenaltySegment3 = VP8_COST_TABLE_G10[usQp_Seg3][5]; |
| cmd.DW33.HMECombineLen = 8;//based on target usage part of par file param |
| //DW34 to DW57 |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(MOS_SecureMemcpy(&(cmd.DW34), 24 * sizeof(uint32_t), VP8_MvRefCostContext_G10, 24 * sizeof(uint32_t))); |
| //DW58 |
| cmd.DW58.EncCost16x16 = 0; |
| cmd.DW58.EncCost16x8 = 0x73C; |
| //DW59 |
| cmd.DW59.EncCost8x8 = 0x365; |
| cmd.DW59.EncCost4x4 = 0xDC9; |
| //DW60 |
| cmd.DW60.FrameCountProbabilityRefFrameCost_0 = 516; |
| cmd.DW60.FrameCountProbabilityRefFrameCost_1 = 106; |
| //DW61 |
| cmd.DW61.FrameCountProbabilityRefFrameCost_2 = 2407; |
| cmd.DW61.FrameCountProbabilityRefFrameCost_3 = 2409; |
| //DW62 |
| switch (m_pFramePositionInGop) |
| { |
| case 1: |
| cmd.DW62.AverageQPOfLastRefFrame = VP8_QUANT_DC_G10[m_averageKeyFrameQp]; |
| cmd.DW62.AverageQPOfGoldRefFrame = cmd.DW62.AverageQPOfLastRefFrame; |
| cmd.DW62.AverageQPOfAltRefFrame = cmd.DW62.AverageQPOfLastRefFrame; |
| break; |
| case 2: |
| cmd.DW62.AverageQPOfLastRefFrame = VP8_QUANT_DC_G10[m_averagePFrameQp]; |
| cmd.DW62.AverageQPOfGoldRefFrame = VP8_QUANT_DC_G10[m_averageKeyFrameQp]; |
| cmd.DW62.AverageQPOfAltRefFrame = cmd.DW62.AverageQPOfGoldRefFrame; |
| break; |
| case 3: |
| cmd.DW62.AverageQPOfLastRefFrame = VP8_QUANT_DC_G10[m_averagePFrameQp]; |
| cmd.DW62.AverageQPOfGoldRefFrame = VP8_QUANT_DC_G10[m_averagePFrameQp]; |
| cmd.DW62.AverageQPOfAltRefFrame = VP8_QUANT_DC_G10[m_averageKeyFrameQp]; |
| break; |
| default: |
| cmd.DW62.AverageQPOfLastRefFrame = VP8_QUANT_DC_G10[m_averagePFrameQp]; |
| cmd.DW62.AverageQPOfGoldRefFrame = cmd.DW62.AverageQPOfLastRefFrame; |
| cmd.DW62.AverageQPOfAltRefFrame = cmd.DW62.AverageQPOfLastRefFrame; |
| break; |
| } |
| |
| //DW63 |
| cmd.DW63.Intra4x4NoDCPenaltySegment0 = VP8_COST_TABLE_G10[usQp_Seg0][6]; |
| cmd.DW63.Intra4x4NoDCPenaltySegment1 = VP8_COST_TABLE_G10[usQp_Seg1][6]; |
| cmd.DW63.Intra4x4NoDCPenaltySegment2 = VP8_COST_TABLE_G10[usQp_Seg2][6]; |
| cmd.DW63.Intra4x4NoDCPenaltySegment3 = VP8_COST_TABLE_G10[usQp_Seg3][6]; |
| //DW64 |
| cmd.DW64.Value = VP8_COST_TABLE_G10[usQp_Seg1][0]; |
| //DW65 |
| cmd.DW65.Value = VP8_COST_TABLE_G10[usQp_Seg1][1]; |
| //DW66 |
| cmd.DW66.Value = VP8_COST_TABLE_G10[usQp_Seg1][2]; |
| //DW67 |
| cmd.DW67.Value = VP8_COST_TABLE_G10[usQp_Seg1][3]; |
| //DW68 |
| cmd.DW68.Value = VP8_COST_TABLE_G10[usQp_Seg1][4]; |
| //DW69 |
| cmd.DW69.Value = VP8_COST_TABLE_G10[usQp_Seg2][0]; |
| //DW70 |
| cmd.DW70.Value = VP8_COST_TABLE_G10[usQp_Seg2][1]; |
| //DW71 |
| cmd.DW71.Value = VP8_COST_TABLE_G10[usQp_Seg2][2]; |
| //DW72 |
| cmd.DW72.Value = VP8_COST_TABLE_G10[usQp_Seg2][3]; |
| //DW73 |
| cmd.DW73.Value = VP8_COST_TABLE_G10[usQp_Seg2][4]; |
| //DW74 |
| cmd.DW74.Value = VP8_COST_TABLE_G10[usQp_Seg3][0]; |
| //DW75 |
| cmd.DW75.Value = VP8_COST_TABLE_G10[usQp_Seg3][1]; |
| //DW76 |
| cmd.DW76.Value = VP8_COST_TABLE_G10[usQp_Seg3][2]; |
| //DW77 |
| cmd.DW77.Value = VP8_COST_TABLE_G10[usQp_Seg3][3]; |
| //DW78 |
| cmd.DW78.Value = VP8_COST_TABLE_G10[usQp_Seg3][4]; |
| //DW79 |
| cmd.DW79.NewMVSkipThresholdSegment0 = VP8_NewMVSkipThreshold_G10[usQp_Seg0]; |
| cmd.DW79.NewMVSkipThresholdSegment1 = VP8_NewMVSkipThreshold_G10[usQp_Seg1]; |
| //DW80 |
| cmd.DW80.NewMVSkipThresholdSegment2 = VP8_NewMVSkipThreshold_G10[usQp_Seg2]; |
| cmd.DW80.NewMVSkipThresholdSegment3 = VP8_NewMVSkipThreshold_G10[usQp_Seg3]; |
| |
| //setup binding table index entries |
| cmd.DW81.PerMbOutputDataSurfaceBTI = CODECHAL_VP8_MBENC_PER_MB_OUT_G10; |
| cmd.DW82.CurrentPictureYSurfaceBTI = CODECHAL_VP8_MBENC_CURR_Y_G10; |
| cmd.DW83.CurrentPictureInterleavedUVSurfaceBTI = CODECHAL_VP8_MBENC_CURR_Y_G10; |
| cmd.DW84.HMEMVDataSurfaceBTI = CODECHAL_VP8_MBENC_MV_DATA_FROM_ME_G10; |
| cmd.DW85.MVDataSurfaceBTI = CODECHAL_VP8_MBENC_IND_MV_DATA_G10; |
| cmd.DW86.MbCountPerReferenceFrameBTI = CODECHAL_VP8_MBENC_REF_MB_COUNT_G10; |
| cmd.DW87.VMEInterPredictionBTI = CODECHAL_VP8_MBENC_INTER_PRED_G10; |
| cmd.DW88.ActiveRef1BTI = CODECHAL_VP8_MBENC_REF1_PIC_G10; |
| cmd.DW89.ActiveRef2BTI = CODECHAL_VP8_MBENC_REF2_PIC_G10; |
| cmd.DW90.ActiveRef3BTI = CODECHAL_VP8_MBENC_REF3_PIC_G10; |
| cmd.DW91.PerMbQuantDataBTI = CODECHAL_VP8_MBENC_P_PER_MB_QUANT_G10; |
| cmd.DW92.SegmentMapBTI = CODECHAL_VP8_MBENC_SEGMENTATION_MAP_G10; |
| cmd.DW93.InterPredictionDistortionBTI = CODECHAL_VP8_MBEBC_INTER_PRED_DISTORTION_G10; |
| cmd.DW94.HistogramBTI = CODECHAL_VP8_MBENC_HISTOGRAM_G10; |
| cmd.DW95.PredMVDataBTI = CODECHAL_VP8_MBEBC_PER_MV_DATA_G10; |
| cmd.DW96.ModeCostUpdateBTI = CODECHAL_VP8_MBENC_MODE_COST_UPDATE_G10; |
| cmd.DW97.KernelDebugDumpBTI = CODECHAL_VP8_MBENC_P_VME_DEBUG_STREAMOUT_G10; |
| |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(params->pKernelState->m_dshRegion.AddData( |
| &cmd, |
| params->pKernelState->dwCurbeOffset, |
| sizeof(cmd))); |
| } |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::SetMeCurbe(struct CodechalVp8MeCurbeParams* params) |
| { |
| struct MediaObjectVp8MeStaticDataG10 cmd; |
| PCODEC_VP8_ENCODE_SEQUENCE_PARAMS seqParams; |
| PMHW_STATE_HEAP_INTERFACE stateHeapInterface; |
| CODECHAL_MEDIA_STATE_TYPE encMediaStateType; |
| uint8_t meMode, meMethod, tableIdx; |
| uint32_t scaleFactor; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(m_hwInterface->GetRenderInterface()); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pSeqParams); |
| |
| stateHeapInterface = |
| m_hwInterface->GetRenderInterface()->m_stateHeapInterface; |
| CODECHAL_ENCODE_CHK_NULL_RETURN(stateHeapInterface); |
| |
| seqParams = params->pSeqParams; |
| |
| MOS_ZeroMemory(&cmd, sizeof(cmd)); |
| |
| meMode = params->b16xMeEnabled ? (params->b16xME ? CODECHAL_ENCODE_ME16X_BEFORE_ME4X : CODECHAL_ENCODE_ME4X_AFTER_ME16X) : CODECHAL_ENCODE_ME4X_ONLY; |
| scaleFactor = (meMode == CODECHAL_ENCODE_ME16X_BEFORE_ME4X) ? 16 : 4; |
| encMediaStateType = params->b16xME ? CODECHAL_MEDIA_STATE_16X_ME : CODECHAL_MEDIA_STATE_4X_ME; |
| |
| CODECHAL_ENCODE_ASSERT(seqParams->TargetUsage < NUM_TARGET_USAGE_MODES); |
| |
| cmd.DW1.MaxNumMVs = 0x10; |
| cmd.DW1.BiWeight = 0; |
| |
| cmd.DW2.MaxNumSU = 57; |
| // For Enc_P kernel MaxLenSP is supposed to have the following values |
| // Normal mode = 25 |
| // Perf mode = 9 |
| // Quality mode = 57 |
| // For ME kernel, MaxLenSP is supposed to have the value 57 for all modes |
| cmd.DW2.MaxLenSP = 57; |
| |
| cmd.DW3.SubMbPartMask = 0x77; |
| cmd.DW3.InterSAD = 0; |
| cmd.DW3.IntraSAD = 0; |
| cmd.DW3.BMEDisableFBR = 1; |
| cmd.DW3.SubPelMode = 3; |
| |
| cmd.DW4.PictureHeightMinus1 = CODECHAL_GET_HEIGHT_IN_MACROBLOCKS(params->dwFrameFieldHeight / scaleFactor) - 1; |
| cmd.DW4.PictureWidth = CODECHAL_GET_HEIGHT_IN_MACROBLOCKS(params->dwFrameWidth / scaleFactor); |
| |
| cmd.DW4.PictureHeightMinus1 = cmd.DW4.PictureHeightMinus1 < 2 ? 2 : cmd.DW4.PictureHeightMinus1; |
| cmd.DW4.PictureWidth = cmd.DW4.PictureWidth < 3 ? 3 : cmd.DW4.PictureWidth; |
| |
| cmd.DW5.RefHeight = 40; |
| cmd.DW5.RefWidth = 48; |
| |
| cmd.DW6.MEModes = meMode; |
| cmd.DW6.SuperCombineDist = (params->ucKernelMode == encodeNormalMode) ? 5 : ((params->ucKernelMode == encodePerformanceMode) ? 0 : 1); |
| cmd.DW6.MaxVmvR = 0x7fc; /* For VP8, Luma MVs in the range -2046 to +2046 (1/8 pel) */ |
| |
| cmd.DW13.NumRefIdxL0MinusOne = VP8_NUM_REFS_G10[params->pPicParams->ref_frame_ctrl] - 1; |
| cmd.DW13.NumRefIdxL1MinusOne = 0; |
| |
| tableIdx = 0; /* Only P pictures in VP8, no B pictures */ |
| meMethod = (params->ucKernelMode == encodeNormalMode) ? 6 : 4; |
| status = MOS_SecureMemcpy((uint32_t*)(&cmd.SpDelta), |
| 14 * sizeof(uint32_t), |
| m_encodeSearchPath[tableIdx][meMethod], |
| 14 * sizeof(uint32_t)); |
| |
| if (status != MOS_STATUS_SUCCESS) |
| { |
| CODECHAL_ENCODE_ASSERTMESSAGE("Failed to copy memory."); |
| return status; |
| } |
| cmd.DW32.VP8MeMVOutputDataBTI = CODECHAL_VP8_ME_MV_DATA_G10; |
| cmd.DW33.VP8MeMVInputDataBTI = CODECHAL_VP8_16xME_MV_DATA_G10; |
| cmd.DW34.VP8MeDistortionBTI = CODECHAL_VP8_ME_DISTORTION_G10; |
| cmd.DW35.VP8MeMinDistBrcBTI = CODECHAL_VP8_ME_MIN_DIST_BRC_DATA_G10; |
| cmd.DW36.ForwardRefBTI = CODECHAL_VP8_VME_INTER_PRED_G10; |
| |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(m_meKernelState.m_dshRegion.AddData( |
| &cmd, |
| m_meKernelState.dwCurbeOffset, |
| sizeof(cmd))); |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::SetMpuCurbe(struct CodechalVp8MpuCurbeParams* params) |
| { |
| PCODEC_VP8_ENCODE_PIC_PARAMS picParams; |
| PCODEC_VP8_ENCODE_SEQUENCE_PARAMS seqParams; |
| PCODEC_VP8_ENCODE_QUANT_DATA vp8QuantData; |
| PMHW_STATE_HEAP_INTERFACE stateHeapInterface; |
| struct MediaObjectVp8MpuFhbStaticDataG10 cmd; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(m_hwInterface->GetRenderInterface()); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pPicParams); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pSeqParams); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pVp8QuantData); |
| |
| stateHeapInterface = |
| m_hwInterface->GetRenderInterface()->m_stateHeapInterface; |
| CODECHAL_ENCODE_CHK_NULL_RETURN(stateHeapInterface); |
| |
| picParams = params->pPicParams; |
| seqParams = params->pSeqParams; |
| vp8QuantData = params->pVp8QuantData; |
| |
| MOS_ZeroMemory(&cmd, sizeof(cmd)); |
| |
| cmd.DW0.FrameWidth = (seqParams->FrameWidth + 15) & (~0xF); /* Kernel require MB boundary aligned dimensions */ |
| cmd.DW0.FrameHeight = (seqParams->FrameHeight + 15) & (~0xF); |
| |
| cmd.DW1.FrameType = picParams->frame_type; |
| cmd.DW1.Version = picParams->version; |
| cmd.DW1.ShowFrame = picParams->show_frame; |
| cmd.DW1.HorizontalScaleCode = seqParams->FrameWidthScale; |
| cmd.DW1.VerticalScaleCode = seqParams->FrameHeightScale; |
| cmd.DW1.ColorSpaceType = picParams->color_space; |
| cmd.DW1.ClampType = picParams->clamping_type; |
| cmd.DW1.PartitionNumL2 = picParams->CodedCoeffTokenPartition; |
| cmd.DW1.EnableSegmentation = picParams->segmentation_enabled; |
| cmd.DW1.SegMapUpdate = |
| (picParams->segmentation_enabled) ? picParams->update_mb_segmentation_map : 0; |
| cmd.DW1.SegmentationFeatureUpdate = picParams->update_segment_feature_data; // setup whenever segmentation is 1 |
| cmd.DW1.SegmentationFeatureMode = 1; // delta mode |
| cmd.DW1.LoopFilterType = picParams->filter_type; |
| cmd.DW1.SharpnessLevel = picParams->sharpness_level; |
| cmd.DW1.LoopFilterAdjustmentOn = picParams->loop_filter_adj_enable; |
| cmd.DW1.MBNoCoeffiscientSkip = picParams->mb_no_coeff_skip; |
| |
| // DDI spec is not mapping to codechal directly. It should be mapping as below |
| if (picParams->refresh_golden_frame == 1) |
| { |
| cmd.DW1.GoldenReferenceCopyFlag = 3; |
| } |
| else { |
| cmd.DW1.GoldenReferenceCopyFlag = picParams->copy_buffer_to_golden; |
| } |
| if (picParams->refresh_alternate_frame == 1) |
| { |
| cmd.DW1.AlternateReferenceCopyFlag = 3; |
| } |
| else { |
| cmd.DW1.AlternateReferenceCopyFlag = picParams->copy_buffer_to_alternate; |
| } |
| |
| cmd.DW1.LastFrameUpdate = picParams->refresh_last; |
| cmd.DW1.SignBiasGolden = picParams->sign_bias_golden; |
| cmd.DW1.SignBiasAltRef = picParams->sign_bias_alternate; |
| cmd.DW1.RefreshEntropyP = picParams->refresh_entropy_probs; |
| |
| cmd.DW2.LoopFilterLevel = picParams->version > 1 ? 0 : picParams->loop_filter_level[0]; |
| cmd.DW2.Qindex = vp8QuantData->QIndex[0]; |
| cmd.DW2.Y1DCQindex = vp8QuantData->QIndexDelta[VP8_QINDEX_Y1_DC]; |
| cmd.DW2.Y2DCQindex = vp8QuantData->QIndexDelta[VP8_QINDEX_Y2_DC]; |
| |
| cmd.DW3.Y2ACQindex = vp8QuantData->QIndexDelta[VP8_QINDEX_Y2_AC]; |
| cmd.DW3.UVDCQindex = vp8QuantData->QIndexDelta[VP8_QINDEX_UV_DC]; |
| cmd.DW3.UVACQindex = vp8QuantData->QIndexDelta[VP8_QINDEX_UV_AC]; |
| cmd.DW3.FeatureData0Segment0 = vp8QuantData->QIndex[0]; |
| |
| cmd.DW4.FeatureData0Segment1 = vp8QuantData->QIndex[1]; |
| cmd.DW4.FeatureData0Segment2 = vp8QuantData->QIndex[2]; |
| cmd.DW4.FeatureData0Segment3 = vp8QuantData->QIndex[3]; |
| cmd.DW4.FeatureData1Segment0 = picParams->loop_filter_level[0]; |
| |
| cmd.DW5.FeatureData1Segment1 = picParams->loop_filter_level[1]; |
| cmd.DW5.FeatureData1Segment2 = picParams->loop_filter_level[2]; |
| cmd.DW5.FeatureData1Segment3 = picParams->loop_filter_level[3]; |
| cmd.DW5.RefLFDelta0 = picParams->ref_lf_delta[0]; |
| |
| cmd.DW6.RefLFDelta1 = picParams->ref_lf_delta[1]; |
| cmd.DW6.RefLFDelta2 = picParams->ref_lf_delta[2]; |
| cmd.DW6.RefLFDelta3 = picParams->ref_lf_delta[3]; |
| cmd.DW6.ModeLFDelta0 = picParams->mode_lf_delta[0]; |
| |
| cmd.DW7.ModeLFDelta1 = picParams->mode_lf_delta[1]; |
| cmd.DW7.ModeLFDelta2 = picParams->mode_lf_delta[2]; |
| cmd.DW7.ModeLFDelta3 = picParams->mode_lf_delta[3]; |
| cmd.DW7.MCFilterSelect = picParams->version > 0 ? 1 : 0; |
| cmd.DW7.ChromaFullPixelMCFilterMode = picParams->version < 3 ? 0 : 1; |
| cmd.DW7.MaxNumPakPasses = m_hwInterface->GetMfxInterface()->GetBrcNumPakPasses(); // Multi-Pass BRC |
| cmd.DW7.ForcedTokenSurfaceRead = 1; |
| |
| cmd.DW7.ModecostEnableFlag = 1; |
| cmd.DW8.NumTLevels = seqParams->NumTemporalLayersMinus1 + 1; |
| cmd.DW8.TemporalLayerID = picParams->temporal_id; |
| |
| cmd.DW12.HistogramBTI = CODECHAL_VP8_MPU_FHB_HISTOGRAM_G10; |
| cmd.DW13.ReferenceModeProbabilityBTI = CODECHAL_VP8_MPU_FHB_REF_MODE_PROBABILITY_G10; |
| cmd.DW14.ModeProbabilityBTI = CODECHAL_VP8_MPU_FHB_CURR_MODE_PROBABILITY_G10; |
| cmd.DW15.ReferenceTokenProbabilityBTI = CODECHAL_VP8_MPU_FHB_REF_TOKEN_PROBABILITY_G10; |
| cmd.DW16.TokenProbabilityBTI = CODECHAL_VP8_MPU_FHB_CURR_TOKEN_PROBABILITY_G10; |
| cmd.DW17.FrameHeaderBitstreamBTI = CODECHAL_VP8_MPU_FHB_HEADER_BITSTREAM_G10; |
| cmd.DW18.HeaderMetaDataBTI = CODECHAL_VP8_MPU_FHB_HEADER_METADATA_G10; |
| cmd.DW19.PictureStateBTI = CODECHAL_VP8_MPU_FHB_PICTURE_STATE_G10; |
| cmd.DW20.MPUBitStreamBTI = CODECHAL_VP8_MPU_FHB_MPU_BITSTREAM_G10; |
| cmd.DW21.TokenBitsDataBTI = CODECHAL_VP8_MPU_FHB_TOKEN_BITS_DATA_TABLE_G10; |
| cmd.DW22.KernelDebugDumpBTI = CODECHAL_VP8_MPU_FHB_VME_DEBUG_STREAMOUT_G10; |
| cmd.DW23.EntropyCostBTI = CODECHAL_VP8_MPU_FHB_ENTROPY_COST_TABLE_G10; |
| cmd.DW24.ModeCostUpdateBTI = CODECHAL_VP8_MPU_MODE_COST_UPDATE_G10; |
| |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(m_mpuKernelState.m_dshRegion.AddData( |
| &cmd, |
| m_mpuKernelState.dwCurbeOffset, |
| sizeof(cmd))); |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::SendMpuSurfaces( |
| PMOS_COMMAND_BUFFER cmdBuffer, |
| struct CodechalVp8MpuSurfaceParams* params) |
| { |
| uint32_t size; |
| PMHW_KERNEL_STATE kernelState; |
| CODECHAL_SURFACE_CODEC_PARAMS surfaceCodecParams; |
| struct CodechalBindingTableVp8Mpu* vp8MpuBindingTable; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_FUNCTION_ENTER; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(cmdBuffer); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pKernelState); |
| |
| kernelState = params->pKernelState; |
| vp8MpuBindingTable = &m_mpuBindingTable; |
| |
| // Histogram |
| size = params->dwHistogramSize; |
| MOS_ZeroMemory(&surfaceCodecParams, sizeof(CODECHAL_SURFACE_CODEC_PARAMS)); |
| surfaceCodecParams.dwSize = size; |
| surfaceCodecParams.presBuffer = params->presHistogram; |
| surfaceCodecParams.dwBindingTableOffset = vp8MpuBindingTable->dwVp8MpuHistogram; |
| surfaceCodecParams.bRenderTarget = true; |
| surfaceCodecParams.bRawSurface = true; |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalSetRcsSurfaceState( |
| m_hwInterface, |
| cmdBuffer, |
| &surfaceCodecParams, |
| kernelState)); |
| |
| // Reference mode probability |
| size = params->dwModeProbabilitySize; |
| MOS_ZeroMemory(&surfaceCodecParams, sizeof(CODECHAL_SURFACE_CODEC_PARAMS)); |
| surfaceCodecParams.dwSize = size; |
| surfaceCodecParams.presBuffer = params->presRefModeProbability; |
| surfaceCodecParams.dwBindingTableOffset = vp8MpuBindingTable->dwVp8MpuReferenceModeProbability; |
| surfaceCodecParams.bRenderTarget = true; |
| surfaceCodecParams.bRawSurface = true; |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalSetRcsSurfaceState( |
| m_hwInterface, |
| cmdBuffer, |
| &surfaceCodecParams, |
| kernelState)); |
| |
| // Mode probability |
| size = params->dwModeProbabilitySize; |
| MOS_ZeroMemory(&surfaceCodecParams, sizeof(CODECHAL_SURFACE_CODEC_PARAMS)); |
| surfaceCodecParams.dwSize = size; |
| //surfaceCodecParams.bMediaBlockRW = true; |
| surfaceCodecParams.presBuffer = params->presModeProbability; |
| surfaceCodecParams.dwBindingTableOffset = vp8MpuBindingTable->dwVp8MpuModeProbability; |
| surfaceCodecParams.bRenderTarget = true; |
| surfaceCodecParams.bRawSurface = true; |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalSetRcsSurfaceState( |
| m_hwInterface, |
| cmdBuffer, |
| &surfaceCodecParams, |
| kernelState)); |
| |
| // Reference Token probability |
| size = params->dwTokenProbabilitySize; |
| MOS_ZeroMemory(&surfaceCodecParams, sizeof(CODECHAL_SURFACE_CODEC_PARAMS)); |
| surfaceCodecParams.dwSize = size; |
| //surfaceCodecParams.bMediaBlockRW = true; |
| surfaceCodecParams.presBuffer = params->presRefTokenProbability; |
| surfaceCodecParams.dwBindingTableOffset = vp8MpuBindingTable->dwVp8MpuReferenceTokenProbability; |
| surfaceCodecParams.bRenderTarget = true; |
| surfaceCodecParams.bRawSurface = true; |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalSetRcsSurfaceState( |
| m_hwInterface, |
| cmdBuffer, |
| &surfaceCodecParams, |
| kernelState)); |
| |
| // Token probability |
| size = params->dwTokenProbabilitySize; |
| MOS_ZeroMemory(&surfaceCodecParams, sizeof(CODECHAL_SURFACE_CODEC_PARAMS)); |
| surfaceCodecParams.dwSize = size; |
| //surfaceCodecParams.bMediaBlockRW = true; |
| surfaceCodecParams.presBuffer = params->presTokenProbability; |
| surfaceCodecParams.dwBindingTableOffset = vp8MpuBindingTable->dwVp8MpuTokenProbability; |
| surfaceCodecParams.bRenderTarget = true; |
| surfaceCodecParams.bRawSurface = true; |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalSetRcsSurfaceState( |
| m_hwInterface, |
| cmdBuffer, |
| &surfaceCodecParams, |
| kernelState)); |
| |
| // Frame header |
| size = params->dwFrameHeaderSize; |
| MOS_ZeroMemory(&surfaceCodecParams, sizeof(CODECHAL_SURFACE_CODEC_PARAMS)); |
| surfaceCodecParams.dwSize = size; |
| //surfaceCodecParams.bMediaBlockRW = true; |
| surfaceCodecParams.presBuffer = params->presFrameHeader; |
| surfaceCodecParams.dwBindingTableOffset = vp8MpuBindingTable->dwVp8MpuFrameHeaderBitstream; |
| surfaceCodecParams.bRenderTarget = true; |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalSetRcsSurfaceState( |
| m_hwInterface, |
| cmdBuffer, |
| &surfaceCodecParams, |
| kernelState)); |
| |
| // Header Metadata |
| size = params->dwHeaderMetadataSize; |
| MOS_ZeroMemory(&surfaceCodecParams, sizeof(CODECHAL_SURFACE_CODEC_PARAMS)); |
| surfaceCodecParams.dwSize = size; |
| surfaceCodecParams.dwOffset = params->dwHeaderMetaDataOffset; |
| //surfaceCodecParams.bMediaBlockRW = true; |
| surfaceCodecParams.presBuffer = params->presHeaderMetadata; |
| surfaceCodecParams.dwBindingTableOffset = vp8MpuBindingTable->dwVp8MpuHeaderMetaData; |
| surfaceCodecParams.bRenderTarget = true; |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalSetRcsSurfaceState( |
| m_hwInterface, |
| cmdBuffer, |
| &surfaceCodecParams, |
| kernelState)); |
| |
| // Picture state |
| size = mhw_vdbox_mfx_g10_X::MFX_VP8_PIC_STATE_CMD::byteSize; |
| MOS_ZeroMemory(&surfaceCodecParams, sizeof(CODECHAL_SURFACE_CODEC_PARAMS)); |
| surfaceCodecParams.dwSize = size; |
| surfaceCodecParams.presBuffer = params->presPictureState; |
| surfaceCodecParams.dwBindingTableOffset = vp8MpuBindingTable->dwVp8MpuPictureState; |
| surfaceCodecParams.bRenderTarget = true; |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalSetRcsSurfaceState( |
| m_hwInterface, |
| cmdBuffer, |
| &surfaceCodecParams, |
| kernelState)); |
| |
| // Mpu Bitstream |
| size = params->dwMpuBitstreamSize; |
| MOS_ZeroMemory(&surfaceCodecParams, sizeof(CODECHAL_SURFACE_CODEC_PARAMS)); |
| surfaceCodecParams.dwSize = size; |
| //surfaceCodecParams.bMediaBlockRW = true; |
| surfaceCodecParams.presBuffer = params->presMpuBitstream; |
| surfaceCodecParams.dwBindingTableOffset = vp8MpuBindingTable->dwVp8MpuMpuBitstream; |
| surfaceCodecParams.bRenderTarget = true; |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalSetRcsSurfaceState( |
| m_hwInterface, |
| cmdBuffer, |
| &surfaceCodecParams, |
| kernelState)); |
| |
| // Token bits Data Surface |
| size = params->dwTokenBitsDataSize; |
| MOS_ZeroMemory(&surfaceCodecParams, sizeof(CODECHAL_SURFACE_CODEC_PARAMS)); |
| surfaceCodecParams.dwSize = size; |
| surfaceCodecParams.presBuffer = params->presTokenBitsData; |
| surfaceCodecParams.dwBindingTableOffset = vp8MpuBindingTable->dwVp8MpuTokenBitsData; |
| surfaceCodecParams.bRenderTarget = true; |
| surfaceCodecParams.bRawSurface = true; |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalSetRcsSurfaceState( |
| m_hwInterface, |
| cmdBuffer, |
| &surfaceCodecParams, |
| kernelState)); |
| |
| // Entropy cost table |
| size = params->dwEntropyCostTableSize; |
| MOS_ZeroMemory(&surfaceCodecParams, sizeof(CODECHAL_SURFACE_CODEC_PARAMS)); |
| surfaceCodecParams.dwSize = size; |
| //surfaceCodecParams.bMediaBlockRW = true; |
| surfaceCodecParams.presBuffer = params->presEntropyCostTable; |
| surfaceCodecParams.dwBindingTableOffset = vp8MpuBindingTable->dwVp8MpuEntropyCost; |
| surfaceCodecParams.bRenderTarget = true; |
| surfaceCodecParams.bRawSurface = true; |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalSetRcsSurfaceState( |
| m_hwInterface, |
| cmdBuffer, |
| &surfaceCodecParams, |
| kernelState)); |
| |
| //Mode Cost Update Surface |
| size = sizeof(uint32_t)* 16; |
| MOS_ZeroMemory(&surfaceCodecParams, sizeof(CODECHAL_SURFACE_CODEC_PARAMS)); |
| surfaceCodecParams.dwSize = size; |
| surfaceCodecParams.presBuffer = params->presModeCostUpdateBuffer; |
| surfaceCodecParams.dwBindingTableOffset = vp8MpuBindingTable->dwVp8MpuModeCostUpdateSurface; |
| surfaceCodecParams.bRenderTarget = true; |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalSetRcsSurfaceState( |
| m_hwInterface, |
| cmdBuffer, |
| &surfaceCodecParams, |
| kernelState)); |
| |
| // Kernel Debug Dump surface |
| if (params->bVMEKernelDump) |
| { |
| size = params->dwKernelDumpSize; |
| MOS_ZeroMemory(&surfaceCodecParams, sizeof(CODECHAL_SURFACE_CODEC_PARAMS)); |
| surfaceCodecParams.presBuffer = params->presVmeKernelDumpBuffer; |
| surfaceCodecParams.dwSize = size; |
| surfaceCodecParams.dwBindingTableOffset = vp8MpuBindingTable->dwVp8MpuKernelDebugDump; |
| surfaceCodecParams.bRenderTarget = true; |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(CodecHalSetRcsSurfaceState( |
| m_hwInterface, |
| cmdBuffer, |
| &surfaceCodecParams, |
| kernelState)); |
| } |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::SetTpuCurbe(struct CodechalVp8TpuCurbeParams* params) |
| { |
| PCODEC_VP8_ENCODE_PIC_PARAMS picParams; |
| PCODEC_VP8_ENCODE_SEQUENCE_PARAMS seqParams; |
| PCODEC_VP8_ENCODE_QUANT_DATA vp8QuantData; |
| PMHW_STATE_HEAP_INTERFACE stateHeapInterface; |
| struct MediaObjectVp8TpuFhbStaticDataG10 cmd; |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_CHK_NULL_RETURN(m_hwInterface->GetRenderInterface()); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pPicParams); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pSeqParams); |
| CODECHAL_ENCODE_CHK_NULL_RETURN(params->pVp8QuantData); |
| |
| stateHeapInterface = |
| m_hwInterface->GetRenderInterface()->m_stateHeapInterface; |
| CODECHAL_ENCODE_CHK_NULL_RETURN(stateHeapInterface); |
| |
| picParams = params->pPicParams; |
| seqParams = params->pSeqParams; |
| vp8QuantData = params->pVp8QuantData; |
| |
| MOS_ZeroMemory(&cmd, sizeof(cmd)); |
| |
| cmd.DW0.MBsInFrame = (uint32_t)params->wPicWidthInMb * (uint32_t)params->wFieldFrameHeightInMb; |
| |
| cmd.DW1.FrameType = picParams->frame_type; |
| cmd.DW1.EnableSegmentation = picParams->segmentation_enabled; |
| cmd.DW1.RebinarizationFrameHdr = (params->bRebinarizationFrameHdr ? 1 : 0); |
| |
| cmd.DW1.RefreshEntropyP = picParams->refresh_entropy_probs; |
| cmd.DW1.MBNoCoeffiscientSkip = picParams->mb_no_coeff_skip; |
| |
| cmd.DW3.MaxQP = picParams->ClampQindexHigh; |
| cmd.DW3.MinQP = picParams->ClampQindexLow; |
| |
| cmd.DW4.LoopFilterLevelSegment0 = picParams->loop_filter_level[0]; |
| cmd.DW4.LoopFilterLevelSegment1 = picParams->loop_filter_level[1]; |
| cmd.DW4.LoopFilterLevelSegment2 = picParams->loop_filter_level[2]; |
| cmd.DW4.LoopFilterLevelSegment3 = picParams->loop_filter_level[3]; |
| |
| cmd.DW5.QuantizationIndexSegment0 = vp8QuantData->QIndex[0]; |
| cmd.DW5.QuantizationIndexSegment1 = vp8QuantData->QIndex[1]; |
| cmd.DW5.QuantizationIndexSegment2 = vp8QuantData->QIndex[2]; |
| cmd.DW5.QuantizationIndexSegment3 = vp8QuantData->QIndex[3]; |
| |
| // This setup is only used for CQP = 1 << 8 (15:8 bits) |
| // For BRC, this will be overwritten after Pak execution |
| cmd.DW6.PakPassNum = m_hwInterface->GetMfxInterface()->GetBrcNumPakPasses() << 8; |
| |
| if (params->bAdaptiveRePak) |
| { |
| cmd.DW7.SkipCostDeltaThreshold = 100; |
| cmd.DW7.TokenCostDeltaThreshold = 50; |
| } |
| else |
| { |
| cmd.DW7.SkipCostDeltaThreshold = 0; // change to 1 when temporal scalability is enabled |
| cmd.DW7.TokenCostDeltaThreshold = 0; // change to 1 when temporal scalability is enabled |
| } |
| |
| cmd.DW12.PakTokenStatisticsBTI = CODECHAL_VP8_TPU_FHB_PAK_TOKEN_STATISTICS_G10; |
| cmd.DW13.TokenUpdateFlagsBTI = CODECHAL_VP8_TPU_FHB_TOKEN_UPDATE_FLAGS_G10; |
| cmd.DW14.EntropyCostTableBTI = CODECHAL_VP8_TPU_FHB_ENTROPY_COST_TABLE_G10; |
| cmd.DW15.FrameHeaderBitstreamBTI = CODECHAL_VP8_TPU_FHB_HEADER_BITSTREAM_G10; |
| cmd.DW16.DefaultTokenProbabilityBTI = CODECHAL_VP8_TPU_FHB_DEFAULT_TOKEN_PROBABILITY_G10; |
| cmd.DW17.PictureStateBTI = CODECHAL_VP8_TPU_FHB_PICTURE_STATE_G10; |
| cmd.DW18.MpuCurbeDataBTI = CODECHAL_VP8_TPU_FHB_MPU_CURBE_DATA_G10; |
| cmd.DW19.HeaderMetaDataBTI = CODECHAL_VP8_TPU_FHB_HEADER_METADATA_G10; |
| cmd.DW20.TokenProbabilityBTI = CODECHAL_VP8_TPU_FHB_TOKEN_PROBABILITY_G10; |
| cmd.DW21.PakHardwareTokenProbabilityPass1BTI = CODECHAL_VP8_TPU_FHB_PAK_HW_PASS1_PROBABILITY_G10; |
| cmd.DW22.KeyFrameTokenProbabilityBTI = CODECHAL_VP8_TPU_FHB_KEY_TOKEN_PROBABILITY_G10; |
| cmd.DW23.UpdatedTokenProbabilityBTI = CODECHAL_VP8_TPU_FHB_UPDATED_TOKEN_PROBABILITY_G10; |
| cmd.DW24.PakHardwareTokenProbabilityPass2BTI = CODECHAL_VP8_TPU_FHB_PAK_HW_PASS2_PROBABILITY_G10; |
| cmd.DW25.KernelDebugDumpBTI = CODECHAL_VP8_TPU_FHB_VME_DEBUG_STREAMOUT_G10; |
| cmd.DW26.RepakDecisionSurfaceBTI = CODECHAL_VP8_TPU_FHB_REPAK_DECISION_G10; |
| |
| CODECHAL_ENCODE_CHK_STATUS_RETURN(m_tpuKernelState.m_dshRegion.AddData( |
| &cmd, |
| m_tpuKernelState.dwCurbeOffset, |
| sizeof(cmd))); |
| |
| return status; |
| } |
| |
| MOS_STATUS CodechalEncodeVp8G10::CalMaxLevelRatioForTL( |
| uint16_t *framesPer100Sec, |
| uint32_t *targetBitRate, |
| uint32_t numTemporalLayersMinus1, |
| uint32_t *tempBitRate) |
| { |
| MOS_STATUS status = MOS_STATUS_SUCCESS; |
| |
| CODECHAL_ENCODE_FUNCTION_ENTER; |
| |
| uint32_t ti, tj; |
| uint32_t numLevel[NAX_NUM_TEMPORAL_LAYERS]; |
| uint32_t atempRatios[NAX_NUM_TEMPORAL_LAYERS]; |
| int acculateTempBitRate; |
| |
| for( ti= 0;ti < numTemporalLayersMinus1+1;ti++) |
| { |
| atempRatios[ti]= (uint32_t)framesPer100Sec[numTemporalLayersMinus1]/(uint32_t)framesPer100Sec[ti]; // it should be integer |
| } |
| |
| for( ti=0; ti < numTemporalLayersMinus1+1; ti++){ |
| numLevel[ti]= 0; |
| for( tj=0; tj < atempRatios[0]; tj++) |
| { |
| if(tj%atempRatios[ti]==0) |
| numLevel[ti] += 1; // ratio of framerate |
| } |
| } |
| |
| tempBitRate[0]= targetBitRate[0]*64/targetBitRate[numTemporalLayersMinus1]; |
| |
| acculateTempBitRate= tempBitRate[0]; |
| for (ti=1; ti < (uint32_t)numTemporalLayersMinus1; ti++) |
| { |
| tempBitRate[ti]= (targetBitRate[ti] - targetBitRate[ti-1])*64/targetBitRate[numTemporalLayersMinus1]; |
| acculateTempBitRate += tempBitRate[ti]; |
| } |
| |
| tempBitRate[numTemporalLayersMinus1]= 64-acculateTempBitRate; // The sum of tempBitRate must be 64 because this will affect the QP directly |
| |
| for( ti=0; ti<numTemporalLayersMinus1+1; ti++) |
| { |
| int tem_level; |
| if(ti==0) |
| tem_level = numLevel[0]; |
| else |
| tem_level = numLevel[ti] - numLevel[ti - 1]; |
| |
| tempBitRate[ti] = atempRatios[0] * tempBitRate[ti]/tem_level; |
| } |
| |
| return status; |
| } |