ソース ノードの作成
ソース ノードは、メディア ソースからの 1 つのストリームを表します。 ソース ノードには、メディア ソース、プレゼンテーション記述子、およびストリーム記述子へのポインターが含まれている必要があります。
トポロジにソース ノードを追加するには、次の操作を行います。
- MF_TOPOLOGY_SOURCESTREAM_NODE フラグを指定して MFCreateTopologyNode を呼び出して、ソース ノードを作成します。
- メディア ソースへのポインターを使用して、ノードに MF_TOPONODE_SOURCE 属性を設定します。
- メディア ソースのプレゼンテーション記述子へのポインターを使用して、ノードに MF_TOPONODE_PRESENTATION_DESCRIPTOR 属性を設定します。
- ノードに MF_TOPONODE_STREAM_DESCRIPTOR 属性を設定し、ストリームのストリーム記述子へのポインターを設定します。
- 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;
}
関連トピック