1 /* 2 * Copyright (c) 2021, 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 decode_avc_picture_xe_m_base_packet.h 24 //! \brief Defines the implementation of avc decode picture packet 25 //! 26 27 #ifndef __DECODE_AVC_PICTURE_XE_M_BASE_PACKET_H__ 28 #define __DECODE_AVC_PICTURE_XE_M_BASE_PACKET_H__ 29 30 #include "media_cmd_packet.h" 31 #include "decode_avc_pipeline.h" 32 #include "decode_utils.h" 33 #include "decode_avc_basic_feature.h" 34 #include "decode_downsampling_packet.h" 35 #include "mhw_vdbox_g12_X.h" 36 #include "codechal_hw_g12_X.h" 37 38 namespace decode 39 { 40 class AvcDecodePicPktXe_M_Base : public DecodeSubPacket 41 { 42 public: 43 //! 44 //! \brief AvcDecodePicPkt constructor 45 //! AvcDecodePicPktXe_M_Base(AvcPipeline * pipeline,CodechalHwInterface * hwInterface)46 AvcDecodePicPktXe_M_Base(AvcPipeline *pipeline, CodechalHwInterface *hwInterface) 47 : DecodeSubPacket(pipeline, *hwInterface), m_avcPipeline(pipeline) 48 { 49 m_hwInterface = hwInterface; 50 if (m_hwInterface != nullptr) 51 { 52 m_miInterface = m_hwInterface->GetMiInterface(); 53 m_osInterface = m_hwInterface->GetOsInterface(); 54 m_mfxInterface = static_cast<CodechalHwInterfaceG12*>(hwInterface)->GetMfxInterface(); 55 } 56 } 57 58 //! 59 //! \brief AvcDecodePicPkt deconstructor 60 //! 61 virtual ~AvcDecodePicPktXe_M_Base(); 62 63 //! 64 //! \brief Initialize the media packet, allocate required resources 65 //! \return MOS_STATUS 66 //! MOS_STATUS_SUCCESS if success, else fail reason 67 //! 68 virtual MOS_STATUS Init() override; 69 70 //! 71 //! \brief Prepare interal parameters, should be invoked for each frame 72 //! \return MOS_STATUS 73 //! MOS_STATUS_SUCCESS if success, else fail reason 74 //! 75 virtual MOS_STATUS Prepare() override; 76 77 //! 78 //! \brief Execute av1 picture packet 79 //! \return MOS_STATUS 80 //! MOS_STATUS_SUCCESS if success, else fail reason 81 //! 82 virtual MOS_STATUS Execute(MOS_COMMAND_BUFFER& cmdBuffer) = 0; 83 84 //! 85 //! \brief Calculate Command Size 86 //! 87 //! \param [in, out] commandBufferSize 88 //! requested size 89 //! \param [in, out] requestedPatchListSize 90 //! requested size 91 //! \return MOS_STATUS 92 //! status 93 //! 94 MOS_STATUS CalculateCommandSize( 95 uint32_t &commandBufferSize, 96 uint32_t &requestedPatchListSize) override; 97 98 protected: 99 100 virtual MOS_STATUS AllocateFixedResources(); 101 virtual MOS_STATUS AllocateVariableResources(); 102 103 virtual MOS_STATUS SetMfxAvcDirectmodeParams(MHW_VDBOX_AVC_DIRECTMODE_PARAMS &avcDirectmodeParams); 104 virtual MOS_STATUS SetMfxSurfaceParams(MHW_VDBOX_SURFACE_PARAMS &dstSurfaceParams); 105 virtual MOS_STATUS SetMfxPipeBufAddrParams(MHW_VDBOX_PIPE_BUF_ADDR_PARAMS &pipeBufAddrParams); 106 virtual void SetMfxIndObjBaseAddrParams(MHW_VDBOX_IND_OBJ_BASE_ADDR_PARAMS &indObjBaseAddrParams); 107 virtual void SetMfxBspBufBaseAddrParams(MHW_VDBOX_BSP_BUF_BASE_ADDR_PARAMS &bspBufBaseAddrParams); 108 virtual void SetMfdAvcDpbParams(MHW_VDBOX_AVC_DPB_PARAMS &dpbParams); 109 virtual void SetMfxPipeModeSelectParams(MHW_VDBOX_PIPE_MODE_SELECT_PARAMS_G12 &vdboxPipeModeSelectParams); 110 virtual void SetMfdAvcPicidParams(MHW_VDBOX_PIC_ID_PARAMS &picIdParams); 111 virtual void SetMfxAvcImgParams(MHW_VDBOX_AVC_IMG_PARAMS &imgParams); 112 113 virtual MOS_STATUS AddMfdAvcPicidCmd(MOS_COMMAND_BUFFER &cmdBuffer); 114 virtual MOS_STATUS AddMfxAvcImgCmd(MOS_COMMAND_BUFFER &cmdBuffer); 115 virtual MOS_STATUS AddMfxQmCmd(MOS_COMMAND_BUFFER &cmdBuffer); 116 virtual MOS_STATUS AddMfxAvcDirectmodeCmd(MOS_COMMAND_BUFFER &cmdBuffer); 117 virtual MOS_STATUS AddMfxIndObjBaseAddrCmd(MOS_COMMAND_BUFFER &cmdBuffer); 118 virtual MOS_STATUS AddMfxBspBufBaseAddrCmd(MOS_COMMAND_BUFFER &cmdBuffer); 119 virtual MOS_STATUS AddMfdAvcDpbCmd(MOS_COMMAND_BUFFER &cmdBuffer); 120 virtual MOS_STATUS AddMfxSurfacesCmd(MOS_COMMAND_BUFFER &cmdBuffer); 121 122 virtual MOS_STATUS AddMfxPipeBufAddrCmd(MOS_COMMAND_BUFFER &cmdBuffer) = 0; 123 virtual MOS_STATUS AddMfxPipeModeSelectCmd(MOS_COMMAND_BUFFER &cmdBuffer) = 0; 124 125 virtual void SetMfxQmParams(MHW_VDBOX_QM_PARAMS &qmParams); 126 127 MOS_STATUS FixMfxPipeBufAddrParams(MHW_VDBOX_PIPE_BUF_ADDR_PARAMS &pipeBufAddrParams); 128 //! \brief Set Rowstore Cache offset 129 //! 130 //! \return MOS_STATUS 131 //! MOS_STATUS_SUCCESS if success, else fail reason 132 //! 133 virtual MOS_STATUS SetRowstoreCachingOffsets(); 134 135 //! 136 //! \brief Free resources 137 //! \return MOS_STATUS 138 //! MOS_STATUS_SUCCESS if success, else fail reason 139 //! 140 MOS_STATUS FreeResources(); 141 142 //! 143 //! \brief Dump resources 144 //! \return MOS_STATUS 145 //! MOS_STATUS_SUCCESS if success, else fail reason 146 //! 147 MOS_STATUS DumpResources(MHW_VDBOX_PIPE_BUF_ADDR_PARAMS &pipeBufAddrParams); 148 149 MOS_STATUS DumpResources(MHW_VDBOX_AVC_DIRECTMODE_PARAMS &avcDirectmodeParams, uint32_t mvBufferSize); 150 151 #ifdef _DECODE_PROCESSING_SUPPORTED 152 DecodeDownSamplingFeature *m_downSamplingFeature = nullptr; 153 DecodeDownSamplingPkt *m_downSamplingPkt = nullptr; 154 #endif 155 156 //Interfaces 157 AvcPipeline *m_avcPipeline = nullptr; 158 MhwVdboxMfxInterface *m_mfxInterface = nullptr; 159 AvcBasicFeature *m_avcBasicFeature = nullptr; 160 DecodeAllocator *m_allocator = nullptr; 161 DecodeMemComp *m_mmcState = nullptr; 162 163 CODEC_AVC_PIC_PARAMS *m_avcPicParams = nullptr; //!< Pointer to picture parameter 164 MOS_RESOURCE m_resAvcDmvBuffers[CODEC_AVC_NUM_DMV_BUFFERS]; 165 166 //non-temporal buffers 167 PMOS_BUFFER m_resMfdDeblockingFilterRowStoreScratchBuffer = nullptr; //!< Handle of MFD Deblocking Filter Row Store Scratch data surface 168 PMOS_BUFFER m_resMfdIntraRowStoreScratchBuffer = nullptr; //!< Handle of MFD Intra Row Store Scratch data surface 169 PMOS_BUFFER m_resBsdMpcRowStoreScratchBuffer = nullptr; //!< Handle of BSD/MPC Row Store Scratch data surface 170 PMOS_BUFFER m_resMprRowStoreScratchBuffer = nullptr; //!< Handle of MPR Row Store Scratch data surface 171 172 uint32_t m_pictureStatesSize = 0; //!< Picture states size 173 uint32_t m_picturePatchListSize = 0; //!< Picture patch list size 174 uint16_t m_picWidthInMbLastMaxAlloced = 0; //!< Max Picture Width in MB used for buffer allocation in past frames 175 uint16_t m_picHeightInMbLastMaxAlloced = 0; //!< Max Picture Height in MB used for buffer allocation in past frames 176 177 CodechalHwInterface *m_hwInterface = nullptr; 178 MhwMiInterface *m_miInterface = nullptr; 179 180 MEDIA_CLASS_DEFINE_END(decode__AvcDecodePicPktXe_M_Base) 181 }; 182 183 } // namespace decode 184 #endif 185