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 vp_pipeline_adapter_base.h 24 //! \brief vp pipeline adapter base clarification 25 //! \details vp pipeline adapter base clarification inlcuding: 26 //! some marcro, enum, structure, function 27 //! 28 #ifndef __VP_PIPELINE_ADAPTER_BASE_H__ 29 #define __VP_PIPELINE_ADAPTER_BASE_H__ 30 #include "vp_base.h" 31 #include "mhw_vebox_itf.h" 32 #include "vp_utils.h" 33 #include "mhw_sfc_itf.h" 34 #include "mhw_render_itf.h" 35 36 //! 37 //! \brief Deinterlace Mode enum 38 //! 39 typedef enum 40 { 41 VPDDI_PROGRESSIVE = 0, //!< Progressive mode 42 VPDDI_BOB = 1, //!< BOB DI mode 43 VPDDI_ADI = 2 //!< ADI mode 44 } DI_MODE; 45 46 //! 47 //! \brief Scaling Mode enum 48 //! 49 typedef enum 50 { 51 VPDDI_SCALING = 0, //!< Bilinear scaling 52 VPDDI_ADVANCEDSCALING = 1, //!< AVS scaling 53 VPDDI_SUPERRESOLUTIONSCALING = 2 //!< Super scaling 54 } SCALING_MODE; 55 56 //! 57 //! Class VpPipelineAdapterBase 58 //! \brief VP_INTERFACE class definition 59 //! 60 class VpPipelineAdapterBase : public VpBase 61 { 62 public: 63 //! 64 //! \brief VpPipelineAdapterBase Constructor 65 //! \details Creates instance of VpPipelineAdapterBase 66 //! - Caller must call Allocate to allocate all VPHAL states and objects. 67 //! \param [in] pOsInterface 68 //! OS interface, if provided externally - may be nullptr 69 //! \param [in] pOsDriverContext 70 //! OS driver context (UMD context, pShared, ...) 71 //! \param [in,out] peStatus 72 //! Pointer to the MOS_STATUS flag. 73 //! Will assign this flag to MOS_STATUS_SUCCESS if successful, otherwise failed 74 //! 75 VpPipelineAdapterBase( 76 vp::VpPlatformInterface &vpPlatformInterface, 77 MOS_STATUS &eStatus, 78 bool clearViewMode = false); 79 80 virtual MOS_STATUS GetVpMhwInterface( 81 VP_MHWINTERFACE &vpMhwinterface); 82 83 //! 84 //! \brief Allocate VpPipelineAdapterBase Resources 85 //! \details Allocate VpPipelineAdapterBase Resources 86 //! - Allocate and initialize HW states 87 //! - Allocate and initialize renderer states 88 //! \param [in] pVpHalSettings 89 //! Pointer to VPHAL Settings 90 //! \return MOS_STATUS 91 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 92 //! 93 virtual MOS_STATUS Allocate( 94 const VpSettings *pVpSettings) = 0; 95 96 //! 97 //! \brief Performs VP Rendering 98 //! \details Performs VP Rendering 99 //! - call default render of video 100 //! \param [in] pcRenderParams 101 //! Pointer to Render Params 102 //! \return MOS_STATUS 103 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 104 //! 105 virtual MOS_STATUS Render( 106 PCVPHAL_RENDER_PARAMS pcRenderParams) = 0; 107 RegisterCacheSettings()108 virtual MOS_STATUS RegisterCacheSettings() 109 { 110 return MOS_STATUS_SUCCESS; 111 }; 112 113 //! 114 //! \brief Get Status Report 115 //! \details Get Status Report, will return back to app indicating if related frame id is done by gpu 116 //! \param [out] pQueryReport 117 //! Pointer to pQueryReport, the status query report array. 118 //! \param [in] wStatusNum 119 //! The size of array pQueryReport. 120 //! \return MOS_STATUS 121 //! Return MOS_STATUS_SUCCESS if successful, otherwise failed 122 virtual MOS_STATUS GetStatusReport( 123 PQUERY_STATUS_REPORT_APP pQueryReport, 124 uint16_t numStatus); 125 126 virtual MOS_STATUS GetStatusReportEntryLength( 127 uint32_t *puiLength); 128 129 virtual VphalFeatureReport *GetRenderFeatureReport() = 0; 130 131 //! 132 //! \brief VpPipelineAdapterBase Destuctor 133 //! \details Destroys VpPipelineAdapterBase and all internal states and objects 134 //! \return void 135 //! 136 virtual ~VpPipelineAdapterBase(); 137 GetOsInterface()138 virtual PMOS_INTERFACE GetOsInterface() 139 { 140 return m_osInterface; 141 } 142 GetSkuTable()143 virtual MEDIA_FEATURE_TABLE *GetSkuTable() 144 { 145 return m_skuTable; 146 } 147 GetPlatform()148 virtual PLATFORM &GetPlatform() 149 { 150 return m_platform; 151 } 152 GetRenderHal()153 virtual PRENDERHAL_INTERFACE GetRenderHal() 154 { 155 return m_vprenderHal; 156 } 157 SetMhwVeboxItf(std::shared_ptr<mhw::vebox::Itf> veboxItf)158 void SetMhwVeboxItf(std::shared_ptr<mhw::vebox::Itf> veboxItf) 159 { 160 MOS_STATUS eStatus = MOS_STATUS_SUCCESS; 161 if (veboxItf == nullptr) 162 { 163 return; 164 } 165 166 if (m_veboxItf != nullptr) 167 { 168 eStatus = m_veboxItf->DestroyHeap(); 169 170 m_veboxItf = nullptr; 171 if (MOS_FAILED(eStatus)) 172 { 173 VP_PUBLIC_ASSERTMESSAGE("Failed to destroy Vebox Interface, eStatus:%d.\n", eStatus); 174 } 175 } 176 177 m_veboxItf = veboxItf; 178 } 179 SetMhwSfcItf(std::shared_ptr<mhw::sfc::Itf> sfcItf)180 void SetMhwSfcItf(std::shared_ptr<mhw::sfc::Itf> sfcItf) 181 { 182 if (sfcItf == nullptr) 183 { 184 return; 185 } 186 187 if (m_sfcItf != nullptr) 188 { 189 m_sfcItf = nullptr; 190 } 191 192 m_sfcItf = sfcItf; 193 } 194 SetMhwMiItf(std::shared_ptr<mhw::mi::Itf> miItf)195 void SetMhwMiItf(std::shared_ptr<mhw::mi::Itf> miItf) 196 { 197 if (miItf == nullptr) 198 { 199 return; 200 } 201 if (m_miItf != nullptr) 202 { 203 m_miItf = nullptr; 204 } 205 206 m_miItf = miItf; 207 } 208 SetMhwRenderItf(std::shared_ptr<mhw::render::Itf> renderItf)209 void SetMhwRenderItf(std::shared_ptr<mhw::render::Itf> renderItf) 210 { 211 if (renderItf == nullptr) 212 { 213 return; 214 } 215 216 if (m_renderItf != nullptr) 217 { 218 m_renderItf = nullptr; 219 } 220 221 m_renderItf = renderItf; 222 } 223 224 protected: 225 // Internals 226 PLATFORM m_platform = {}; 227 MEDIA_FEATURE_TABLE *m_skuTable = nullptr; 228 MEDIA_WA_TABLE * m_waTable = nullptr; 229 230 // States 231 PMOS_INTERFACE m_osInterface = nullptr; 232 PRENDERHAL_INTERFACE m_vprenderHal = nullptr; 233 MhwCpInterface * m_cpInterface = nullptr; 234 std::shared_ptr<mhw::vebox::Itf> m_veboxItf = nullptr; 235 std::shared_ptr<mhw::sfc::Itf> m_sfcItf = nullptr; 236 std::shared_ptr<mhw::mi::Itf> m_miItf = nullptr; 237 std::shared_ptr<mhw::render::Itf> m_renderItf = nullptr; 238 239 // StatusTable indicating if command is done by gpu or not 240 VPHAL_STATUS_TABLE m_statusTable = {}; 241 vp::VpPlatformInterface &m_vpPlatformInterface; //!< vp platform interface. Should be destroyed during deconstruction. 242 MediaUserSettingSharedPtr m_userSettingPtr = nullptr; //!< usersettingInstance 243 244 // Perf Optimize for ClearVideoView DDI 245 bool m_clearVideoViewMode = false; 246 MEDIA_CLASS_DEFINE_END(VpPipelineAdapterBase) 247 }; 248 249 #endif // __VP_PIPELINE_ADAPTER_BASE_H__ 250