Share via


ソース ノードの作成

ソース ノードは、メディア ソースからの 1 つのストリームを表します。 ソース ノードには、メディア ソース、プレゼンテーション記述子、およびストリーム記述子へのポインターが含まれている必要があります。

トポロジにソース ノードを追加するには、次の操作を行います。

  1. MF_TOPOLOGY_SOURCESTREAM_NODE フラグを指定して MFCreateTopologyNode を呼び出して、ソース ノードを作成します。
  2. メディア ソースへのポインターを使用して、ノードに MF_TOPONODE_SOURCE 属性を設定します。
  3. メディア ソースのプレゼンテーション記述子へのポインターを使用して、ノードに MF_TOPONODE_PRESENTATION_DESCRIPTOR 属性を設定します。
  4. ノードに MF_TOPONODE_STREAM_DESCRIPTOR 属性を設定し、ストリームのストリーム記述子へのポインターを設定します。
  5. IMFTopology::AddNode を呼び出して、ノードをトポロジに追加します。

次の例では、ソース ノードを作成して初期化します。

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

トポロジの作成

メディア ソース

トポロジ

IMFTopologyNode