Объявление сведений о фильтре
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
Первым шагом является объявление сведений о фильтре, если это необходимо. DirectShow определяет следующие структуры для описания фильтров, контактов и типов мультимедиа:
Структура | Описание |
---|---|
AMOVIESETUP_FILTER | Описывает фильтр. |
AMOVIESETUP_PIN | Описывает закрепление. |
AMOVIESETUP_MEDIATYPE | Описывает тип носителя. |
Эти структуры являются вложенными. Структура AMOVEIESETUP_FILTER имеет указатель на массив AMOVIESETUP_PIN структур, и каждая из них имеет указатель на массив AMOVEIESETUP_MEDIATYPE структур. В совокупности эти структуры предоставляют достаточно информации для поиска фильтра интерфейсом IFilterMapper2 . Они не являются полным описанием фильтра. Например, если фильтр создает несколько экземпляров одного контакта, следует объявить только одну структуру AMOVIESETUP_PIN для этого контакта. Кроме того, фильтр не требуется для поддержки каждой комбинации типов носителей, которые он регистрирует; не требуется регистрировать все поддерживаемые типы носителей.
Объявите структуры настройки как глобальные переменные в библиотеке DLL. В следующем примере показан фильтр с одним выходным закреплением:
static const WCHAR g_wszName[] = L"Some Filter";
AMOVIESETUP_MEDIATYPE sudMediaTypes[] = {
{ &MEDIATYPE_Video, &MEDIASUBTYPE_RGB24 },
{ &MEDIATYPE_Video, &MEDIASUBTYPE_RGB32 },
};
AMOVIESETUP_PIN sudOutputPin = {
L"", // Obsolete, not used.
FALSE, // Is this pin rendered?
TRUE, // Is it an output pin?
FALSE, // Can the filter create zero instances?
FALSE, // Does the filter create multiple instances?
&GUID_NULL, // Obsolete.
NULL, // Obsolete.
2, // Number of media types.
sudMediaTypes // Pointer to media types.
};
AMOVIESETUP_FILTER sudFilterReg = {
&CLSID_SomeFilter, // Filter CLSID.
g_wszName, // Filter name.
MERIT_NORMAL, // Merit.
1, // Number of pin types.
&sudOutputPin // Pointer to pin information.
};
Имя фильтра объявляется как статическая глобальная переменная, так как оно будет использоваться в другом месте.
Связанные темы