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