Общие сведения о базовых классах фильтра
[Функция, связанная с этой страницей 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 структурами. |