Фильтр отрисовщика видео
[Функция, связанная с этой страницей, DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngineи аудио и видеозахват в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer, IMFMediaEngine и аудио-видеозахват в Media Foundation вместо DirectShowпо возможности. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]
Фильтр отрисовщика видео — это надежный и универсальный отрисовщик видео.
Заметка
В Windows XP и более поздних версиях средство отрисовки видео по умолчанию — это средство фильтр отрисовщика видео 7 (VMR-7). VmR-7 и средство отрисовки видео имеют понятное имя "Отрисовщик видео". На более ранних платформах средство отрисовки видео является отрисовщиком по умолчанию. См. выбор правогоотрисовщика.
Средство отрисовки видео использует DirectDraw и поверхности наложения, если видеокарта поддерживает их. Диспетчер графов фильтров предоставляет интерфейс IVideoWindow, который позволяет приложениям задавать и извлекать свойства в отрисовщике видео. С помощью новых видеокарточек средство отрисовки видео поддерживает полноэкранную отрисовку. В противном случае диспетчер графов фильтров автоматически переключается на полноэкранный отрисовщик фильтр для полноэкранного режима. Дополнительные сведения см. в IVideoWindow::p ut_FullScreenMod e.
! [Важно]
Обычно это окно видеофильтра обрабатывает сообщения в рабочем потоке, созданном диспетчером графов фильтров. Howerver, если приложение непосредственно создает фильтр с помощью CoCreateInstance, окно видео обрабатывает сообщения в потоке приложения. В этом случае поток приложения должен иметь цикл сообщений для отправки сообщений в окно видео. Кроме того, поток не должен выйти до завершения выпуска вызова обработчика видео, который возникает при завершении работы диспетчера графов фильтра. В противном случае приложение может быть взаимоблокировкой.
Ярлык | Ценность |
---|---|
Интерфейсы фильтров | 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, он выделяет один буфер для своего входного закрепления. Если вышестоящий фильтр пытается принудительно подключиться с помощью нескольких буферов, средство отрисовки видео не сможет использовать поверхность наложения.
Связанные разделы