创建源节点
源节点表示来自媒体源的一个流。 源节点必须包含指向媒体源、演示文稿描述符和流描述符的指针。
若要将源节点添加到拓扑,请执行以下操作:
- 使用 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;
}
相关主题