1 /* 2 * Copyright (c) 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 //! 24 //! \file decode_phase.h 25 //! \brief Defines the common interface for decode phase. 26 //! \details The decode phase interface is further sub-divided by codecs, 27 //! this file is for the base interface which is shared by all codecs. 28 //! 29 30 #ifndef __DECODE_PHASE_H__ 31 #define __DECODE_PHASE_H__ 32 33 #include "decode_pipeline.h" 34 #include "decode_scalability_option.h" 35 36 namespace decode 37 { 38 39 class DecodePhase : public ComponentState 40 { 41 public: 42 //! 43 //! \brief decode phase constructor 44 //! DecodePhase()45 DecodePhase() {}; 46 47 //! 48 //! \brief decode scalability phase destructor 49 //! ~DecodePhase()50 virtual ~DecodePhase() {}; 51 52 //! 53 //! \brief Initialize the decode scalability phase 54 //! \param [in] pass 55 //! Pass for current phase 56 //! \param [in] pipe 57 //! Pipe for current phase 58 //! \param [in] activePipeNum 59 //! Number of active pipes for current pass 60 //! \return MOS_STATUS 61 //! MOS_STATUS_SUCCESS if success, else fail reason 62 //! 63 virtual MOS_STATUS Initialize(uint8_t pass = 0, 64 uint8_t pipe = 0, 65 uint8_t activePipeNum = 1) = 0; 66 67 //! 68 //! \brief Get command buffer index for current phase, primary command buffer index is zero, 69 //! secondary command buffer index start from one. 70 //! \return uint32_t 71 //! Command buffer index for current phase 72 //! 73 virtual uint32_t GetCmdBufIndex() = 0; 74 75 //! 76 //! \brief Get command buffer submission type 77 //! \return uint32_t 78 //! Command buffer submission type 79 //! 80 virtual uint32_t GetSubmissionType() = 0; 81 82 //! 83 //! \brief Get pipe work mode and engine mode 84 //! \return MOS_STATUS 85 //! MOS_STATUS_SUCCESS if success, else fail reason 86 //! 87 virtual MOS_STATUS GetMode(uint32_t &pipeWorkMode, uint32_t &multiEngineMode) = 0; 88 89 //! 90 //! \brief Get packet id for this phase 91 //! \return uint32_t 92 //! Packet id for this phase 93 //! 94 virtual uint32_t GetPktId() = 0; 95 96 //! 97 //! \brief Indicator if this phase submit immediately 98 //! \return bool 99 //! True if this phase submit immediately, else fasle 100 //! 101 virtual bool ImmediateSubmit() = 0; 102 103 //! 104 //! \brief Indicator if this phase reuquires context switch 105 //! \return bool 106 //! True if this phase reuquires context switch, else fasle 107 //! 108 virtual bool RequiresContextSwitch() = 0; 109 110 //! 111 //! \brief Scalability option for this phase if requires context switch 112 //! \return DecodeScalabilityOption * 113 //! Scalability option for this phase 114 //! 115 virtual DecodeScalabilityOption* GetDecodeScalabilityOption() = 0; 116 117 //! 118 //! \brief Get pass number for current phase 119 //! \return uint8_t 120 //! Pass number for current phase 121 //! GetPass()122 virtual uint8_t GetPass() { return m_pass; } 123 124 //! 125 //! \brief Get pipe number for current phase 126 //! \return uint8_t 127 //! Pipe number for current phase 128 //! GetPipe()129 virtual uint8_t GetPipe() { return m_pipe; } 130 131 //! 132 //! \brief Get active pipe number for current phase 133 //! \return uint8_t 134 //! Active pipe number for current phase 135 //! GetActivePipeNum()136 virtual uint8_t GetActivePipeNum() { return m_activePipeNum; } 137 138 static constexpr uint32_t m_primaryCmdBufIdx = 0; 139 static constexpr uint32_t m_secondaryCmdBufIdxBase = m_primaryCmdBufIdx + 1; 140 141 protected: 142 uint8_t m_pass = 0; //!< Pass index for current phase 143 uint8_t m_pipe = 0; //!< Pipe index for current phase 144 uint8_t m_activePipeNum = 1; //!< Number of active pipe number for current pass 145 146 MEDIA_CLASS_DEFINE_END(decode__DecodePhase) 147 }; 148 149 } 150 #endif // !__DECODE_PHASE_H__ 151 152