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:

  1. Chiamare MFCreateTopologyNode con il flag MF_TOPOLOGY_SOURCESTREAM_NODE per creare il nodo di origine.
  2. Impostare l'attributo MF_TOPONODE_SOURCE nel nodo, con un puntatore all'origine multimediale.
  3. Impostare l'attributo MF_TOPONODE_PRESENTATION_DESCRIPTOR nel nodo, con un puntatore al descrittore di presentazione dell'origine multimediale.
  4. Impostare l'attributo MF_TOPONODE_STREAM_DESCRIPTOR nel nodo, con un puntatore al descrittore di flusso per il flusso.
  5. 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;
}

Creazione di topologie

Origini multimediali

Topologie

IMFTopologyNode