Compartir a través de


Creación de nodos de origen

Un nodo de origen representa una secuencia de un origen multimedia. El nodo de origen debe contener punteros al origen multimedia, al descriptor de presentación y al descriptor de secuencia.

Para agregar un nodo de origen a una topología, haga lo siguiente:

  1. Llame a MFCreateTopologyNode con la marca MF_TOPOLOGY_SOURCESTREAM_NODE para crear el nodo de origen.
  2. Establezca el atributo MF_TOPONODE_SOURCE en el nodo, con un puntero al origen multimedia.
  3. Establezca el atributo MF_TOPONODE_PRESENTATION_DESCRIPTOR en el nodo, con un puntero al descriptor de presentación del origen multimedia.
  4. Establezca el atributo MF_TOPONODE_STREAM_DESCRIPTOR en el nodo, con un puntero al descriptor de secuencia para la secuencia.
  5. Llame a IMFTopology::AddNode para agregar el nodo a la topología.

En el ejemplo siguiente se crea e inicializa un nodo de origen.

// 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;
}

Creación de topologías

Orígenes multimedia

Topologías

IMFTopologyNode