[VP] Refine VP HW Filter
Refine VP HW Filter for VPP structure unification
Change-Id: I17705e1dee7c7f87d19fcbeb6c3e1f226a89dd60
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/hw_filter.cpp b/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/hw_filter.cpp
index e17bfaf..fef041a 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/hw_filter.cpp
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/hw_filter.cpp
@@ -67,6 +67,20 @@
return MOS_STATUS_SUCCESS;
}
+MOS_STATUS HwFilter::ConfigParam(HW_FILTER_PARAM& param)
+{
+ if (!param.pfnCreatePacketParam)
+ {
+ VP_PUBLIC_ASSERTMESSAGE("Create packet params function is Null, return invalid params");
+ return MOS_STATUS_INVALID_PARAMETER;
+ }
+
+ VpPacketParameter* p = param.pfnCreatePacketParam(param);
+ VP_PUBLIC_CHK_NULL_RETURN(p);
+ m_Params.Params.push_back(p);
+ return MOS_STATUS_SUCCESS;
+}
+
MOS_STATUS HwFilter::Clean()
{
std::vector<VpPacketParameter *>::iterator it = m_Params.Params.begin();
@@ -127,28 +141,6 @@
return bRet ? MOS_STATUS_SUCCESS : MOS_STATUS_UNKNOWN;
}
-MOS_STATUS HwFilterVebox::ConfigDnParam(HW_FILTER_DN_PARAM ¶m)
-{
- if (FeatureTypeDnOnVebox == param.type)
- {
- VpPacketParameter *p = VpVeboxDnParameter::Create(param);
- VP_PUBLIC_CHK_NULL_RETURN(p);
- m_Params.Params.push_back(p);
- }
- return MOS_STATUS_SUCCESS;
-}
-
-MOS_STATUS HwFilterVebox::ConfigAceParam(HW_FILTER_ACE_PARAM ¶m)
-{
- if (FeatureTypeAceOnVebox == param.type)
- {
- VpPacketParameter *p = VpVeboxAceParameter::Create(param);
- VP_PUBLIC_CHK_NULL_RETURN(p);
- m_Params.Params.push_back(p);
- }
- return MOS_STATUS_SUCCESS;
-}
-
/****************************************************************************************************/
/* HwFilterVeboxSfc */
/****************************************************************************************************/
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/hw_filter.h b/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/hw_filter.h
index 30571ee..a26998b 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/hw_filter.h
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/feature_manager/hw_filter.h
@@ -83,26 +83,7 @@
virtual MOS_STATUS Initialize(HW_FILTER_PARAMS ¶m);
virtual MOS_STATUS SetPacketParams(VpCmdPacket &package) = 0;
- virtual MOS_STATUS ConfigCscParam(HW_FILTER_CSC_PARAM &)
- {
- return MOS_STATUS_SUCCESS;
- }
- virtual MOS_STATUS ConfigRotMirParam(HW_FILTER_ROT_MIR_PARAM &)
- {
- return MOS_STATUS_SUCCESS;
- }
- virtual MOS_STATUS ConfigScalingParam(HW_FILTER_SCALING_PARAM &)
- {
- return MOS_STATUS_SUCCESS;
- }
- virtual MOS_STATUS ConfigDnParam(HW_FILTER_DN_PARAM &)
- {
- return MOS_STATUS_SUCCESS;
- }
- virtual MOS_STATUS ConfigAceParam(HW_FILTER_ACE_PARAM&)
- {
- return MOS_STATUS_SUCCESS;
- }
+ virtual MOS_STATUS ConfigParam(HW_FILTER_PARAM& param);
EngineType GetEngineType()
{
@@ -132,23 +113,6 @@
return MOS_STATUS_SUCCESS;
}
virtual MOS_STATUS SetPacketParams(VpCmdPacket &package);
- virtual MOS_STATUS ConfigCscParam(HW_FILTER_CSC_PARAM & param)
- {
- VpPacketParameter* p = VpVeboxCscParameter::Create(param);
- VP_PUBLIC_CHK_NULL_RETURN(p);
- m_Params.Params.push_back(p);
- return MOS_STATUS_SUCCESS;
- }
- virtual MOS_STATUS ConfigRotMirParam(HW_FILTER_ROT_MIR_PARAM &)
- {
- return MOS_STATUS_SUCCESS;
- }
- virtual MOS_STATUS ConfigScalingParam(HW_FILTER_SCALING_PARAM &)
- {
- return MOS_STATUS_SUCCESS;
- }
- virtual MOS_STATUS ConfigDnParam(HW_FILTER_DN_PARAM ¶m);
- virtual MOS_STATUS ConfigAceParam(HW_FILTER_ACE_PARAM ¶m);
protected:
HwFilterVebox(VpInterface &vpInterface, EngineType type);
@@ -165,48 +129,6 @@
return MOS_STATUS_SUCCESS;
}
virtual MOS_STATUS SetPacketParams(VpCmdPacket &package);
- virtual MOS_STATUS ConfigCscParam(HW_FILTER_CSC_PARAM ¶m)
- {
- if (FeatureTypeCscOnSfc == param.type)
- {
- VpPacketParameter *p = VpSfcCscParameter::Create(param);
- VP_PUBLIC_CHK_NULL_RETURN(p);
- m_Params.Params.push_back(p);
- return MOS_STATUS_SUCCESS;
- }
- else
- {
- return HwFilterVebox::ConfigCscParam(param);
- }
- }
- virtual MOS_STATUS ConfigRotMirParam(HW_FILTER_ROT_MIR_PARAM ¶m)
- {
- if (FeatureTypeRotMirOnSfc == param.type)
- {
- VpPacketParameter *p = VpSfcRotMirParameter::Create(param);
- VP_PUBLIC_CHK_NULL_RETURN(p);
- m_Params.Params.push_back(p);
- return MOS_STATUS_SUCCESS;
- }
- else
- {
- return HwFilterVebox::ConfigRotMirParam(param);
- }
- }
- virtual MOS_STATUS ConfigScalingParam(HW_FILTER_SCALING_PARAM ¶m)
- {
- if (FeatureTypeScalingOnSfc == param.type)
- {
- VpPacketParameter *p = VpSfcScalingParameter::Create(param);
- VP_PUBLIC_CHK_NULL_RETURN(p);
- m_Params.Params.push_back(p);
- return MOS_STATUS_SUCCESS;
- }
- else
- {
- return HwFilterVebox::ConfigScalingParam(param);
- }
- }
};
class HwFilterRender: public HwFilter
@@ -222,18 +144,6 @@
}
virtual MOS_STATUS SetPacketParams(VpCmdPacket &package);
- virtual MOS_STATUS ConfigCscParam(HW_FILTER_CSC_PARAM &)
- {
- return MOS_STATUS_SUCCESS;
- }
- virtual MOS_STATUS ConfigRotMirParam(HW_FILTER_ROT_MIR_PARAM &)
- {
- return MOS_STATUS_SUCCESS;
- }
- virtual MOS_STATUS ConfigScalingParam(HW_FILTER_SCALING_PARAM &)
- {
- return MOS_STATUS_SUCCESS;
- }
};
}
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_ace_filter.cpp b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_ace_filter.cpp
index d64cb27..4fda41c 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_ace_filter.cpp
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_ace_filter.cpp
@@ -137,7 +137,7 @@
MOS_STATUS HwFilterAceParameter::ConfigParams(HwFilter &hwFilter)
{
- return hwFilter.ConfigAceParam(m_Params);
+ return hwFilter.ConfigParam(m_Params);
}
MOS_STATUS HwFilterAceParameter::Initialize(HW_FILTER_ACE_PARAM ¶m)
@@ -240,6 +240,7 @@
paramAce.vpExecuteCaps = vpExecuteCaps;
paramAce.pPacketParamFactory = &m_PacketParamFactory;
paramAce.aceParams = param;
+ paramAce.pfnCreatePacketParam = PolicyVeboxAceHandler::CreatePacketParam;
HwFilterParameter *pHwFilterParam = GetHwFeatureParameterFromPool();
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_ace_filter.h b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_ace_filter.h
index c1cbbef..cd73f4c 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_ace_filter.h
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_ace_filter.h
@@ -63,13 +63,8 @@
PVEBOX_ACE_PARAMS m_pVeboxAceParams = nullptr;
};
-
-struct HW_FILTER_ACE_PARAM
+struct HW_FILTER_ACE_PARAM : public HW_FILTER_PARAM
{
- FeatureType type;
- PVP_MHWINTERFACE pHwInterface;
- VP_EXECUTE_CAPS vpExecuteCaps;
- PacketParamFactoryBase *pPacketParamFactory;
FeatureParamAce aceParams;
};
@@ -110,6 +105,18 @@
virtual bool IsFeatureEnabled(VP_EXECUTE_CAPS vpExecuteCaps);
virtual HwFilterParameter *CreateHwFilterParam(VP_EXECUTE_CAPS vpExecuteCaps, SwFilterPipe &swFilterPipe, PVP_MHWINTERFACE pHwInterface);
+ static VpPacketParameter* CreatePacketParam(HW_FILTER_PARAM& param)
+ {
+ if (param.type != FeatureTypeAceOnVebox)
+ {
+ VP_PUBLIC_ASSERTMESSAGE("Invalid parameter for Vebox ACE!");
+ return nullptr;
+ }
+
+ HW_FILTER_ACE_PARAM* aceParam = (HW_FILTER_ACE_PARAM*)(¶m);
+ return VpVeboxAceParameter::Create(*aceParam);
+ }
+
private:
PacketParamFactory<VpVeboxAceParameter> m_PacketParamFactory;
};
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_csc_filter.cpp b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_csc_filter.cpp
index e4fe4ef..0ed10c5 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_csc_filter.cpp
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_csc_filter.cpp
@@ -280,7 +280,7 @@
{
VP_RENDER_CHK_STATUS_RETURN(SetSubSampling());
}
-
+
m_sfcCSCParams->chromaDownSamplingVerticalCoef = (m_cscParams.chromaSitingOutput & MHW_CHROMA_SITING_VERT_CENTER) ?
MEDIASTATE_SFC_CHROMA_DOWNSAMPLING_COEF_4_OVER_8 : MEDIASTATE_SFC_CHROMA_DOWNSAMPLING_COEF_0_OVER_8;
m_sfcCSCParams->chromaDownSamplingHorizontalCoef = (m_cscParams.chromaSitingOutput & MHW_CHROMA_SITING_HORZ_CENTER) ?
@@ -653,7 +653,7 @@
MOS_STATUS HwFilterCscParameter::ConfigParams(HwFilter &hwFilter)
{
- return hwFilter.ConfigCscParam(m_Params);
+ return hwFilter.ConfigParam(m_Params);
}
MOS_STATUS HwFilterCscParameter::Initialize(HW_FILTER_CSC_PARAM ¶m)
@@ -756,6 +756,7 @@
paramCsc.vpExecuteCaps = vpExecuteCaps;
paramCsc.pPacketParamFactory = &m_PacketParamFactory;
paramCsc.cscParams = param;
+ paramCsc.pfnCreatePacketParam = PolicySfcCscHandler::CreatePacketParam;
HwFilterParameter *pHwFilterParam = GetHwFeatureParameterFromPool();
@@ -862,6 +863,7 @@
paramCsc.vpExecuteCaps = vpExecuteCaps;
paramCsc.pPacketParamFactory = &m_PacketParamFactory;
paramCsc.cscParams = param;
+ paramCsc.pfnCreatePacketParam = PolicyVeboxCscHandler::CreatePacketParam;
HwFilterParameter *pHwFilterParam = GetHwFeatureParameterFromPool();
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_csc_filter.h b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_csc_filter.h
index f828d5a..91f45b0 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_csc_filter.h
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_csc_filter.h
@@ -122,12 +122,8 @@
};
-struct HW_FILTER_CSC_PARAM
+struct HW_FILTER_CSC_PARAM : public HW_FILTER_PARAM
{
- FeatureType type;
- PVP_MHWINTERFACE pHwInterface;
- VP_EXECUTE_CAPS vpExecuteCaps;
- PacketParamFactoryBase *pPacketParamFactory;
FeatureParamCsc cscParams;
};
@@ -168,6 +164,18 @@
virtual bool IsFeatureEnabled(VP_EXECUTE_CAPS vpExecuteCaps);
virtual HwFilterParameter *CreateHwFilterParam(VP_EXECUTE_CAPS vpExecuteCaps, SwFilterPipe &swFilterPipe, PVP_MHWINTERFACE pHwInterface);
+ static VpPacketParameter* CreatePacketParam(HW_FILTER_PARAM& param)
+ {
+ if (param.type != FeatureTypeCscOnSfc)
+ {
+ VP_PUBLIC_ASSERTMESSAGE("Invalid Parameter for SFC CSC!");
+ return nullptr;
+ }
+
+ HW_FILTER_CSC_PARAM* cscParam = (HW_FILTER_CSC_PARAM*)(¶m);
+ return VpSfcCscParameter::Create(*cscParam);
+ }
+
private:
PacketParamFactory<VpSfcCscParameter> m_PacketParamFactory;
};
@@ -195,6 +203,18 @@
virtual bool IsFeatureEnabled(VP_EXECUTE_CAPS vpExecuteCaps);
virtual HwFilterParameter* CreateHwFilterParam(VP_EXECUTE_CAPS vpExecuteCaps, SwFilterPipe& swFilterPipe, PVP_MHWINTERFACE pHwInterface);
+ static VpPacketParameter* CreatePacketParam(HW_FILTER_PARAM& param)
+ {
+ if (param.type != FeatureTypeCscOnVebox)
+ {
+ VP_PUBLIC_ASSERTMESSAGE("Invalid Parameter for Vebox CSC!");
+ return nullptr;
+ }
+
+ HW_FILTER_CSC_PARAM* cscParam = (HW_FILTER_CSC_PARAM*)(¶m);
+ return VpVeboxCscParameter::Create(*cscParam);
+ }
+
private:
PacketParamFactory<VpVeboxCscParameter> m_PacketParamFactory;
};
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_dn_filter.cpp b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_dn_filter.cpp
index c7c079d..acabd53 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_dn_filter.cpp
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_dn_filter.cpp
@@ -140,7 +140,7 @@
MOS_STATUS HwFilterDnParameter::ConfigParams(HwFilter &hwFilter)
{
- return hwFilter.ConfigDnParam(m_Params);
+ return hwFilter.ConfigParam(m_Params);
}
MOS_STATUS HwFilterDnParameter::Initialize(HW_FILTER_DN_PARAM ¶m)
@@ -243,6 +243,7 @@
paramDn.vpExecuteCaps = vpExecuteCaps;
paramDn.pPacketParamFactory = &m_PacketParamFactory;
paramDn.dnParams = param;
+ paramDn.pfnCreatePacketParam = PolicyVeboxDnHandler::CreatePacketParam;
HwFilterParameter *pHwFilterParam = GetHwFeatureParameterFromPool();
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_dn_filter.h b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_dn_filter.h
index df5a2f9..0dfcb9b 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_dn_filter.h
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_dn_filter.h
@@ -63,14 +63,9 @@
PVEBOX_DN_PARAMS m_veboxDnParams = nullptr;
};
-
-struct HW_FILTER_DN_PARAM
+struct HW_FILTER_DN_PARAM : public HW_FILTER_PARAM
{
- FeatureType type;
- PVP_MHWINTERFACE pHwInterface;
- VP_EXECUTE_CAPS vpExecuteCaps;
- PacketParamFactoryBase *pPacketParamFactory;
- FeatureParamDenoise dnParams;
+ FeatureParamDenoise dnParams;
};
class HwFilterDnParameter : public HwFilterParameter
@@ -110,6 +105,18 @@
virtual bool IsFeatureEnabled(VP_EXECUTE_CAPS vpExecuteCaps);
virtual HwFilterParameter *CreateHwFilterParam(VP_EXECUTE_CAPS vpExecuteCaps, SwFilterPipe &swFilterPipe, PVP_MHWINTERFACE pHwInterface);
+ static VpPacketParameter* CreatePacketParam(HW_FILTER_PARAM& param)
+ {
+ if (param.type != FeatureTypeDnOnVebox)
+ {
+ VP_PUBLIC_ASSERTMESSAGE("Invalid parameter for Vebox De-Noise!");
+ return nullptr;
+ }
+
+ HW_FILTER_DN_PARAM* dnParam = (HW_FILTER_DN_PARAM*)(¶m);
+ return VpVeboxDnParameter::Create(*dnParam);
+ }
+
private:
PacketParamFactory<VpVeboxDnParameter> m_PacketParamFactory;
};
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_filter.h b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_filter.h
index fd88a09..14b2b97 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_filter.h
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_filter.h
@@ -311,6 +311,15 @@
}
}
};
+
+struct HW_FILTER_PARAM
+{
+ FeatureType type;
+ PVP_MHWINTERFACE pHwInterface;
+ VP_EXECUTE_CAPS vpExecuteCaps;
+ PacketParamFactoryBase *pPacketParamFactory = nullptr;
+ VpPacketParameter* (*pfnCreatePacketParam)(HW_FILTER_PARAM&) = nullptr;
+};
}
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_rot_mir_filter.cpp b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_rot_mir_filter.cpp
index 4a0d31d..36c5308 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_rot_mir_filter.cpp
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_rot_mir_filter.cpp
@@ -197,7 +197,7 @@
MOS_STATUS HwFilterRotMirParameter::ConfigParams(HwFilter &hwFilter)
{
- return hwFilter.ConfigRotMirParam(m_Params);
+ return hwFilter.ConfigParam(m_Params);
}
MOS_STATUS HwFilterRotMirParameter::Initialize(HW_FILTER_ROT_MIR_PARAM ¶m)
@@ -300,6 +300,7 @@
paramRotMir.vpExecuteCaps = vpExecuteCaps;
paramRotMir.pPacketParamFactory = &m_PacketParamFactory;
paramRotMir.rotMirParams = param;
+ paramRotMir.pfnCreatePacketParam = PolicySfcRotMirHandler::CreatePacketParam;
HwFilterParameter *pHwFilterParam = GetHwFeatureParameterFromPool();
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_rot_mir_filter.h b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_rot_mir_filter.h
index 9c67c77..3900935 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_rot_mir_filter.h
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_rot_mir_filter.h
@@ -87,12 +87,8 @@
PSFC_ROT_MIR_PARAMS m_sfcRotMirParams = nullptr;
};
-struct HW_FILTER_ROT_MIR_PARAM
+struct HW_FILTER_ROT_MIR_PARAM : public HW_FILTER_PARAM
{
- FeatureType type;
- PVP_MHWINTERFACE pHwInterface;
- VP_EXECUTE_CAPS vpExecuteCaps;
- PacketParamFactoryBase *pPacketParamFactory;
FeatureParamRotMir rotMirParams;
};
@@ -131,6 +127,18 @@
virtual ~PolicySfcRotMirHandler();
virtual bool IsFeatureEnabled(VP_EXECUTE_CAPS vpExecuteCaps);
virtual HwFilterParameter *CreateHwFilterParam(VP_EXECUTE_CAPS vpExecuteCaps, SwFilterPipe &swFilterPipe, PVP_MHWINTERFACE pHwInterface);
+
+ static VpPacketParameter* CreatePacketParam(HW_FILTER_PARAM& param)
+ {
+ if (param.type != FeatureTypeRotMirOnSfc)
+ {
+ VP_PUBLIC_ASSERTMESSAGE("Invalid parameter for SFC Rotation-Mirror!");
+ return nullptr;
+ }
+
+ HW_FILTER_ROT_MIR_PARAM* rotationParam = (HW_FILTER_ROT_MIR_PARAM*)(¶m);
+ return VpSfcRotMirParameter::Create(*rotationParam);
+ }
private:
PacketParamFactory<VpSfcRotMirParameter> m_PacketParamFactory;
};
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_scaling_filter.cpp b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_scaling_filter.cpp
index f6ccc68..3a9fcea 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_scaling_filter.cpp
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_scaling_filter.cpp
@@ -460,7 +460,7 @@
MOS_STATUS HwFilterScalingParameter::ConfigParams(HwFilter &hwFilter)
{
- return hwFilter.ConfigScalingParam(m_Params);
+ return hwFilter.ConfigParam(m_Params);
}
MOS_STATUS HwFilterScalingParameter::Initialize(HW_FILTER_SCALING_PARAM ¶m)
@@ -565,6 +565,7 @@
paramScaling.vpExecuteCaps = vpExecuteCaps;
paramScaling.pPacketParamFactory = &m_PacketParamFactory;
paramScaling.scalingParams = param;
+ paramScaling.pfnCreatePacketParam = PolicySfcScalingHandler::CreatePacketParam;
HwFilterParameter *pHwFilterParam = GetHwFeatureParameterFromPool();
diff --git a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_scaling_filter.h b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_scaling_filter.h
index b1d8570..47f5332 100644
--- a/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_scaling_filter.h
+++ b/media_driver/media_driver_next/agnostic/common/vp/hal/features/vp_scaling_filter.h
@@ -139,12 +139,8 @@
};
-struct HW_FILTER_SCALING_PARAM
+struct HW_FILTER_SCALING_PARAM : public HW_FILTER_PARAM
{
- FeatureType type;
- PVP_MHWINTERFACE pHwInterface;
- VP_EXECUTE_CAPS vpExecuteCaps;
- PacketParamFactoryBase *pPacketParamFactory;
FeatureParamScaling scalingParams;
};
@@ -184,6 +180,17 @@
virtual bool IsFeatureEnabled(VP_EXECUTE_CAPS vpExecuteCaps);
virtual HwFilterParameter *CreateHwFilterParam(VP_EXECUTE_CAPS vpExecuteCaps, SwFilterPipe &swFilterPipe, PVP_MHWINTERFACE pHwInterface);
+ static VpPacketParameter* CreatePacketParam(HW_FILTER_PARAM& param)
+ {
+ if (param.type != FeatureTypeScalingOnSfc)
+ {
+ VP_PUBLIC_ASSERTMESSAGE("Invalid parameter for SFC Scaling!");
+ return nullptr;
+ }
+
+ HW_FILTER_SCALING_PARAM* scalingParam = (HW_FILTER_SCALING_PARAM*)(¶m);
+ return VpSfcScalingParameter::Create(*scalingParam);
+ }
private:
PacketParamFactory<VpSfcScalingParameter> m_PacketParamFactory;
};