DirectX Video Acceleration ( DXVA ) — это спецификация Microsoft API для платформ Microsoft Windows и Xbox 360 , которая позволяет декодировать видео с аппаратным ускорением . Конвейер позволяет перекладывать на графический процессор некоторые ресурсоемкие операции, такие как iDCT , компенсация движения и деинтерлейсинг . DXVA 2.0 также позволяет выполнять больше операций, включая операции захвата и обработки видео , с аппаратным ускорением.
DXVA работает совместно с моделью рендеринга видео, используемой видеокартой . DXVA 1.0, который был представлен как стандартизированный API в Windows 2000 ( DirectX 7 ) и в настоящее время доступен в Windows 98 или более поздних версиях, может использовать либо режим рендеринга наложения , либо VMR 7/9 . [1] DXVA 2.0, доступный только в Windows Vista , Windows 7 , Windows 8 и более поздних версиях ОС, интегрируется с Media Foundation (MF) и использует Enhanced Video Renderer (EVR), присутствующий в MF. [1]
DXVA используется программными видеодекодерами для определения конвейера, специфичного для кодека, для аппаратно-ускоренного декодирования и рендеринга кодека. Конвейер начинается в ЦП, который используется для анализа потока мультимедиа и преобразования в совместимые с DXVA структуры. DXVA определяет набор операций, которые могут быть аппаратно ускорены, и интерфейсы драйверов устройств (DDI), которые графический драйвер может реализовать для ускорения операций. Если кодеку необходимо выполнить какие-либо из определенных операций, он может использовать эти интерфейсы для доступа к аппаратно-ускоренной реализации этих операций. Если графический драйвер не реализует один или несколько интерфейсов, кодек должен предоставить для него программный резерв. Декодированное видео передается аппаратному видеорендеру, где к нему может быть применена дополнительная постобработка видео перед рендерингом на устройство. Полученный конвейер можно использовать в приложении, совместимом с DirectShow .
DXVA определяет Motion Compensation DDI, который определяет интерфейсы для операций iDCT , кодирования Хаффмана , компенсации движения , альфа-смешивания , обратного квантования , преобразования цветового пространства и операций преобразования частоты кадров, среди прочего. [2] [3] Он также включает три подспецификации: Deinterlacing DDI, COPP DDI и ProcAmp DDI. [ 4] Deinterlacing DDI определяет обратные вызовы для операций деинтерлейсинга . Функции COPP (Certified Output Protection Protocol) DDI позволяют защитить конвейер для носителей, защищенных DRM , путем указания функций шифрования . ProcAmp DDI используется для ускорения постобработки видео. Модуль драйвера ProcAmp находится между аппаратным видеорендерером и драйвером дисплея и предоставляет функции для применения фильтров постобработки к распакованному видео.
Функции, предоставляемые DXVA DDI, не доступны напрямую клиенту DirectShow , но предоставляются как функции обратного вызова для видеорендера. Таким образом, рендерер играет очень важную роль в закреплении конвейера.
Поддержка DXVA для H.264 была добавлена в DirectX 9.0c .
DXVA 2.0 улучшает реализацию видеоконвейера и добавляет множество других DDI, включая Capture DDI для захвата видео. DDI, которые он разделяет с DXVA 1.0, также улучшены возможностью использования аппаратного ускорения большего количества операций. Кроме того, функции DDI напрямую доступны вызывающим и не должны быть опосредованы видеорендером. [5] Таким образом, программа также может создать конвейер для простого декодирования мультимедиа (без рендеринга) или постобработки и рендеринга (без декодирования). Эти функции требуют драйверов Windows Display Driver Model , что ограничивает DXVA 2.0 Windows Vista , Windows Server 2008 , [1] [5] Windows 7 , Windows Server 2008 R2 и Windows 8. В Windows XP и Windows 2000 программы могут использовать DXVA 1.0. DXVA 2.0 позволяет использовать Enhanced Video Renderer в качестве видеорендера только в Vista, Windows 7 и Windows 8. [1] (В Windows XP DXVA-рендеринг возможен с VMR9 и известным Overlay Mixer.) DXVA интегрируется с Media Foundation и позволяет раскрывать конвейеры DXVA как Media Foundation Transforms ( MFT ). Даже конвейеры декодера или конвейеры постобработки могут быть раскрыты как MFT, которые могут использоваться загрузчиком топологии Media Foundation для создания полного конвейера воспроизведения мультимедиа. DXVA 1.0 эмулируется с помощью DXVA 2.0. [1] DXVA 2.0 не включает COPP DDI, а использует PVP для защищенного контента. Windows 7 реализует DXVA-HD [6] , если драйвер соответствует WDDM 1.1.
Реализации DXVA2 существуют в двух вариантах: нативный и с обратным копированием .
При нативной реализации декодированное видео остается в памяти GPU до тех пор, пока не будет отображено. Видеодекодер должен быть подключен к видеорендеру без промежуточного фильтра обработки. Видеорендер также должен поддерживать DXVA, что дает меньшую свободу в выборе рендереров.
При реализации копирования с обратной копией декодированное видео копируется из памяти GPU обратно в память CPU. Эта реализация не имеет ограничений, упомянутых выше, и действует аналогично обычному программному декодеру; однако, заикание видео будет происходить, если GPU недостаточно быстр, чтобы скопировать свою память обратно в память CPU.
Собственный режим имеет преимущества, если только нет необходимости в индивидуальной обработке, поскольку дополнительные операции обратного копирования увеличат нагрузку на память графического процессора. [7]