Video Renderer Filter, VMR 7, VMR 9

Video Renderer Filter

Этот фильтр - подходящий вариант для надежного видеовоспроизведения.

Нужно заметить, что в Windows XP фильтром видеовоспроизведения по умолчанию есть Video Mixing Renderer (VMR). И VMP, и Video Renderer имеют общее "дружественное имя" - "Video Renderer". На всех других платформах по умолчанию фильтром видеовоспроизведения есть Video Renderer, хотя приложения и могут использовать VMR-9 для использования дополнительных возможностей видеовоспроизведения.

Video Renderer использует DirectDraw и оверлейные поверхности, если их поддерживает видеокарта. Менеджер графа фильтров предоставляет интерфейс IVideoWindow, который позволяет приложению устанавливать и возвращать свойства Video Renderer'а. На новых видеокартах Video Renderer поддерживает полноэкранный режим отображения. В других случаях МГФ автоматически переключается на фильтр полноэкранного отображателя ( Full Screen Renderer ) для полноэкранного режима.

Нужно заметить, что обычно фильтры таких видеоокон обрабатывают сообщения на рабочем потоке, созданном МГФ. Однако, если приложение напрямую создает фильтр с использованием вызова CoCreateInstance, видеокно обрабатывает сообщение на потоке приложения. В этом случае поток приложения должен иметь цикл обработки для диспетчеризации сообщений, предназначенных видеоокну. Этот поток не должен прекращать выполнение до тех пор, пока Video Renderer не вызовет финальный Release, который происходит в том случае, когда прекращает работу МГФ. В противном случае приложение может получить взаимоблокировку.

В следующей таблице описываются свойства фильтра Video Renderer:

СвойствоОписание
Интерфейсы фильтраIBaseFilter, IBasicVideo, IBasicVideo2, IDirectDrawVideo, IKsPropertySet, IMediaPosition, IMediaSeeking, IQualityControl, IQualProp, IVideoWindow
Медиатип входящего контактаMEDIATYPE_Video
Интерфейсы входящего контактаIMemInputPin, IOverlay, IPin, IPinConnection, IQualityControl
Медиатипы исходящего контакта-
Интерфейсы исходящего контакта-
CLSID фильтраCLSID_VideoRenderer
CLSID страницы свойств-
Исполнимый файлquartz.dll
MeritWindows 98, Me, NT, 2000: MERIT_PREFERRED Windows XP: MERIT_UNLIKELY
Категория фильтровCLSID_LegacyAmFilterCategory

В отладочной версии файла quartz.dll, в случае, если уровень отладки LOG_TRACE установлен в значение 5 или выше, Video Renderer отображает временную метку для каждого видеокадра. В обычной же версии quartz.dll эти значения не даются.

Следующие замечания предназначаются для разработчиков фильтров:

Video Renderer применяет форматы YUV, если видеокарта поддерживает оверлейные поверхности YUV. Но в момент его первичного соединения с вышележащим фильтром он запрашивает формат RGB соответствующего глубине цвета текущих установок монитора. Например, если текущей установкой есть 24-битный цвет, вышележащий фильтр должен предоставлять 24-битное RGB-видео. Когда граф фильтров переключается в запущенное состояние, Video Renderer договаривается о динамическом изменении формата для подходящего YUV - цветового пространства.

Соединившись в режиме RGB, Video Renderer обеспечивает себе возможность использовать GDI в случае недоступности режима DirectDraw. Он переключится в режим GDI, если другое приложение использует видеопамять, если область видеотображения захватывает два монитора в многоэкранной системе, или если прямоугольник видеоотображения полностью перекрывается другим окном (or if the video rectangle is completely obscured by another window ?).

Нужно заметить, что Video Mixing Renderer не выполняет динамического изменения формата такого типа и не требует медиатипа RGB, поскольку никогда не использует для отображения GDI.

Для того, чтобы договориться об изменении формата, Video Renderer выполняет вызов IPin::QueryAccept с новым медиатипом. Если вышележазий фильтр возвращает S_OK, Video Renderer использует новый медиатип уже для следующего кадра. Вышележащий фильтр будет произволить вызовы IMediaSample::GetMediaType на каждом сємпле. ЕслиGetMediaType вернет не-NULL значение, это будет указывать на изменение формата, и вышележащий фильтр сможет ответить переключением исходящих медиатипов (Не следует переключать типы в методе QueryAccept ??). Вышележащий фильтр примет наименьший старший RGB-тип и в идеале поддержит общий тип YUV (???). На всем протяжении процесса отображения Video Renderer может переключаться назад и вперед между YUV и RGB любое количество раз. Video Renderer не принимает динамического изменения формата, инициированного вышележащим фильтром.

Когда Video Renderer рисует на поверхности оверлея DirectDraw, он выделяет один буффер для своего входящего контакта. Если вышележащий фильтр попытается соединиться, используя несколько буфферов, Video Renderer не сможет использовать оверлей.

Video Mixing Renderer Filter 9

Этот фильтр расширяет возможности воспроизведения видео для всех платформ, поддерживающих DirectX. Он полностью интегрирован с 3D свойствами DirectX9. Например, можно легко добавлять видео к играм и другим 3D оболочкам или преобразовывать видеоизображения с использованием теневых пикселей Direct3D (3D pixel shaders) и других эффектов.

Этот фильтр не поддерживает видеопорты ( о видеопортах нужно что-нибудь сказать ).

Для обеспечения обратной совместимости VMR-9 не является фильтром отображения по умолчанию ни на какой системе. Для использования этого фильтра нужно добавить его к графу фильтров явно и отконфигурировать его перед соединением с любыми из его входящих контактов. VMR-9 использует собственный набор интерфейсов, структур, перечислителей, которые не всегда идентичны соответствующим типам данных, используемых VMR-7.

СвойствоОписание
Интерфейсы фильтраIAMVideoAccelerator, IBaseFilter, IBasicVideo,IBasicVideo2,IQualProp, IVideoWindow, IVMRAspectRatioControl9, IVMRDeinterlaceControl9, IVMRFilterConfig9, IVMRImageCompositor9, IVMRImagePresenter9, IVMRImagePresenterConfig9, IVMRMixerBitmap9, IVMRMixerControl9, IVMRMonitorConfig9, IVMRSurface9,IVMRSurfaceAllocator9, IVMRSurfaceAllocatorNotify9, IVMRWindowlessControl9
Медиатипы входящего контактаВходящий контакт может соединяться с любым типом, поддерживаемым на на аппаратном уровне видео
Интерфейсы входящего контактаIAMVideoAccelerator, IMemInputPin, IOverlay, IQualityControl, IPin, IPinConnection, IVMRVideoStreamControl9
Медиатипы исходящего контакта-
Интерфейсы исходящего контакта-
CLSID фильтраCLSID_VideoMixingRenderer9
CLSID страницы свойств-
Исполнимый файлquartz.dll
MeritMERIT_DO_NOT_USE
Категория фильтровCLSID_LegacyAmFilterCategory

Video Mixing Renderer Filter 7

Этот раздел применим только для Windows XP.

В Windows XP этот фильтр (VMR-7) есть фильтром видеотображения по умолчанию. Он называется VMR-7, потому что внутри себя использует Direct Draw 7. В DirectX 9, похожий, но отдельный фильтр VMR-9 доступен для redistribution на не XP-системах. VMR-9 использует Direct3D 9.

Замечание. VMR (имеется в виду VMR-7 ?) доступен только на платформе Windows XP. Он недоступен through the DirectX redistributable или предыдущих версиях Windows. В большинстве случаев разработчики приложений должны использовать VMR-9.

Особенностями VMR есть:

  • Смешивание до 16 входящих каналов (true alpha blending)
  • Возможность доступ к образованному изображению перед его отображением.
  • Plug-in - модель, дающая возможность реализации собственных видеоэффектов.

МГФ при построении графа в Windows XP не использует старые фильтры Video Renderer или Overlay Mixer, если приложение явно не создаст их и не добавит к графу.

СвойствоОписание
Интерфейсы фильтраIAMVideoAccelerator, IBaseFilter, IBasicVideo, IBasicVideo2, IQualProp, IVideoWindow, IVMRAspectRatioControl, IVMRDeinterlaceControl, IVMRFilterConfig, IVMRImageCompositor, IVMRImagePresenter, IVMRImagePresenterConfig, IVMRMixerBitmap, IVMRMixerControl,IVMRSurfaceAllocator, IVMRSurfaceAllocatorNotify,IVMRWindowlessControl
Медиатипы входящего контактаЛюбые типы со старшим типом MEDIATYPE_Video
Интерфейсы входящего контактаIAMVideoAccelerator, IMemInputPin, IOverlay (см. примечание), IPin, IPinConnection, IQualityControl, IVMRVideoStreamControl
Медиатипы исходящего контакта-
Интерфейсы исходящего контакта-
CLSID фильтраЕсть два разных CLSID, относящихся к этому фильтру:CLSID_VideoMixingRenderer: Для создания VMR-7. В случае нехватки системных ресурсов вызов CoCreateInstance терпит неудачу. CLSID_VideoRendererDefault: Создается VMR-7, если систепмные ресурсы are available или если создается старый фильтр Video Renderer.CLSID_VideoMixingRenderer используется в том случае, если нужно использовать специфические свойства VMR-7. В противном случае следует пользоваться CLSID_VideoRendererDefault, вызов которого almost наверняка не потерпит неудачи, т.к. может создать старый Video Renderer.
CLSID страницы свойств-
Исполнимый файлquartz.dll
MeritMERIT_PREFERRED + 1
Категория фильтровCLSID_LegacyAmFilterCategory

Примечание

Входящий контакт предоставляет интерфейс IOverlay только в том случае, если фильтр VMR-7 находится в оконном режиме (windowed mode). Тогда исходящий контакт констуктивно реализует только метод GetWindowHandle интерфейса IOverlay, что позволяет приложению получить хэндл видеоокна фильтра. Остальные методы интерфеса IOverlay возвращают E_NOTIMPL. В безоконном режиме (windowless mode) фильтр не создает видеоокна, так что контакт не предоставляет этого интерфейса.

Comments