Adicionar um filtro por CLSID
[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in 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 Audio/Video Capture in 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.]
A função a seguir cria um filtro com um CLSID (identificador de classe) especificado e o adiciona ao grafo de filtro:
// Create a filter by CLSID and add it to the graph.
HRESULT AddFilterByCLSID(
IGraphBuilder *pGraph, // Pointer to the Filter Graph Manager.
REFGUID clsid, // CLSID of the filter to create.
IBaseFilter **ppF, // Receives a pointer to the filter.
LPCWSTR wszName // A name for the filter (can be NULL).
)
{
*ppF = 0;
IBaseFilter *pFilter = NULL;
HRESULT hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pFilter));
if (FAILED(hr))
{
goto done;
}
hr = pGraph->AddFilter(pFilter, wszName);
if (FAILED(hr))
{
goto done;
}
*ppF = pFilter;
(*ppF)->AddRef();
done:
SafeRelease(&pFilter);
return hr;
}
Observação
Este exemplo usa a função SafeRelease para liberar o ponteiro IBaseFilter .
A função chama CoCreateInstance para criar o filtro e, em seguida, chama IFilterGraph::AddFilter para adicionar o filtro ao grafo. O exemplo de código a seguir usa essa função para adicionar o filtro AVI Mux ao grafo:
IBaseFilter *pMux;
hr = AddFilterByCLSID(pGraph, CLSID_AviDest, L"AVI Mux", &pMux, NULL);
if (SUCCEEDED(hr))
{
/* ... */
pMux->Release();
}
Observe que alguns filtros não podem ser criados com CoCreateInstance. Geralmente, esse é o caso de filtros que gerenciam outros componentes de software. Por exemplo, o filtro AVI Compressor é um wrapper para codecs de vídeo e o filtro captura de vídeo WDM é um wrapper para drivers de captura WDM. Esses filtros devem ser criados usando o Enumerador de Dispositivo do Sistema ou o Mapeador de Filtro. Para obter mais informações, consulte Enumerando dispositivos e filtros.
Tópicos relacionados