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 vp_dn_filter.h 24 //! \brief Defines the common interface for denoise 25 //! this file is for the base interface which is shared by all denoise in driver. 26 //! 27 #ifndef __VP_DN_FILTER_H__ 28 #define __VP_DN_FILTER_H__ 29 #include "vp_filter.h" 30 #include "sw_filter.h" 31 32 namespace vp { 33 class VpDnFilter : public VpFilter 34 { 35 public: 36 37 VpDnFilter( 38 PVP_MHWINTERFACE vpMhwInterface); 39 ~VpDnFilter()40 ~VpDnFilter() 41 { 42 Destroy(); 43 }; 44 45 virtual MOS_STATUS Init() override; 46 47 virtual MOS_STATUS Prepare() override; 48 49 virtual MOS_STATUS Destroy() override; 50 51 virtual MOS_STATUS SetExecuteEngineCaps( 52 FeatureParamDenoise &dnParams, 53 VP_EXECUTE_CAPS vpExecuteCaps); 54 55 MOS_STATUS CalculateEngineParams(); 56 MOS_STATUS CalculateRenderDnHVSParams(); GetVeboxParams()57 PVEBOX_DN_PARAMS GetVeboxParams() 58 { 59 return m_veboxDnParams; 60 } GetRenderDnHVSParams()61 PRENDER_DN_HVS_CAL_PARAMS GetRenderDnHVSParams() 62 { 63 return &m_renderDnHVSParams; 64 } 65 66 protected: 67 FeatureParamDenoise m_dnParams = {}; 68 PVEBOX_DN_PARAMS m_veboxDnParams = nullptr; 69 RENDER_DN_HVS_CAL_PARAMS m_renderDnHVSParams = {}; 70 VPHAL_HVSDENOISE_PARAMS m_hvsdenoise = {}; 71 72 SurfaceType m_surfTypeHVSTable = SurfaceTypeHVSTable; 73 uint32_t m_HVSQp = 0; 74 uint32_t m_HVSStrength = 0; 75 uint32_t m_HVSFormat = 0; 76 77 MEDIA_CLASS_DEFINE_END(vp__VpDnFilter) 78 }; 79 80 struct HW_FILTER_DN_PARAM : public HW_FILTER_PARAM 81 { 82 FeatureParamDenoise dnParams; 83 }; 84 85 class HwFilterDnParameter : public HwFilterParameter 86 { 87 public: 88 static HwFilterParameter *Create(HW_FILTER_DN_PARAM ¶m, FeatureType featureType); 89 HwFilterDnParameter(FeatureType featureType); 90 virtual ~HwFilterDnParameter(); 91 virtual MOS_STATUS ConfigParams(HwFilter &hwFilter); 92 93 MOS_STATUS Initialize(HW_FILTER_DN_PARAM¶m); 94 95 private: 96 HW_FILTER_DN_PARAM m_Params = {}; 97 98 MEDIA_CLASS_DEFINE_END(vp__HwFilterDnParameter) 99 }; 100 101 class VpVeboxDnParameter : public VpPacketParameter 102 { 103 public: 104 static VpPacketParameter *Create(HW_FILTER_DN_PARAM ¶m); 105 VpVeboxDnParameter(PVP_MHWINTERFACE pHwInterface, PacketParamFactoryBase *packetParamFactory); 106 virtual ~VpVeboxDnParameter(); 107 108 virtual bool SetPacketParam(VpCmdPacket *pPacket); 109 110 private: 111 MOS_STATUS Initialize(HW_FILTER_DN_PARAM¶ms); 112 113 VpDnFilter m_dnFilter; 114 115 MEDIA_CLASS_DEFINE_END(vp__VpVeboxDnParameter) 116 }; 117 118 class PolicyVeboxDnHandler : public PolicyFeatureHandler 119 { 120 public: 121 PolicyVeboxDnHandler(VP_HW_CAPS &hwCaps); 122 virtual ~PolicyVeboxDnHandler(); 123 virtual bool IsFeatureEnabled(VP_EXECUTE_CAPS vpExecuteCaps); 124 virtual HwFilterParameter *CreateHwFilterParam(VP_EXECUTE_CAPS vpExecuteCaps, SwFilterPipe &swFilterPipe, PVP_MHWINTERFACE pHwInterface); 125 CreatePacketParam(HW_FILTER_PARAM & param)126 static VpPacketParameter* CreatePacketParam(HW_FILTER_PARAM& param) 127 { 128 if (param.type != FeatureTypeDnOnVebox) 129 { 130 VP_PUBLIC_ASSERTMESSAGE("Invalid parameter for Vebox De-Noise!"); 131 return nullptr; 132 } 133 134 HW_FILTER_DN_PARAM* dnParam = (HW_FILTER_DN_PARAM*)(¶m); 135 return VpVeboxDnParameter::Create(*dnParam); 136 } 137 138 private: 139 PacketParamFactory<VpVeboxDnParameter> m_PacketParamFactory; 140 141 MEDIA_CLASS_DEFINE_END(vp__PolicyVeboxDnHandler) 142 }; 143 144 /*****************DN HVS Calculate Kernel********************/ 145 class VpRenderDnHVSCalParameter : public VpPacketParameter 146 { 147 public: 148 static VpPacketParameter *Create(HW_FILTER_DN_PARAM ¶m); 149 VpRenderDnHVSCalParameter(PVP_MHWINTERFACE pHwInterface, PacketParamFactoryBase *packetParamFactory); 150 virtual ~VpRenderDnHVSCalParameter(); 151 152 virtual bool SetPacketParam(VpCmdPacket *pPacket); 153 154 private: 155 MOS_STATUS Initialize(HW_FILTER_DN_PARAM ¶ms); 156 157 VpDnFilter m_DnFilter; 158 159 MEDIA_CLASS_DEFINE_END(vp__VpRenderDnHVSCalParameter) 160 }; 161 162 class PolicyRenderDnHVSCalHandler : public PolicyFeatureHandler 163 { 164 public: 165 PolicyRenderDnHVSCalHandler(VP_HW_CAPS &hwCaps); 166 virtual ~PolicyRenderDnHVSCalHandler(); 167 virtual bool IsFeatureEnabled(VP_EXECUTE_CAPS vpExecuteCaps); 168 virtual HwFilterParameter *CreateHwFilterParam(VP_EXECUTE_CAPS vpExecuteCaps, SwFilterPipe &swFilterPipe, PVP_MHWINTERFACE pHwInterface); 169 virtual MOS_STATUS UpdateFeaturePipe(VP_EXECUTE_CAPS caps, SwFilter &feature, SwFilterPipe &featurePipe, SwFilterPipe &executePipe, bool isInputPipe, int index); CreatePacketParam(HW_FILTER_PARAM & param)170 static VpPacketParameter * CreatePacketParam(HW_FILTER_PARAM ¶m) 171 { 172 if (param.type != FeatureTypeDnHVSCalOnRender) 173 { 174 VP_PUBLIC_ASSERTMESSAGE("Invalid Parameter for Render Dn HVS Calculation!"); 175 return nullptr; 176 } 177 178 HW_FILTER_DN_PARAM * dnParam = (HW_FILTER_DN_PARAM *)(¶m); 179 return VpRenderDnHVSCalParameter::Create(*dnParam); 180 } 181 182 private: 183 PacketParamFactory<VpRenderDnHVSCalParameter> m_PacketParamFactory; 184 185 MEDIA_CLASS_DEFINE_END(vp__PolicyRenderDnHVSCalHandler) 186 }; 187 } 188 #endif 189