X-Video Motion Compensation (XvMC) es una extensión de la extensión de video X (Xv) para el sistema X Window. La API XvMC permite que los programas de video descarguen partes del proceso de decodificación de video al hardware de video de la GPU . En teoría, este proceso también debería reducir los requisitos de ancho de banda del bus. Actualmente, las partes admitidas que XvMC debe descargar en la GPU son la compensación de movimiento (mo comp) y la transformada de coseno discreta inversa (iDCT) para video MPEG-2 . XvMC también admite la descarga de decodificación de mo comp , iDCT y VLD ("Decodificación de longitud variable", más comúnmente conocida como "aceleración de nivel de corte") no solo para video MPEG-2 sino también MPEG-4 ASP en hardware VIA Unichrome (S3 Graphics Chrome Series) .
XvMC fue el primer equivalente en UNIX de la API de aceleración de video DirectX (DxVA) de Microsoft Windows . Entre las aplicaciones de software conocidas por aprovechar XvMC se incluyen MPlayer , MythTV y xine .
Cada GPU de video de hardware capaz de acelerar video XvMC requiere un controlador de dispositivo de software X11 para habilitar estas funciones.
Actualmente hay tres controladores X11 de Nvidia disponibles: un controlador de código abierto solo para 2D pero ofuscado mantenido por Nvidia llamado nv, un controlador binario propietario de Nvidia y un controlador de código abierto basado en ingeniería inversa del controlador binario desarrollado por la comunidad Linux llamado Nouveau . Nouveau no busca compatibilidad con XvMC, [1] el controlador 2D nv no admite XvMC y el controlador binario propietario oficial de Nvidia solo admite la descarga MPEG-2 (mo comp e iDCT) en hardware hasta la serie GeForce 7000 inclusive.
VIA ofrece controladores de dispositivos de código abierto para algunos de sus equipos VIA Unichrome (S3 Graphics Chrome Series) , que admiten la descarga de video ASP MPEG-2 y MPEG-4 . Gracias al nivel de decodificación VLD, VIA descarga muchas más tareas de decodificación de la CPU que las GPU que solo admiten niveles de iDCT o mo comp. Tenga en cuenta que no todos los dispositivos son compatibles y existen otras advertencias. [2]
Intel proporciona controladores de dispositivos oficiales de código abierto que admiten la descarga MPEG-2 (mo comp e iDCT) en la gama de chips gráficos integrados 8xx/9xx de Intel. [3]
Aunque ATI fue el primer fabricante en proporcionar aceleración MPEG-2 en sus tarjetas gráficas con la GPU Rage 128, nunca ha proporcionado documentación sobre cómo utilizarla. Por lo tanto, no hay XvMC disponible, y probablemente nunca lo estará. XvMC es compatible con las tarjetas Radeon -4000 (que tienen UVD ) mediante el controlador Catalyst a partir de la versión 8.10 y superiores a nivel experimental (lo que significa que no funciona " de fábrica "). [4] (Ver también X-Video Bitstream Acceleration ). El soporte de compensación de movimiento en otro hardware ATI/AMD está previsto para el futuro. (Ahora todo el hardware tiene soporte para aceleración MPEG-2 en niveles de comp iDCT y mo).
No hay controladores de dispositivos que admitan XvMC en hardware Matrox (aunque el hardware Matrox Parhelia tiene soporte para aceleración MPEG-2 en el nivel de compresión mo).
El controlador de dispositivo binario de S3 solo admite la descarga MPEG-2 en el controlador 2.0.16 inicial en las GPU Chrome 20. [ cita requerida ]
Esto es de la especificación API de compensación de movimiento de X-Vxvideoideo v. 1.0 [5]
XvMC extiende la extensión de video X (Xv) y hace uso del concepto familiar de XvPort. Los puertos tienen atributos que se pueden configurar y consultar a través de Xv. En XvMC, los puertos también pueden tener contextos de compensación de movimiento de hardware creados para su uso con ellos. Los puertos que admiten XvImages (es decir, que tienen una codificación de puerto "XV_IMAGE" como se describe en el anexo de API de la versión 2.2 de Xv) pueden consultarse para obtener la lista de tipos de XvMCSurface que admiten. Si admiten algún tipo de XvMCSurface, se puede crear un XvMCContext para ese puerto.
XvMCContext describe el estado del flujo de trabajo de compensación de movimiento . Se puede crear un XvMCContext individual para utilizarlo con una única combinación de puerto, tipo de superficie, tipo de compensación de movimiento, ancho y altura. Por ejemplo, se puede crear un contexto para un puerto en particular que realiza compensación de movimiento MPEG-2 en superficies de 720 x 480 4:2:0. Una vez creado el contexto, hacer referencia a él implica el puerto, el tipo de superficie, el tamaño y el tipo de compensación de movimiento. Los contextos pueden ser "directos" o "indirectos". En el caso de los contextos indirectos, el servidor de visualización X renderiza todo el vídeo utilizando los datos que le pasa el cliente. En el caso de los contextos directos, las bibliotecas de cliente renderizan el vídeo con poca o ninguna interacción con el servidor de visualización X.
Las superficies XvMC son búferes en los que el hardware de compensación de movimiento puede renderizar. Los datos de los búferes en sí no son accesibles para el cliente y pueden almacenarse en un formato específico del hardware. Se puede crear cualquier cantidad de búferes para su uso con un contexto particular (si los recursos lo permiten).
XvMC proporciona aceleración de video a partir de uno de dos puntos en la secuencia de video . La aceleración que comienza en el primer punto, que llamaremos nivel de "Compensación de movimiento", comienza después de la cuantificación inversa y la IDCT en el lugar donde se aplicará la compensación de movimiento . El segundo punto, que llamaremos nivel "IDCT", comienza antes de la IDCT justo después de la cuantificación inversa.
La renderización se realiza presentando a la biblioteca una superficie XvMCSurface de destino y hasta dos superficies XvMCSurface de referencia para la compensación de movimiento, un búfer de bloques de 8x8 y un búfer de comandos que describe cómo utilizar los bloques de 8x8 junto con los vectores de compensación de movimiento para construir los datos en la superficie XvMCSurface de destino. Cuando la canalización comienza en el nivel de iDCT, Xv realizará la IDCT en los bloques antes de realizar la compensación de movimiento. Se proporciona una función para copiar/superponer una parte de la superficie XvMCSurface en un elemento dibujable con escala arbitraria.
Las subimágenes XvMC son superficies independientes que se pueden combinar con la superficie de destino. Se puede crear cualquier cantidad de subimágenes XvMC para usarlas con un contexto (si los recursos lo permiten). Se admiten tanto el comportamiento de subimágenes "de back-end" como el de "front-end".
La aceleración XvMC es compatible con:
XvMC se han eliminado en Mesa 22.3.
Aunque XvMC actualmente solo admite aceleración de hardware de compensación de movimiento (mo comp) y transformada de coseno discreta inversa (iDCT), (y decodificación de longitud variable para GPU VIA Unichrome), se podrían pasar procesos de decodificación de video adicionales a GPU modernas que podrían acelerarse mediante programas de fragmentos de GPU. XvMC podría extenderse en el futuro para admitir los mismos procesos que las API de aceleración de video de hardware más nuevas, como VDPAU , XvBA y VAAPI :
Además de no coincidir con todas las características y funciones de DxVA (que es la API equivalente de Microsoft para Windows ) y carecer de soporte para otros formatos de video que no sean MPEG-2 en los controladores de dispositivos Linux de Intel y Nvidia , la versión 1.0 de la especificación API XvMC [7] actualmente también tiene estas otras limitaciones:
VA API es una API de aceleración de video más moderna que admite las funciones de aceleración de video de las GPU modernas. [8]
{{cite web}}
: CS1 maint: copia archivada como título ( enlace ){{cite web}}
: CS1 maint: copia archivada como título ( enlace )API de decodificación de vídeo abierto (OVD)