Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен на MediaPlayer, IMFMediaEngineи захват аудио и видео в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и захват аудио и видео в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Следующая функция создает фильтр с указанным идентификатором класса (CLSID) и добавляет его в граф фильтров:
// 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;
}
Заметка
В этом примере функция SafeRelease используется для выпуска указателя IBaseFilter.
Функция вызывает CoCreateInstance для создания фильтра, а затем вызывает IFilterGraph::AddFilter, чтобы добавить фильтр в граф. В следующем примере кода эта функция используется для добавления фильтра AVI Mux в граф:
IBaseFilter *pMux;
hr = AddFilterByCLSID(pGraph, CLSID_AviDest, L"AVI Mux", &pMux, NULL);
if (SUCCEEDED(hr))
{
/* ... */
pMux->Release();
}
Обратите внимание, что некоторые фильтры нельзя создать с CoCreateInstance. Это часто происходит с фильтрами, которые управляют другими компонентами программного обеспечения. Например, фильтр AVI Compressor — это оболочка для видеокодеков, а фильтр WDM Video Capture — это оболочка для драйверов видеозахвата WDM. Эти фильтры необходимо создать с помощью системного устройства перечислителя или Filter Mapper. Дополнительные сведения см. в разделе Перечисление устройств и фильтров.
Связанные разделы