Sobre o Construtor de Gráficos de Captura
[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]
Um grafo de filtro que executa a captura de áudio ou vídeo é chamado de grafo de captura. Os grafos de captura geralmente são mais complicados do que os grafos de reprodução de arquivos. Para facilitar a criação de grafos de captura para aplicativos, o DirectShow fornece um objeto auxiliar chamado Capture Graph Builder. O Capture Graph Builder expõe a interface ICaptureGraphBuilder2 , que contém métodos para criar e controlar um grafo de captura. O diagrama a seguir ilustra o Capture Graph Builder e a interface ICaptureGraphBuilder2 .
Comece chamando CoCreateInstance para criar novas instâncias do Capture Graph Builder e do Gerenciador de Grafo de Filtro. Em seguida, inicialize o Construtor de Grafo de Captura chamando ICaptureGraphBuilder2::SetFiltergraph com um ponteiro para a interface IGraphBuilder do Gerenciador de Gráficos de Filtro. O diagrama a seguir ilustra esse processo.
O código a seguir mostra uma função auxiliar para executar estas etapas:
HRESULT InitCaptureGraphBuilder(
IGraphBuilder **ppGraph, // Receives the pointer.
ICaptureGraphBuilder2 **ppBuild // Receives the pointer.
)
{
if (!ppGraph || !ppBuild)
{
return E_POINTER;
}
IGraphBuilder *pGraph = NULL;
ICaptureGraphBuilder2 *pBuild = NULL;
// Create the Capture Graph Builder.
HRESULT hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL,
CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void**)&pBuild );
if (SUCCEEDED(hr))
{
// Create the Filter Graph Manager.
hr = CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void**)&pGraph);
if (SUCCEEDED(hr))
{
// Initialize the Capture Graph Builder.
pBuild->SetFiltergraph(pGraph);
// Return both interface pointers to the caller.
*ppBuild = pBuild;
*ppGraph = pGraph; // The caller must release both interfaces.
return S_OK;
}
else
{
pBuild->Release();
}
}
return hr; // Failed
}
Ao longo desta seção sobre captura de vídeo, supõe-se que você esteja usando o Capture Graph Builder para criar o grafo de captura. No entanto, é possível criar grafos de captura inteiramente usando métodos IGraphBuilder. No entanto, isso é considerado um tópico avançado e os métodos capture graph builder são preferenciais. Para obter mais informações, consulte Tópicos avançados de captura.
Tópicos relacionados