Creazione di nodi di origine
Un nodo di origine rappresenta un flusso da un'origine multimediale. Il nodo di origine deve contenere puntatori all'origine multimediale, al descrittore di presentazione e al descrittore di flusso.
Per aggiungere un nodo di origine a una topologia, eseguire le operazioni seguenti:
- Chiamare MFCreateTopologyNode con il flag MF_TOPOLOGY_SOURCESTREAM_NODE per creare il nodo di origine.
- Impostare l'attributo MF_TOPONODE_SOURCE nel nodo, con un puntatore all'origine multimediale.
- Impostare l'attributo MF_TOPONODE_PRESENTATION_DESCRIPTOR nel nodo, con un puntatore al descrittore di presentazione dell'origine multimediale.
- Impostare l'attributo MF_TOPONODE_STREAM_DESCRIPTOR nel nodo, con un puntatore al descrittore di flusso per il flusso.
- Chiamare IMFTopology::AddNode per aggiungere il nodo alla topologia.
Nell'esempio seguente viene creato e inizializzato un nodo di origine.
// Add a source node to a topology.
HRESULT AddSourceNode(
IMFTopology *pTopology, // Topology.
IMFMediaSource *pSource, // Media source.
IMFPresentationDescriptor *pPD, // Presentation descriptor.
IMFStreamDescriptor *pSD, // Stream descriptor.
IMFTopologyNode **ppNode) // Receives the node pointer.
{
IMFTopologyNode *pNode = NULL;
// Create the node.
HRESULT hr = MFCreateTopologyNode(MF_TOPOLOGY_SOURCESTREAM_NODE, &pNode);
if (FAILED(hr))
{
goto done;
}
// Set the attributes.
hr = pNode->SetUnknown(MF_TOPONODE_SOURCE, pSource);
if (FAILED(hr))
{
goto done;
}
hr = pNode->SetUnknown(MF_TOPONODE_PRESENTATION_DESCRIPTOR, pPD);
if (FAILED(hr))
{
goto done;
}
hr = pNode->SetUnknown(MF_TOPONODE_STREAM_DESCRIPTOR, pSD);
if (FAILED(hr))
{
goto done;
}
// Add the node to the topology.
hr = pTopology->AddNode(pNode);
if (FAILED(hr))
{
goto done;
}
// Return the pointer to the caller.
*ppNode = pNode;
(*ppNode)->AddRef();
done:
SafeRelease(&pNode);
return hr;
}
Argomenti correlati