1 /* 2 * Copyright (c) 2017-2020, 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_decode_vp9_g12.h 24 //! \brief Defines the decode interface extension for Gen12 VP9. 25 //! \details Defines all types, macros, and functions required by CodecHal for Gen12 VP9 decoding. 26 //! Definitions are not externally facing. 27 //! 28 29 #ifndef __CODECHAL_DECODE_VP9_G12_H__ 30 #define __CODECHAL_DECODE_VP9_G12_H__ 31 32 #include "codechal_decode_vp9.h" 33 #include "codechal_decode_scalability_g12.h" 34 #include "codechal_decode_singlepipe_virtualengine.h" 35 #include "codechal_decode_sfc_vp9_g12.h" 36 #include "mhw_vdbox_g12_X.h" 37 38 //! 39 //! \class CodechalDecodeVp9G12 40 //! \brief This class defines the member fields, functions etc used by gen12 VP9 decoder. 41 //! 42 class CodechalDecodeVp9G12 : public CodechalDecodeVp9 43 { 44 public: 45 //! 46 //! \brief Constructor 47 //! \param [in] hwInterface 48 //! Hardware interface 49 //! \param [in] debugInterface 50 //! Debug interface 51 //! \param [in] standardInfo 52 //! The information of decode standard for this instance 53 //! 54 CodechalDecodeVp9G12( 55 CodechalHwInterface *hwInterface, 56 CodechalDebugInterface* debugInterface, 57 PCODECHAL_STANDARD_INFO standardInfo); 58 59 //! 60 //! \brief Copy constructor 61 //! 62 CodechalDecodeVp9G12(const CodechalDecodeVp9G12&) = delete; 63 64 //! 65 //! \brief Copy assignment operator 66 //! 67 CodechalDecodeVp9G12& operator=(const CodechalDecodeVp9G12&) = delete; 68 69 ~CodechalDecodeVp9G12(); 70 71 MOS_STATUS AllocateStandard ( 72 CodechalSetting * settings) override; 73 74 //! 75 //! \brief Set states for each frame to prepare for VP9 G12 decode 76 //! \return MOS_STATUS 77 //! MOS_STATUS_SUCCESS if success, else fail reason 78 //! 79 MOS_STATUS SetFrameStates() override; 80 81 MOS_STATUS DecodeStateLevel () override; 82 83 MOS_STATUS DecodePrimitiveLevel () override; 84 85 MOS_STATUS InitializeDecodeMode () override; 86 87 MOS_STATUS AllocateResourcesVariableSizes() override; 88 89 MOS_STATUS DetermineDecodePhase() override; 90 91 MOS_STATUS InitSfcState() override; 92 93 MOS_STATUS CalcDownsamplingParams( 94 void *picParams, 95 uint32_t *refSurfWidth, 96 uint32_t *refSurfHeight, 97 MOS_FORMAT *format, 98 uint8_t *frameIdx) override; 99 100 MOS_STATUS InitMmcState() override; 101 102 protected: 103 104 //! 105 //! \brief Set And Populate VE Hint parameters 106 //! \details Set Virtual Engine hint parameter and populate it to primary cmd buffer attributes 107 //! \param [in] primCmdBuf 108 //! Pointer to primary cmd buffer 109 //! \return MOS_STATUS 110 //! MOS_STATUS_SUCCESS if success, else fail reason 111 //! 112 MOS_STATUS SetAndPopulateVEHintParams( 113 PMOS_COMMAND_BUFFER primCmdBuf); 114 115 //! 116 //! \brief Determin if need to send prolog with frame tracking 117 //! \param [in] sendPrologWithFrameTracking 118 //! Pointer to bool type flag 119 //! \return MOS_STATUS 120 //! MOS_STATUS_SUCCESS if success, else fail reason 121 //! 122 MOS_STATUS DetermineSendProlgwithFrmTracking( 123 bool *sendPrologWithFrameTracking); 124 125 //! 126 //! \brief Add picture state mhw parameters 127 //! \details Add picture state mhw parameters to command buffer for VP9 decoder 128 //! \param [in] cmdBuffer 129 //! Command buffer to hold HW commands 130 //! 131 //! \return MOS_STATUS 132 //! MOS_STATUS_SUCCESS if success, else fail reason 133 //! 134 MOS_STATUS AddPicStateMhwCmds( 135 PMOS_COMMAND_BUFFER cmdBuffer) override; 136 137 MOS_STATUS SetGpuCtxCreatOption(CodechalSetting *settings) override; 138 139 private: 140 //! 141 //! \brief The virtual function for decode standard to override the requested space size 142 //! \param [in] requestedSize 143 //! The intial request size computed by picture level and slice level 144 //! \return The final requested space size 145 //! 146 uint32_t RequestedSpaceSize(uint32_t requestedSize) override; 147 148 //! 149 //! \brief The virtual function for decode standard to override the extra requested space size 150 //! \param [in] requestedSize 151 //! The intial request size computed by picture level and slice level 152 //! \param [in] additionalSizeNeeded 153 //! The additional request size for command buffer 154 //! \return The extra requested space size 155 //! 156 virtual MOS_STATUS VerifyExtraSpace( 157 uint32_t requestedSize, 158 uint32_t additionalSizeNeeded) override; 159 160 //! 161 //! \brief Utility function to allocate internal histogram surface 162 //! 163 //! \return MOS_STATUS 164 //! MOS_STATUS_SUCCESS if success, else fail reason 165 //! 166 MOS_STATUS AllocateHistogramSurface(); 167 168 protected: 169 uint32_t m_frameSizeMaxAlloced; //!< Max Frame size used for buffer allocation in past frames 170 171 PCODECHAL_DECODE_SINGLEPIPE_VIRTUALENGINE_STATE m_sinlgePipeVeState; //!< single pipe virtual engine state 172 PCODECHAL_DECODE_SCALABILITY_STATE_G12 m_scalabilityState; //!< Scalability state 173 #if (_DEBUG || _RELEASE_INTERNAL) 174 bool m_histogramDebug = true; //!< Internal histogram buffer debug 175 #endif 176 177 #ifdef _DECODE_PROCESSING_SUPPORTED 178 CodechalVp9SfcStateG12 *m_sfcState = nullptr; //!< VP9 SFC state 179 #endif 180 PMOS_SURFACE m_histogramSurface = nullptr; //!< Internal histogram buffer 181 }; 182 #endif // __CODECHAL_DECODE_VP9_G12_H__ 183 184