DirectX Video Acceleration ( DXVA ) es una especificación API de Microsoft para las plataformas Microsoft Windows y Xbox 360 que permite que la decodificación de video se acelere por hardware . La canalización permite que ciertas operaciones intensivas de la CPU , como iDCT , compensación de movimiento y desentrelazado , se descarguen en la GPU . DXVA 2.0 también permite que más operaciones, incluidas las operaciones de captura y procesamiento de video , se aceleren por hardware.
DXVA funciona en conjunto con el modelo de renderizado de video utilizado por la tarjeta de video . DXVA 1.0, que se introdujo como una API estandarizada con Windows 2000 ( DirectX 7 ), y actualmente está disponible en Windows 98 o posterior, puede utilizar el modo de renderizado de superposición o VMR 7/9 . [1] DXVA 2.0, disponible solo en Windows Vista , Windows 7 , Windows 8 y sistemas operativos posteriores, se integra con Media Foundation (MF) y utiliza el Enhanced Video Renderer (EVR) presente en MF. [1]
Los decodificadores de vídeo por software utilizan el DXVA para definir una secuencia de comandos específica del códec para la decodificación y la renderización aceleradas por hardware del códec. La secuencia de comandos comienza en la CPU, que se utiliza para analizar el flujo de medios y convertirlo en estructuras compatibles con DXVA. DXVA especifica un conjunto de operaciones que pueden acelerarse por hardware e interfaces de controlador de dispositivo (DDI) que el controlador gráfico puede implementar para acelerar las operaciones. Si el códec necesita realizar alguna de las operaciones definidas, puede utilizar estas interfaces para acceder a la implementación acelerada por hardware de estas operaciones. Si el controlador gráfico no implementa una o más de las interfaces, el códec debe proporcionar una alternativa de software para ello. El vídeo decodificado se entrega al renderizador de vídeo por hardware, donde se le puede aplicar un posprocesamiento de vídeo adicional antes de renderizarlo en el dispositivo. La secuencia de comandos resultante se puede utilizar en una aplicación compatible con DirectShow .
DXVA especifica el DDI de compensación de movimiento , que especifica las interfaces para operaciones iDCT , codificación Huffman , compensación de movimiento , mezcla alfa , cuantificación inversa , conversión de espacio de color y operaciones de conversión de velocidad de cuadros, entre otras. [2] [3] También incluye tres subespecificaciones: DDI de desentrelazado, DDI COPP y DDI ProcAmp. [4] El DDI de desentrelazado especifica las devoluciones de llamadas para operaciones de desentrelazado . Las funciones DDI COPP (Protocolo de protección de salida certificada) permiten proteger la tubería para medios protegidos por DRM , al especificar funciones de cifrado . El DDI ProcAmp se utiliza para acelerar el posprocesamiento de vídeo. El módulo de controlador ProcAmp se encuentra entre el renderizador de vídeo de hardware y el controlador de pantalla, y proporciona funciones para aplicar filtros de posprocesamiento en el vídeo descomprimido.
Las funciones expuestas por los DDI de DXVA no son accesibles directamente por un cliente DirectShow , pero se suministran como funciones de devolución de llamada al renderizador de video. Como tal, el renderizador juega un papel muy importante en el anclaje de la secuencia de comandos.
La compatibilidad de DXVA con H.264 se agregó en DirectX 9.0c .
DXVA 2.0 mejora la implementación de la canalización de vídeo y añade una serie de otros DDI, incluyendo un DDI de captura para la captura de vídeo. Los DDI que comparte con DXVA 1.0 también se mejoran con la capacidad de utilizar la aceleración de hardware de más operaciones. Además, las funciones DDI están directamente disponibles para los llamadores y no necesitan ser mediadas por el renderizador de vídeo. [5] Como tal, un programa también puede crear una canalización para simplemente decodificar los medios (sin renderizar) o posprocesar y renderizar (sin decodificar). Estas características requieren los controladores del Modelo de controlador de pantalla de Windows , que limita DXVA 2.0 a Windows Vista , Windows Server 2008 , [1] [5] Windows 7 , Windows Server 2008 R2 y Windows 8. En Windows XP y Windows 2000 , los programas pueden utilizar DXVA 1.0. DXVA 2.0 permite Enhanced Video Renderer como renderizador de video solo en Vista, Windows 7 y Windows 8. [1] (Con Windows XP, DXVA-Rendering es posible con VMR9 y el conocido Overlay Mixer). DXVA se integra con Media Foundation y permite que las canalizaciones DXVA se expongan como Media Foundation Transforms ( MFT ). Incluso las canalizaciones de decodificador o las canalizaciones de posprocesamiento se pueden exponer como MFT, que pueden ser utilizadas por el cargador de topología de Media Foundation para crear una canalización de reproducción de medios completa. DXVA 1.0 se emula utilizando DXVA 2.0. [1] DXVA 2.0 no incluye el COPP DDI, en su lugar utiliza PVP para contenido protegido. Windows 7 implementa DXVA-HD [6] si el controlador cumple con WDDM 1.1.
Las implementaciones de DXVA2 vienen en dos variantes: nativa y de copia .
Con la implementación nativa, el video decodificado permanece en la memoria de la GPU hasta que se muestra. El decodificador de video debe estar conectado al renderizador de video sin ningún filtro de procesamiento intermedio. El renderizador de video también debe ser compatible con DXVA, lo que brinda menos libertad en la elección de los renderizadores.
Con la implementación de copia inversa, el video decodificado se copia de la memoria de la GPU a la memoria de la CPU. Esta implementación no tiene las limitaciones mencionadas anteriormente y actúa de manera similar a un decodificador de software normal; sin embargo, se producirán interrupciones en el video si la GPU no es lo suficientemente rápida para copiar su memoria a la memoria de la CPU.
El modo nativo es ventajoso a menos que haya una necesidad de procesamiento personalizado, ya que las operaciones de copia adicionales aumentarán la carga de memoria de la GPU. [7]