Класс CTransformFilter
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]
Класс CTransformFilter
является базовым классом для реализации фильтров преобразования. Этот класс предназначен для реализации фильтра преобразования с одним входным и одним выходным контактом. В нем используются отдельные распределители для входного и выходного контактов. Чтобы создать фильтр, обрабатывающий данные на месте, используйте класс CTransInPlaceFilter .
Этот фильтр использует класс CTransformInputPin для входного контакта и класс CTransformOutputPin для выходного контакта. Как правило, переопределять эти классы закрепления не требуется. Большинство методов закрепления вызывают соответствующие методы в CTransformFilter
классе , поэтому при необходимости можно переопределить методы фильтра. Фильтр создает оба контакта в методе CTransformFilter::GetPin . Если классы закрепления переопределяются, необходимо переопределить GetPin для создания пользовательских контактов.
Чтобы использовать этот класс, наследуйте новый класс от CTransformFilter
и реализуйте следующие методы:
- CTransformFilter::CheckInputType
- CTransformFilter::CheckTransform
- CTransformFilter::D ecideBufferSize
- CTransformFilter::GetMediaType
- CTransformFilter::Transform
В зависимости от требований фильтра может потребоваться переопределить и другие методы.
Типы мультимедиа
Входной контакт этого фильтра не предлагает никаких типов мультимедиа; Он использует фильтр вышестоящий, чтобы предложить типы мультимедиа для подключения. Причина такой структуры заключается в том, что в большинстве случаев фильтр вышестоящий может предоставить дополнительные сведения о формате. Например, при использовании форматов видео фильтр вышестоящий знает размеры видео и частоту кадров, тогда как фильтр преобразования не может определить эти сведения. Если вы хотите изменить это поведение, переопределите метод 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 | Извлекает пин-код с указанным идентификатором. |
Требования
Требование | Значение |
---|---|
Заголовок |
|
Библиотека |
|