Поделиться через


Фильтр отрисовщика видео

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

фильтры DirectShow