Введение

DirectX Video Acceleration (DXVA) – это спецификация API Microsoft для платформ Microsoft Windows и Xbox 360, позволяющая аппаратно ускорять декодирование видео. Этот конвейер позволяет перенести на графический процессор (GPU) некоторые ресурсоемкие операции, такие как обратное дискретное косинусное преобразование (iDCT), компенсация движения и деинтерлейсинг. DXVA 2.0 также позволяет аппаратно ускорять больше операций, включая захват и обработку видео. DXVA работает в сочетании с моделью рендеринга видео, используемой видеокартой. DXVA 1.0, представленный как стандартизированный API с Windows 2000 (DirectX 7), и в настоящее время доступный в Windows 98 или более поздних версиях, может использовать либо режим рендеринга наложения, либо VMR 7/9. DXVA 2.0, доступный только в Windows Vista, Windows 7, Windows 8 и более поздних операционных системах, интегрируется с Media Foundation (MF) и использует Enhanced Video Renderer (EVR), присутствующий в MF. Он также включает три подспецификации: Deinterlacing DDI, COPP DDI и ProcAmp DDI. Deinterlacing DDI определяет функции обратного вызова для операций деинтерлейсинга. Функции COPP DDI (Certified Output Protection Protocol) позволяют защитить конвейер для медиаконтента, защищенного DRM, путем указания функций шифрования. ProcAmp DDI используется для ускорения постобработки видео. Модуль драйвера ProcAmp располагается между аппаратным видеорендерером и драйвером дисплея и предоставляет функции для применения фильтров постобработки к декомпрессированному видео. Функции, предоставляемые DXVA DDI, недоступны напрямую клиенту DirectShow, но передаются в видеорендерер в виде функций обратного вызова. Таким образом, рендерер играет важную роль в организации конвейера. Поддержка DXVA для H.264 была добавлена в DirectX 9.0c.

DXVA в Windows Vista и более поздних версиях

DXVA 2.0 улучшает реализацию видеоконвейера и добавляет множество других DDI, включая DDI Capture для видеозахвата. DDI, общие с DXVA 1.0, также улучшены благодаря возможности аппаратного ускорения большего числа операций. Кроме того, функции DDI доступны вызывающим программам напрямую и не требуют посредничества видеорендерера. Таким образом, программа может создавать конвейер для простого декодирования медиафайлов (без рендеринга) или постобработки и рендеринга (без декодирования). Для работы этих функций требуются драйверы модели Windows Display Driver Model, что ограничивает использование DXVA 2.0 операционными системами Windows Vista и Windows Server 2008, если драйвер соответствует спецификации WDDM 1.1.

Реализации DXVA2: нативные и копируемые

Реализации DXVA2 бывают двух типов: аппаратная и с возвратом в память. В аппаратной реализации декодированное видео остаётся в памяти GPU до момента отображения. Видеодекодер должен быть подключён непосредственно к видеорендереру, без каких-либо промежуточных фильтров обработки. Видеорендерер также должен поддерживать DXVA, что ограничивает выбор доступных рендереров. В реализации с возвратом в память декодированное видео копируется из памяти GPU обратно в память CPU. Эта реализация не имеет вышеупомянутых ограничений и работает аналогично обычному программному декодеру, однако может возникать прерывистое воспроизведение видео, если GPU недостаточно быстро копирует данные обратно в память CPU. Аппаратный режим предпочтительнее, если не требуется дополнительная обработка, поскольку операции копирования увеличивают нагрузку на память GPU.