Création de nœuds sources

Un nœud source représente un flux d’une source multimédia. Le nœud source doit contenir des pointeurs vers la source multimédia, le descripteur de présentation et le descripteur de flux.

Pour ajouter un nœud source à une topologie, procédez comme suit :

  1. Appelez MFCreateTopologyNode avec l’indicateur MF_TOPOLOGY_SOURCESTREAM_NODE pour créer le nœud source.
  2. Définissez l’attribut MF_TOPONODE_SOURCE sur le nœud, avec un pointeur vers la source multimédia.
  3. Définissez l’attribut MF_TOPONODE_PRESENTATION_DESCRIPTOR sur le nœud, avec un pointeur vers le descripteur de présentation de la source multimédia.
  4. Définissez l’attribut MF_TOPONODE_STREAM_DESCRIPTOR sur le nœud, avec un pointeur vers le descripteur de flux pour le flux.
  5. Appelez IMFTopology::AddNode pour ajouter le nœud à la topologie.

L’exemple suivant crée et initialise un nœud source.

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

Création de topologies

Sources multimédias

Topologies

IMFTopologyNode