Фильтр отрисовщика видео
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]
Фильтр отрисовщика видео — это надежный универсальный отрисовщик видео.
Примечание
В Windows XP и более поздних версиях отрисовщик видео по умолчанию — фильтр 7 (VMR-7). VmR-7 и Video Renderer имеют понятное имя "Видеорисовщик". На более ранних платформах отрисовщик видео является отрисовщиком по умолчанию. См. раздел Выбор правильного отрисовщика.
Отрисовщик видео использует поверхности DirectDraw и наложения, если видео карта их поддерживает. Диспетчер фильтров графов предоставляет интерфейс IVideoWindow , который позволяет приложениям задавать и извлекать свойства в отрисовщике видео. При использовании новых видеоадаптеров видео отрисовщик поддерживает отрисовку в полноэкранном режиме. В противном случае диспетчер фильтров графов автоматически переключается на фильтр полноэкранного отрисовщика в полноэкранном режиме. Дополнительные сведения см. в разделе IVideoWindow::p ut_FullScreenMode .
Важно!
Как правило, окно видео этого фильтра обрабатывает сообщения в рабочем потоке, созданном диспетчером фильтров графов. Если приложение напрямую создает фильтр с помощью CoCreateInstance, окно видео обрабатывает сообщения в потоке приложения. В этом случае поток приложения должен иметь цикл сообщений для отправки сообщений в окно видео. Кроме того, поток не должен завершать работу до окончательного вызова Release в отрисовщик видео, который происходит при завершении работы диспетчера фильтров Graph. В противном случае приложение может оказаться взаимоблокировкой.
Метка | Значение |
---|---|
Интерфейсы фильтрации | IBaseFilter, IBasicVideo, IBasicVideo2, IDirectDrawVideo, IKsPropertySet, IMediaPosition, IMediaSeeking, IQualityControl, IQualProp, IVideoWindow |
Типы носителей входных контактов | Несжатые форматы видео. |
Интерфейсы ввода-закрепления | IMemInputPin, IOverlay, IPin, IPinConnection, IQualityControl |
Типы носителей выводных контактов | Не применяется |
Интерфейсы вывода контактов | Не применяется |
Фильтр CLSID | CLSID_VideoRenderer |
CLSID страницы свойств | Страница свойств отсутствует. |
Исполняемый файл | quartz.dll |
Заслуга | Windows XP и более поздние версии: MERIT_UNLIKELY |
Категория фильтра | CLSID_LegacyAmFilterCategory |
Комментарии
В отладочной версии Quartz.dll, если уровень отладки LOG_TRACE имеет значение 5 или выше, отрисовщик видео отображает метки времени каждого кадра в окне видео. Эти числа не отображаются в розничной версии библиотеки DLL. Дополнительные сведения см. в разделе Отладка выходных функций.
Следующие замечания предназначены для разработчиков фильтров:
Отрисовщик видео принимает форматы YUV, если карта поддерживает поверхности наложения YUV. Однако при первом подключении к фильтру вышестоящий видео отрисовщику требуется формат RGB, соответствующий глубине цвета текущих параметров монитора. Например, если текущий параметр отображения имеет 24-разрядный цвет, фильтр вышестоящий должен иметь возможность предоставлять 24-разрядное видео RGB. Когда граф фильтра переключается в состояние выполнения, отрисовщик видео согласовывает динамическое изменение формата в соответствии с цветовой областью YUV.
При подключении с типом RGB отрисовщик видео гарантирует, что он может использовать GDI в случае, если DirectDraw недоступен. Он переключится на GDI, если другое приложение использует видеопамяти, если прямоугольник видео расположен на двух мониторах в системе с несколькими мониторами или если прямоугольник видео полностью скрыт другим окном.
Примечание
Отрисовщик смешивания видео не выполняет этот тип динамического изменения формата и не требует типа мультимедиа RGB, так как он никогда не использует GDI для отрисовки.
Чтобы согласовать изменение формата, отрисовщик видео вызывает IPin::QueryAccept с новым типом мультимедиа. Если фильтр вышестоящий возвращает S_OK, отрисовщик видео присоединяет новый носитель к следующему образцу. Фильтр вышестоящий должен вызывать IMediaSample::GetMediaType для каждого примера. Если GetMediaType возвращает значение, отличное от NULL, это указывает на изменение формата, и фильтр вышестоящий должен реагировать на переключение типов выходных данных. (Не переключайте типы в методе QueryAccept.) Фильтр вышестоящий должен принимать по крайней мере основные типы RGB и в идеале должен поддерживать общие типы YUV. Во время потоковой передачи отрисовщик видео может переключаться между типами YUV и RGB любое количество раз. Отрисовщик видео не принимает изменения динамического формата, инициированные фильтром вышестоящий.
Когда отрисовщик видео обращается к поверхности наложения DirectDraw, он выделяет один буфер для входного контакта. Если фильтр вышестоящий попытается принудительно установить соединение с помощью нескольких буферов, отрисовщик видео не сможет использовать поверхность наложения.
Связанные темы