Поделиться через


Общие сведения о базовых классах фильтра

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

В этой статье описывается библиотека базовых классов Microsoft DirectShow. Эта библиотека предназначена для разработчиков фильтров, но средства записи приложений могут оказаться полезными для некоторых вспомогательных классов и служебных программ отладки. Однако библиотека базовых классов не требуется для программирования DirectShow.

В следующих разделах перечислены наиболее важные базовые классы в библиотеке.

Классы COM-объектов

Следующие классы поддерживают создание COM-объектов:

Класс Описание
CBaseObject Базовый класс объекта.
CUnknown Реализует интерфейс IUnknown .

 

Большинство классов DirectShow являются производными от CBaseObject. Этот класс предоставляет помощь в отладке, сохраняя количество всех активных объектов в библиотеке DLL во время выполнения. В отладочных сборках библиотека DLL утверждает, выгружается ли она, а количество объектов больше нуля. Это упрощает отслеживание утечек, вызванных проблемами подсчета ссылок.

Все базовые классы, поддерживающие COM-интерфейсы, являются производными от CUnknown, которая наследует CBaseObject. Класс CUnknown поддерживает подсчет ссылок, QueryInterface и агрегирование. Дополнительные сведения см. в разделе How to Implement IUnknown.

Фильтрация и закрепление классов

Следующие классы поддерживают создание объектов фильтра и закрепления DirectShow:

Класс Описание
CBaseFilter Базовый класс для фильтров. Реализует интерфейс IBaseFilter .
CBasePin Базовый класс для контактов. Реализует интерфейсы IPin и IQualityControl .
CBaseInputPin Базовый класс для входных контактов, использующих локальный транспорт памяти. Реализует интерфейс IMemInputPin . Этот класс является производным от CBasePin.
CBaseOutputPin Базовый класс для выходных контактов, использующих подключения IMemInputPin . Этот класс является производным от CBasePin.

 

Следующие классы полезны для создания более специализированных типов фильтров:

Класс Описание
CSource Базовый класс для исходных фильтров. Этот класс предназначен для создания источников push-уведомлений. Он не подходит для источников по запросу, таких как средства чтения файлов. Чтобы создать выходные контакты для этого класса, используйте класс CSourceStream .
CTransformFilter Базовый класс для фильтров преобразования. Этот класс выполняет копирование данных. Контактами для этого класса являются CTransformInputPin и CTransformOutputPin.
CTransInPlaceFilter Базовый класс для фильтров преобразования, которые не копируют данные. Этот класс выполняет обработку данных непосредственно во входных данных перед их передачей. Контактами для этого класса являются CTransInPlaceInputPin и CTransInPlaceOutputPin.
CVideoTransformFilter Базовый класс для фильтров преобразования видео. Этот класс является производным от CTransformFilter и добавляет поддержку для контроля качества.
CBaseRenderer Базовый класс для фильтров отрисовщика. Входной контакт для этого класса — CRendererInputPin.
CBaseVideoRenderer Базовый класс для отрисовщиков видео. Этот класс является производным от CBaseRenderer.

 

Чтобы использовать эти классы, необходимо создать собственный класс и написать код для поддержки функций, характерных для фильтра. Чем более специализированный базовый класс, тем меньше кода потребуется написать в производном классе.

Вспомогательные объекты

Следующие классы реализуют вспомогательные объекты, используемые фильтрами и закреплениями. Большинство из этих классов можно использовать, не наследуя от них новые классы:

Класс Описание
CPullPin Вспомогательный объект для входных контактов в фильтрах синтаксического анализа. Поддерживает подключения IAsyncReader с источниками извлечения.
COutputQueue Вспомогательный объект для выходных контактов, который помещает в очередь образцы для доставки в рабочем потоке.
CSourceSeeking Объект справки для реализации поиска в исходном фильтре с одним выходным закреплением. (Этот класс не предназначен для фильтров с несколькими контактами, таких как средства синтаксического анализа.)
CEnumPins Объект перечислителя для перечисления закреплений на фильтре. Реализует интерфейс IEnumPins .
CEnumMediaTypes Объект перечислителя для перечисления предпочтительных типов мультимедиа в закреплении. Реализует интерфейс IEnumMediaTypes .
CMemAllocator Объект распределителя памяти. Реализует интерфейс IMemAllocator .
CMediaSample Пример объекта мультимедиа. Реализует интерфейс IMediaSample2 .
CBaseReferenceClock Базовый класс для эталонных часов. Реализует интерфейс IReferenceClock .
CMediaType Вспомогательный объект для управления AM_MEDIA_TYPE структурами.