Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Węzeł przekształcania reprezentuje transformację Media Foundation (MFT), taką jak dekoder lub enkoder. Istnieje kilka różnych sposobów inicjowania węzła przekształcania:
- Od wskaźnika do MFT.
- Z CLSID-u dla MFT.
- Od wskaźnika do obiektu aktywacji dla MFT.
Jeśli zamierzasz załadować topologię wewnątrz ścieżki ochrony nośników (PMP), musisz użyć identyfikatora CLSID lub obiektu aktywacji, aby można było utworzyć MFT wewnątrz chronionego procesu. Pierwsze podejście (użycie wskaźnika do MFT) nie działa z PMP.
Tworzenie węzła transformacji z MFT
Aby utworzyć węzeł przekształcania na podstawie MFT, wykonaj następujące czynności:
- Utwórz instancję MFT i uzyskaj wskaźnik do interfejsu IMFTransform MFT.
- Wywołaj MFCreateTopologyNode z flagą MF_TOPOLOGY_TRANSFORM_NODE, aby utworzyć węzeł przekształcenia.
- Wywołaj IMFTopologyNode::SetObject i przekaż wskaźnik IMFTransform.
- Wywołaj IMFTopology::AddNode, aby dodać węzeł do topologii.
Poniższy przykład tworzy i inicjuje węzeł transformacji z 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;
}
Tworzenie węzła transformacji na podstawie identyfikatora CLSID
Aby utworzyć węzeł przekształcenia na podstawie identyfikatora CLSID, wykonaj następujące czynności:
- Znajdź identyfikator CLSID MFT. Możesz użyć funkcji MFTEnum, aby znaleźć identyfikatory CLSID dla MFT (takich jak dekodatory lub kodery) według kategorii. Możesz również znać identyfikator CLSID określonego MFT, którego chcesz użyć (na przykład, jeśli zaimplementowałeś własny niestandardowy MFT).
- Wywołaj MFCreateTopologyNode z flagą MF_TOPOLOGY_TRANSFORM_NODE, aby utworzyć węzeł przekształcenia.
- Ustaw atrybut MF_TOPONODE_TRANSFORM_OBJECTID w węźle. Wartość atrybutu to CLSID.
- Wywołaj IMFTopology::AddNode, aby dodać węzeł do topologii.
Poniższy przykład tworzy i inicjuje węzeł transformacji z 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;
}
Tworzenie węzła przekształcania na podstawie obiektu aktywacji
Niektóre MFT zapewniają obiekty aktywacji. Na przykład funkcja MFCreateWMAEncoderActivate zwraca obiekt aktywacji dla kodera Windows Media Audio (WMA). Dokładna funkcja zależy od MFT. Nie każdy MFT zapewnia obiekt aktywacji. Aby uzyskać więcej informacji, odnieś się do Activation Objects.
Obiekt aktywacji MFT można również uzyskać, wywołując funkcję MFTEnumEx.
Aby utworzyć węzeł przekształcenia na podstawie obiektu aktywacji, wykonaj następujące czynności:
- Utwórz obiekt aktywacji i uzyskaj wskaźnik do interfejsu IMFActivate tego obiektu.
- Wywołaj MFCreateTopologyNode z flagą MF_TOPOLOGY_TRANSFORM_NODE, aby utworzyć węzeł przekształcenia.
- Wywołaj IMFTopologyNode::SetObject i przekaż wskaźnik IMFActivate.
- Wywołaj IMFTopology::AddNode, aby dodać węzeł do topologii.
Poniższy przykład tworzy i inicjuje węzeł przekształcenia z obiektu aktywacyjnego.
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;
}
Tematy pokrewne