1 /* 2 * Copyright (c) 2020-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_vp9_pipeline.h 24 //! \brief Defines the interface for vp9 decode pipeline 25 //! 26 #ifndef __DECODE_VP9_PIPELINE_H__ 27 #define __DECODE_VP9_PIPELINE_H__ 28 29 #include "decode_pipeline.h" 30 #include "decode_vp9_basic_feature.h" 31 #include "decode_scalability_option.h" 32 #include "decode_phase.h" 33 34 namespace decode { 35 36 class Vp9Pipeline : public DecodePipeline 37 { 38 public: 39 enum Vp9DecodeMode 40 { 41 baseDecodeMode, //!< Legacy decode mode with single pipe 42 virtualTileDecodeMode, //!< virtual tile decode mode 43 }; 44 45 //! 46 //! \brief Vp9Pipeline constructor 47 //! \param [in] hwInterface 48 //! Pointer to CodechalHwInterface 49 //! \param [in] debugInterface 50 //! Pointer to CodechalDebugInterface 51 //! 52 Vp9Pipeline( 53 CodechalHwInterfaceNext *hwInterface, 54 CodechalDebugInterface *debugInterface); 55 ~Vp9Pipeline()56 virtual ~Vp9Pipeline() {}; 57 58 Vp9DecodeMode GetDecodeMode(); 59 //! 60 //! \brief Declare Regkeys in the scope of vp9 decode 61 //! \return MOS_STATUS 62 //! MOS_STATUS_SUCCESS if success, else fail reason 63 virtual MOS_STATUS InitUserSetting(MediaUserSettingSharedPtr userSettingPtr) override; 64 65 DeclareDecodePacketId(vp9SinglePacketId); 66 DeclareDecodePacketId(vp9FrontEndPacketId); 67 DeclareDecodePacketId(vp9BackEndPacketId); 68 DeclareDecodePacketId(vp9PictureSubPacketId); 69 DeclareDecodePacketId(vp9SliceSubPacketId); 70 DeclareDecodePacketId(vp9TileSubPacketId); 71 72 protected: 73 //! 74 //! \brief Initialize the decode pipeline 75 //! \param [in] settings 76 //! Pointer to the initialize settings 77 //! \return MOS_STATUS 78 //! MOS_STATUS_SUCCESS if success, else fail reason 79 //! 80 virtual MOS_STATUS Initialize(void *settings) override; 81 82 //! 83 //! \brief Uninitialize the decode pipeline 84 //! \return MOS_STATUS 85 //! MOS_STATUS_SUCCESS if success, else fail reason 86 //! 87 virtual MOS_STATUS Uninitialize() override; 88 89 //! 90 //! \brief Prepare interal parameters, should be invoked for each frame 91 //! \param [in] params 92 //! Pointer to the input parameters 93 //! \return MOS_STATUS 94 //! MOS_STATUS_SUCCESS if success, else fail reason 95 //! 96 virtual MOS_STATUS Prepare(void *params) override; 97 98 //! 99 //! \brief User Feature Key Report 100 //! \return MOS_STATUS 101 //! MOS_STATUS_SUCCESS if success, else fail reason 102 //! 103 virtual MOS_STATUS UserFeatureReport() override; 104 105 //! 106 //! \brief Finish the execution for each frame 107 //! \return MOS_STATUS 108 //! MOS_STATUS_SUCCESS if success, else fail reason 109 //! 110 virtual MOS_STATUS Execute() override; 111 112 //! 113 //! \brief create media feature manager 114 //! \return MOS_STATUS 115 //! MOS_STATUS_SUCCESS if success, else fail reason 116 //! 117 virtual MOS_STATUS CreateFeatureManager() override; 118 119 //! 120 //! \brief Create sub packets 121 //! \param [in] codecSettings 122 //! Point to codechal settings 123 //! \return MOS_STATUS 124 //! MOS_STATUS_SUCCESS if success, else fail reason 125 //! 126 virtual MOS_STATUS CreateSubPackets(DecodeSubPacketManager& subPacketManager, CodechalSetting &codecSettings) override; 127 128 //! 129 //! \brief Initialize context option 130 //! \param [in] basicFeature 131 //! VP9 decode basic feature 132 //! \return MOS_STATUS 133 //! MOS_STATUS_SUCCESS if success, else fail reason 134 //! 135 virtual MOS_STATUS InitContexOption(Vp9BasicFeature &basicFeature); 136 137 //! 138 //! \brief Initialize VP9 decode mode 139 //! \param [in] scalabMode 140 //! Decode scalability mode 141 //! \return MOS_STATUS 142 //! MOS_STATUS_SUCCESS if success, else fail reason 143 //! 144 MOS_STATUS InitDecodeMode(ScalabilityMode scalabMode); 145 146 //! 147 //! \brief Add one phase with pass number and pipe number 148 //! \param [in] pass 149 //! Pass number for phase 150 //! \param [in] pipe 151 //! Pipe number for phase 152 //! \param [in] activePipeNum 153 //! Acutive pipe number for current pass 154 //! \return MOS_STATUS 155 //! MOS_STATUS_SUCCESS if success, else fail reason 156 //! 157 template<typename T> 158 MOS_STATUS CreatePhase(uint8_t pass = 0, uint8_t pipe = 0, uint8_t activePipeNum = 1); 159 160 //! 161 //! \brief Create VP9 decode phase list for current frame 162 //! \param [in] scalabMode 163 //! Decode scalability mode 164 //! \param [in] numPipe 165 //! Number of pipe for currently scalability mode 166 //! \return MOS_STATUS 167 //! MOS_STATUS_SUCCESS if success, else fail reason 168 //! 169 MOS_STATUS CreatePhaseList(const ScalabilityMode scalabMode, const uint8_t numPipe); 170 171 //! 172 //! \brief Destroy Vp9 decode phase list 173 //! \return MOS_STATUS 174 //! MOS_STATUS_SUCCESS if success, else fail reason 175 //! 176 MOS_STATUS DestoryPhaseList(); 177 178 #if USE_CODECHAL_DEBUG_TOOL 179 //! \brief Dump the picture parameters 180 //! 181 //! \param [in] picParams 182 //! Pointer to CodecAv1PicParams 183 //! 184 //! \return MOS_STATUS 185 //! MOS_STATUS_SUCCESS if success, else fail reason 186 //! 187 MOS_STATUS DumpPicParams(CODEC_VP9_PIC_PARAMS *picParams); 188 189 //! \brief Dump segment parameters into file 190 //! 191 //! \param [in] segmentParams 192 //! Pointer to PCODEC_VP9_SEGMENT_PARAMS 193 //! 194 //! \return MOS_STATUS 195 //! MOS_STATUS_SUCCESS if success, else fail reason 196 //! 197 MOS_STATUS DumpSegmentParams(CODEC_VP9_SEGMENT_PARAMS *segmentParams); 198 199 //! \brief Dump slice parameters into file 200 //! 201 //! \param [in] slcParams 202 //! Pointer to PCODEC_VP9_SLICE_PARAMS 203 //! 204 //! \return MOS_STATUS 205 //! MOS_STATUS_SUCCESS if success, else fail reason 206 //! 207 MOS_STATUS DumpSliceParams(CODEC_VP9_SLICE_PARAMS *slcParams); 208 #endif 209 210 protected: 211 Vp9BasicFeature *m_basicFeature = nullptr; 212 Vp9DecodeMode m_decodeMode = baseDecodeMode; //!< Decode mode 213 214 DecodeScalabilityOption m_scalabOption; //!< VP9 decode scalability option 215 216 std::vector<DecodePhase *> m_phaseList; //!< Phase list 217 218 #if (_DEBUG || _RELEASE_INTERNAL) 219 uint32_t m_vtFrameCount = 0; //!< frame count for virtual tile decoding 220 #endif 221 222 MEDIA_CLASS_DEFINE_END(decode__Vp9Pipeline) 223 }; 224 225 } 226 #endif // !__DECODE_VP9_PIPELINE_H__ 227