Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een transformatieknooppunt vertegenwoordigt een Media Foundation-transformatie (MFT), zoals een decoder of encoder. Er zijn verschillende manieren om een transformatieknooppunt te initialiseren:
- Van een aanwijzer naar de MFT.
- Van een CLSID voor de MFT.
- Van een aanwijzer naar een activeringsobject voor de MFT.
Als u de topologie in het beveiligde mediapad (PMP) gaat laden, moet u de CLSID of een activeringsobject gebruiken, zodat de MFT binnen het beveiligde proces kan worden gemaakt. De eerste benadering (met behulp van een aanwijzer naar de MFT) werkt niet met de PMP.
Een transformatieknooppunt maken op basis van een MFT
Ga als volgt te werk om een transformatieknooppunt te maken op basis van een MFT:
- Maak een exemplaar van de MFT en verkrijg een aanwijzer voor de IMFTransform interface van de MFT.
- Roep MFCreateTopologyNode aan met de vlag MF_TOPOLOGY_TRANSFORM_NODE om het transformatieknooppunt te maken.
- Roep IMFTopologyNode::SetObject aan en geef de IMFTransform aanwijzer door.
- Roep IMFTopology aan:AddNode om het knooppunt toe te voegen aan de topologie.
In het volgende voorbeeld wordt een transformatieknooppunt gemaakt en geïnitialiseerd op basis van een MFT.
HRESULT AddTransformNode(
IMFTopology *pTopology, // Topology.
IMFTransform *pMFT, // MFT.
IMFTopologyNode **ppNode // Receives the node pointer.
)
{
*ppNode = NULL;
IMFTopologyNode *pNode = NULL;
// Create the node.
HRESULT hr = MFCreateTopologyNode(MF_TOPOLOGY_TRANSFORM_NODE, &pNode);
// Set the object pointer.
if (SUCCEEDED(hr))
{
hr = pNode->SetObject(pMFT);
}
// Add the node to the topology.
if (SUCCEEDED(hr))
{
hr = pTopology->AddNode(pNode);
}
// Return the pointer to the caller.
if (SUCCEEDED(hr))
{
*ppNode = pNode;
(*ppNode)->AddRef();
}
SafeRelease(&pNode);
return hr;
}
Een transformatieknooppunt maken op basis van een CLSID
Ga als volgt te werk om een transformatieknooppunt te maken op basis van een CLSID:
- Zoek de CLSID van de MFT. U kunt de functie MFTEnum gebruiken om de CLSID's van MMFT's per categorie te vinden, zoals decoders of coderingsprogramma's. Mogelijk kent u ook de CLSID van een bepaalde MFT die u wilt gebruiken (bijvoorbeeld als u uw eigen aangepaste MFT hebt geïmplementeerd).
- Roep MFCreateTopologyNode aan met de vlag MF_TOPOLOGY_TRANSFORM_NODE om het transformatieknooppunt te maken.
- Stel het kenmerk MF_TOPONODE_TRANSFORM_OBJECTID op het knooppunt in. De kenmerkwaarde is de CLSID.
- Roep IMFTopology aan:AddNode om het knooppunt toe te voegen aan de topologie.
In het volgende voorbeeld wordt een transformatieknooppunt gemaakt en geïnitialiseerd op basis van een CLSID.
HRESULT AddTransformNode(
IMFTopology *pTopology, // Topology.
const CLSID& clsid, // CLSID of the MFT.
IMFTopologyNode **ppNode // Receives the node pointer.
)
{
*ppNode = NULL;
IMFTopologyNode *pNode = NULL;
// Create the node.
HRESULT hr = MFCreateTopologyNode(MF_TOPOLOGY_TRANSFORM_NODE, &pNode);
// Set the CLSID attribute.
if (SUCCEEDED(hr))
{
hr = pNode->SetGUID(MF_TOPONODE_TRANSFORM_OBJECTID, clsid);
}
// Add the node to the topology.
if (SUCCEEDED(hr))
{
hr = pTopology->AddNode(pNode);
}
// Return the pointer to the caller.
if (SUCCEEDED(hr))
{
*ppNode = pNode;
(*ppNode)->AddRef();
}
SafeRelease(&pNode);
return hr;
}
Een transformatieknooppunt maken op basis van een activeringsobject
Sommige MMFT's bieden activeringsobjecten. De functie MFCreateWMAEncoderActivate retourneert bijvoorbeeld een activeringsobject voor de Encoder Windows Media Audio (WMA). De exacte functie is afhankelijk van de MFT. Niet elke MFT biedt een activeringsobject. Zie Activeringsobjectenvoor meer informatie.
U kunt ook een MFT-activeringsobject ophalen door de functie MFTEnumEx aan te roepen.
Ga als volgt te werk om een transformatieknooppunt te maken op basis van een activeringsobject:
- Maak het activeringsobject en ontvang een aanwijzer naar de IMFActivate interface van het activeringsobject.
- Roep MFCreateTopologyNode aan met de vlag MF_TOPOLOGY_TRANSFORM_NODE om het transformatieknooppunt te maken.
- Roep IMFTopologyNode::SetObject aan en geef de IMFActivate aanwijzer door.
- Roep IMFTopology aan:AddNode om het knooppunt toe te voegen aan de topologie.
In het volgende voorbeeld wordt een transformatieknooppunt gemaakt en geïnitialiseerd op basis van een activeringsobject.
HRESULT AddTransformNode(
IMFTopology *pTopology, // Topology.
IMFActivate *pActivate, // MFT activation object.
IMFTopologyNode **ppNode // Receives the node pointer.
)
{
*ppNode = NULL;
IMFTopologyNode *pNode = NULL;
// Create the node.
HRESULT hr = MFCreateTopologyNode(MF_TOPOLOGY_TRANSFORM_NODE, &pNode);
// Set the object pointer.
if (SUCCEEDED(hr))
{
hr = pNode->SetObject(pActivate);
}
// Add the node to the topology.
if (SUCCEEDED(hr))
{
hr = pTopology->AddNode(pNode);
}
// Return the pointer to the caller.
if (SUCCEEDED(hr))
{
*ppNode = pNode;
(*ppNode)->AddRef();
}
SafeRelease(&pNode);
return hr;
}
Verwante onderwerpen