1 /* 2 * Copyright (c) 2018, Intel Corporation 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included 12 * in all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20 * OTHER DEALINGS IN THE SOFTWARE. 21 */ 22 //! 23 //! \file codechal_encode_vp8_g11.h 24 //! \brief VP8 dual-pipe encoder for GEN11 platform. 25 //! 26 27 #ifndef __CODECHAL_ENCODE_VP8_G11_H__ 28 #define __CODECHAL_ENCODE_VP8_G11_H__ 29 30 #include "codechal_encode_vp8.h" 31 #include "codechal_encode_sw_scoreboard_g11.h" 32 33 class CodechalEncodeVp8G11 : public CodechalEncodeVp8 34 { 35 public: 36 //! 37 //! \brief Constructor 38 //! 39 CodechalEncodeVp8G11( 40 CodechalHwInterface* hwInterface, 41 CodechalDebugInterface* debugInterface, 42 PCODECHAL_STANDARD_INFO standardInfo); 43 44 //! 45 //! \brief Destructor 46 //! ~CodechalEncodeVp8G11()47 ~CodechalEncodeVp8G11() {}; 48 49 void FreeResources() override; 50 51 MOS_STATUS Initialize(CodechalSetting * codecHalSettings) override; 52 53 void ResizeOnResChange() override; 54 MOS_STATUS ExecuteKernelFunctions() override; 55 56 protected: 57 CodechalEncodeSwScoreboard* m_swScoreboardState = nullptr; //!< pointer to SW scoreboard init state. 58 59 60 61 MOS_STATUS InitKernelStateHelper(struct CodechalEncodeVp8InitKernelStateParams* params); 62 63 MOS_STATUS InitKernelState() override; 64 65 //! 66 //! \brief Initialize kernel state for ME 67 //! 68 //! \return MOS_STATUS 69 //! MOS_STATUS_SUCCESS if success, else fail reason 70 //! 71 MOS_STATUS InitKernelStateMe(); 72 73 //! 74 //! \brief Initialize kernel state for MBENC 75 //! 76 //! \return MOS_STATUS 77 //! MOS_STATUS_SUCCESS if success, else fail reason 78 //! 79 MOS_STATUS InitKernelStateMbEnc(); 80 81 //! 82 //! \brief Initialize kernel state for BRC 83 //! 84 //! \return MOS_STATUS 85 //! MOS_STATUS_SUCCESS if success, else fail reason 86 //! 87 MOS_STATUS InitKernelStateBrc(); 88 89 //! 90 //! \brief Initialize kernel state for MPU 91 //! 92 //! \return MOS_STATUS 93 //! MOS_STATUS_SUCCESS if success, else fail reason 94 //! 95 MOS_STATUS InitKernelStateMpu(); 96 97 //! 98 //! \brief Initialize kernel state for TPU 99 //! 100 //! \return MOS_STATUS 101 //! MOS_STATUS_SUCCESS if success, else fail reason 102 //! 103 MOS_STATUS InitKernelStateTpu(); 104 105 //! 106 //! \brief Initialize kernel state for swScoreBoard 107 //! 108 //! \return MOS_STATUS 109 //! MOS_STATUS_SUCCESS if success, else fail reason 110 //! 111 MOS_STATUS InitKernelStateSwScoreboard(); 112 113 114 MOS_STATUS InitMpuTpuBuffer() override; 115 116 //! 117 //! \brief Calculate Max Level Ratio For Temporal Layers 118 //! 119 //! \param [in] framesPer100Sec 120 //! Pointer to uint32_t 121 //! \param [in] targetBitRate 122 //! Pointer to uint32_t 123 //! \param [in] numTemporalLayersMinus1 124 //! Temporal layers minus1 number 125 //! \param [in] tempBitRate 126 //! Pointer to uint32_t 127 //! 128 //! \return MOS_STATUS 129 //! MOS_STATUS_SUCCESS if success, else fail reason 130 //! 131 MOS_STATUS CalMaxLevelRatioForTL( 132 uint16_t *framesPer100Sec, 133 uint32_t *targetBitRate, 134 uint32_t numTemporalLayersMinus1, 135 uint32_t *tempBitRate); 136 137 MOS_STATUS SendMbEncSurfaces( 138 PMOS_COMMAND_BUFFER cmdBuffer, 139 struct CodechalVp8MbencSurfaceParams* params) override; 140 141 MOS_STATUS IntrDistKernel(); 142 MOS_STATUS SetIntrDistCurbe(struct CodechalVp8MbencCurbeParams* params); 143 MOS_STATUS SendIntrDistSurfaces( 144 PMOS_COMMAND_BUFFER cmdBuffer, 145 struct CodechalVp8MbencSurfaceParams* params); 146 147 MOS_STATUS InitBrcConstantBuffer(struct CodechalVp8InitBrcConstantBufferParams* params) override; 148 149 MOS_STATUS InitBrcDistortionBuffer() override; 150 151 MOS_STATUS KeyFrameUpdateMpuTpuBuffer(struct CodechalVp8UpdateMpuTpuBufferParams* params) override; 152 153 MOS_STATUS InitMBEncConstantBuffer( 154 struct CodechalVp8InitMbencConstantBufferParams* params) override; 155 156 MOS_STATUS SetBrcInitResetCurbe(struct CodechalVp8BrcInitResetCurbeParams* params) override; 157 158 MOS_STATUS SetBrcUpdateCurbe(struct CodechalVp8BrcUpdateCurbeParams* params) override; 159 160 MOS_STATUS SetMbEncCurbe(struct CodechalVp8MbencCurbeParams* params) override; 161 162 MOS_STATUS SetMeCurbe(struct CodechalVp8MeCurbeParams* params) override; 163 164 MOS_STATUS SetMpuCurbe(struct CodechalVp8MpuCurbeParams* params) override; 165 166 MOS_STATUS SetTpuCurbe(struct CodechalVp8TpuCurbeParams* params) override; 167 168 MOS_STATUS SendBrcInitResetSurfaces( 169 PMOS_COMMAND_BUFFER cmdBuffer, 170 struct CodechalVp8BrcInitResetSurfaceParams* params) override; 171 172 MOS_STATUS SendMpuSurfaces( 173 PMOS_COMMAND_BUFFER cmdBuffer, 174 struct CodechalVp8MpuSurfaceParams* params) override; 175 176 //! 177 //! \brief Get Header and Size of Kernel 178 //! 179 //! \param [in] binary 180 //! Pointer to void 181 //! \param [in] operation 182 //! Type of encode operation 183 //! \param [in] krnStateIdx 184 //! Index of Kernel State 185 //! \param [in] krnHeader 186 //! Pointer to void 187 //! \param [in] krnSize 188 //! Pointer to the kernel size 189 //! 190 //! \return MOS_STATUS 191 //! MOS_STATUS_SUCCESS if success, else fail reason 192 //! 193 static MOS_STATUS GetKernelHeaderAndSize( 194 void *binary, 195 EncOperation operation, 196 uint32_t krnStateIdx, 197 void *krnHeader, 198 uint32_t *krnSize); 199 }; 200 201 #endif //__CODECHAL_ENC_VP8_MODS_G10_H__ 202