Класс CTransformFilter

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

Иерархия классов ctransformfilter

Класс CTransformFilter является базовым классом для реализации фильтров преобразования. Этот класс предназначен для реализации фильтра преобразования с одним входным и одним выходным контактом. В нем используются отдельные распределители для входного и выходного контактов. Чтобы создать фильтр, обрабатывающий данные на месте, используйте класс CTransInPlaceFilter .

Этот фильтр использует класс CTransformInputPin для входного контакта и класс CTransformOutputPin для выходного контакта. Как правило, переопределять эти классы закрепления не требуется. Большинство методов закрепления вызывают соответствующие методы в CTransformFilter классе , поэтому при необходимости можно переопределить методы фильтра. Фильтр создает оба контакта в методе CTransformFilter::GetPin . Если классы закрепления переопределяются, необходимо переопределить GetPin для создания пользовательских контактов.

Чтобы использовать этот класс, наследуйте новый класс от CTransformFilter и реализуйте следующие методы:

В зависимости от требований фильтра может потребоваться переопределить и другие методы.

Типы мультимедиа

Входной контакт этого фильтра не предлагает никаких типов мультимедиа; Он использует фильтр вышестоящий, чтобы предложить типы мультимедиа для подключения. Причина такой структуры заключается в том, что в большинстве случаев фильтр вышестоящий может предоставить дополнительные сведения о формате. Например, при использовании форматов видео фильтр вышестоящий знает размеры видео и частоту кадров, тогда как фильтр преобразования не может определить эти сведения. Если вы хотите изменить это поведение, переопределите метод GetMediaType для пин-кода ввода. Когда фильтр вышестоящий предлагает тип мультимедиа, входной контакт вызывает метод CheckInputType фильтра (чисто виртуальный).

Пока входной контакт не будет подключен, выходной контакт отклоняет все подключения и не возвращает предпочтительные типы мультимедиа. После подключения входного контакта выходной контакт возвращает список предпочтительных типов путем вызова метода GetMediaType фильтра. Он проверяет типы выходных данных для подключения с помощью метода CheckTransform фильтра. (Оба метода являются чисто виртуальными.) Как правило, тип входных данных частично определяет допустимые типы выходных данных.

В зависимости от фильтра может потребоваться зарегистрировать некоторые поддерживаемые фильтром типы мультимедиа, чтобы объект Filter Mapper мог найти фильтр. Дополнительные сведения см. в разделе Регистрация фильтров DirectShow.

Потоковые операторы

Этот класс не помещет выходные данные в очередь. Каждый выходной пример доставляется внутри метода IMemInputPin::Receive . Метод Receive вызывает метод Transform фильтра (также чисто виртуальный) для обработки данных.

Дополнительные сведения об использовании этого класса см. в разделе Написание фильтров преобразования.

Защищенные переменные-члены Описание
m_bEOSDelivered Флаг, указывающий, отправил ли фильтр уведомление об окончании потока.
m_bSampleSkipped Флаг, указывающий, был ли удален последний образец.
m_bQualityChanged Флаг, указывающий, изменилось ли качество.
m_csFilter Критический раздел, защищающий состояние фильтра.
m_csReceive Критический раздел, защищающий состояние потоковой передачи.
m_pInput Указатель на входной контакт.
m_pOutput Указатель на выходной контакт.
Открытые методы Описание
CTransformFilter Метод конструктора.
~ CTransformFilter Метод деструктора.
GetPinCount Извлекает количество закреплений в фильтре. Виртуальной.
GetPin Извлекает закрепление. Виртуальной.
Преобразование Преобразует входной пример для создания выходного примера. Виртуальной.
StartStreaming Вызывается, когда фильтр переключается в приостановленное состояние. Виртуальной.
StopStreaming Вызывается, когда фильтр переходит в остановленное состояние. Виртуальной.
AlterQuality Уведомляет фильтр о запросе изменения качества. Виртуальной.
SetMediaType Вызывается, когда тип носителя задан на одном из контактов фильтра. Виртуальной.
CheckConnect Определяет, подходит ли закрепление. Виртуальной.
BreakConnect Освобождает контакт из подключения. Виртуальной.
CompleteConnect Завершает закрепление подключения. Виртуальной.
Receive Получает пример мультимедиа, обрабатывает его и доставляет выходной пример в нисходящий фильтр. Виртуальной.
InitializeOutputSample Извлекает новый выходной пример и инициализирует его.
EndOfStream Уведомляет фильтр о том, что от входного контакта не ожидаются дополнительные данные. Виртуальной.
BeginFlush Начинает операцию очистки. Виртуальной.
EndFlush Завершает операцию очистки. Виртуальной.
NewSegment Уведомляет фильтр о том, что примеры мультимедиа, полученные после этого вызова, сгруппированы как сегмент. Виртуальной.
Чистые виртуальные методы Описание
CheckInputType Проверяет, является ли указанный тип носителя допустимым для входных данных.
CheckTransform Проверяет, совместим ли тип входного носителя с типом выходного носителя.
DecideBufferSize Задает требования к буферу выходного контакта.
GetMediaType Извлекает предпочтительный тип носителя для выходного пин-кода.
Методы IMediaFilter Описание
Остановить Останавливает фильтр.
Пауза Приостанавливает фильтр.
Методы IBaseFilter Описание
FindPin Извлекает пин-код с указанным идентификатором.

Требования

Требование Значение
Заголовок
Transfrm.h (включая Streams.h)
Библиотека
Strmbase.lib (розничные сборки);
Strmbasd.lib (отладочные сборки)