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


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

[Функция, связанная с этой страницей, 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 с pull-источниками.
COutputQueue Вспомогательный объект для выходных контактов, которые ставят образцы в очередь для доставки в потоке выполнителя.
CSourceSeeking Вспомогательный объект для реализации поисковых операций в исходном фильтре с одним выходным контактом. (Этот класс не предназначен для фильтров с несколькими контактами, такими как парсеры.)
CEnumPins Объект перечислителя для перечисления контактов в фильтре. Реализует интерфейс IEnumPins.
CEnumMediaTypes Объект перечислителя для перечисления предпочтительных типов носителей на закреплении. Реализует интерфейс IEnumMediaTypes.
CMemAllocator Объект распределителя памяти. Реализует интерфейс IMemAllocator.
CMediaSample Пример объекта мультимедиа. Реализует интерфейс IMediaSample2.
CBaseReferenceClock Базовый класс для эталонных часов. Реализует интерфейс IReferenceClock.
CMediaType Вспомогательный объект для управления структурами AM_MEDIA_TYPE.