Articulo de referencia

Compensación de movimiento de X-Video

X-Video Motion Compensation (XvMC) es una extensión de la extensión de vídeo Xv para el sistema X Window. La API de XvMC permite que los programas de vídeo descarguen partes del...

X-Video Motion Compensation (XvMC) es una extensión de la extensión de vídeo Xv para el sistema X Window. La API de XvMC permite que los programas de vídeo descarguen partes del proceso de decodificación de vídeo al hardware de vídeo de la GPU . En teoría, este proceso también debería reducir los requisitos de ancho de banda del bus. Actualmente, las partes que XvMC admite para ser descargadas a la GPU son la compensación de movimiento (mo comp) y la transformada discreta inversa del coseno (iDCT) para vídeo MPEG-2 . XvMC también admite la descarga de la decodificación de mo comp , iDCT y VLD ("Decodificación de longitud variable", más conocida como "aceleración a nivel de segmento") no solo para vídeo MPEG-2 sino también para vídeo MPEG-4 ASP en hardware VIA Unichrome (S3 Graphics Chrome Series) .

XvMC fue el primer equivalente UNIX de la API de aceleración de vídeo DirectX (DxVA) de Microsoft Windows . Algunas aplicaciones de software populares que aprovechan XvMC son MPlayer , MythTV y xine .

Controladores de dispositivos

Cada GPU de vídeo de hardware compatible con la aceleración de vídeo XvMC requiere un controlador de dispositivo de software X11 para habilitar estas funciones.

Fabricantes de hardware

Nvidia

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 la ingeniería inversa del controlador binario desarrollado por la comunidad Linux llamado Nouveau . Nouveau no busca soporte para XvMC, [ 1 ] el controlador 2D nv no admite XvMC, y el controlador binario propietario oficial de Nvidia solo admite la descarga de MPEG-2 (mo comp e iDCT) en hardware hasta la serie GeForce 7000 inclusive.

A TRAVÉS DE

VIA proporciona controladores de dispositivos de código abierto para algunos de sus dispositivos VIA Unichrome (S3 Graphics Chrome Series) , compatibles con la descarga de vídeo 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 los niveles iDCT o mo comp. Tenga en cuenta que no todos los dispositivos son compatibles y existen otras limitaciones. [ 2 ]

Intel

Intel proporciona controladores de dispositivos oficiales de código abierto que admiten la descarga de MPEG-2 (mo comp e iDCT) en la gama de chips gráficos integrados 8xx/9xx de Intel. [ 3 ]

ATI/AMD

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 usarla. Por lo tanto, no hay XvMC disponible, y probablemente nunca lo habrá. XvMC es compatible con las tarjetas Radeon -4000 (que tienen UVD ) mediante el controlador Catalyst a partir de la versión 8.10 y posteriores a nivel experimental (lo que significa que no funciona " de fábrica "). [ 4 ] (Véase también Aceleración de flujo de bits X-Video ). Se planea para el futuro la compatibilidad con compensación de movimiento en otro hardware de ATI/AMD. (Ahora todo el hardware tiene compatibilidad con la aceleración MPEG-2 en los niveles de compensación iDCT y mo).

Matrox

No existen controladores de dispositivo que admitan XvMC en hardware Matrox (aunque el hardware Matrox Parhelia admite la aceleración MPEG-2 a nivel de compilación).

S3

El controlador de dispositivo binario de S3 solo admite la descarga de MPEG-2 en la versión inicial 2.0.16 del controlador en las GPU de Chrome 20.

Descripción general técnica de la API de XvMC

Esto proviene de la especificación API de compensación de movimiento X-Vxvideoideo v. 1.0 [ 5 ]

Puerto Xv

XvMC extiende la extensión de vídeo X (Xv) y utiliza el 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 por hardware creados para su uso. Los puertos que admiten XvImages (es decir, que tienen una codificación de puerto "XV_IMAGE" como se describe en el apéndice de la API de Xv versión 2.2) se pueden consultar 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

XvMCContext describe el estado de la canalización de compensación de movimiento . Se puede crear un XvMCContext individual para usarlo con una única combinación de puerto, tipo de superficie, tipo de compensación de movimiento, ancho y alto. Por ejemplo, se podría crear un contexto para un puerto específico que realice compensación de movimiento MPEG-2 en superficies 4:2:0 de 720 x 480. Una vez creado el contexto, al hacer referencia a él se especifican 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 los contextos indirectos, el servidor de visualización X renderiza todo el vídeo utilizando los datos que le pasa el cliente. En los contextos directos, las bibliotecas cliente renderizan el vídeo con poca o ninguna interacción con el servidor de visualización X.

Superficies XvMC

Las superficies XvMCSurfaces son búferes que el hardware de compensación de movimiento puede renderizar. Los datos de los búferes no son accesibles para el cliente y pueden almacenarse en un formato específico del hardware. Se pueden crear tantos búferes como se desee para un contexto determinado (siempre que los recursos lo permitan).

Canalización de vídeo

XvMC proporciona aceleración de vídeo a partir de dos puntos en la cadena de procesamiento de vídeo . La aceleración que comienza en el primer punto, al que llamaremos nivel de "Compensación de Movimiento", empieza después de la cuantización inversa y la IDCT en el lugar donde se aplicará la compensación de movimiento . El segundo punto, al que llamaremos nivel de "IDCT", empieza antes de la IDCT, justo después de la cuantización inversa.

Representación

La renderización se realiza proporcionando 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 usar 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 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 porción de la superficie XvMCSurface en un elemento dibujable con escalado arbitrario.

Imágenes subtituladas de XvMC

Las subimágenes XvMC son superficies independientes que pueden combinarse con la superficie de destino. Se pueden crear tantas subimágenes XvMC como se desee para su uso con un contexto (siempre que los recursos lo permitan). Se admite el comportamiento de subimágenes tanto en el backend como en el frontend.

Soporte de software

La aceleración XvMC es compatible con:

XvMC se ha eliminado en Mesa 22.3.

Procesos que podrían acelerarse

Aunque XvMC actualmente solo admite la aceleración por hardware de la compensación de movimiento (mo comp) y la transformada discreta del coseno inversa (iDCT), (y la decodificación de longitud variable para la GPU VIA Unichrome), se podrían transferir procesos adicionales de decodificación de vídeo a las GPU modernas , que podrían acelerarse mediante programas de fragmentación de GPU. En el futuro, XvMC podría ampliarse para admitir los mismos procesos que las API de aceleración de vídeo por hardware más recientes de la competencia, como VDPAU , XvBA y VAAPI .

Limitaciones actuales

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 especificación de la API XvMC versión 1.0 [ 7 ] actualmente también tiene estas otras limitaciones:

  • BOB y onefield son los únicos métodos de desentrelazado que funcionan con XvMC.
  • La función Imagen en Imagen (PiP) no funciona con XvMC.
  • Reproducir el vídeo fotograma a fotograma puede provocar artefactos con XvMC.
  • Editar un vídeo es difícil, si no imposible, con XvMC activado.
  • Falta de transparencia de red en la API de XvMC
  • Carece de la capacidad de que la aplicación cliente sea completamente independiente de la biblioteca del lado del cliente que deba utilizarse (es decir, una biblioteca contenedora unificada).

La API VA es una API de aceleración de vídeo más moderna que admite las funciones de aceleración de vídeo de las GPU modernas. [ 8 ]

Véase también

Referencias

  1. ^ Wiki nuevo - Matriz de características
  2. "Copia archivada" . Archivado del original el 26 de septiembre de 2015. Recuperado el 26 de febrero de 2009 .{{cite web}}: CS1 mantenimiento: copia archivada como título ( enlace )
  3. "Controladores gráficos de Linux de Intel - i810 - Chipsets gráficos integrados Intel 8xx" . Archivado del original el 25 de marzo de 2010. Consultado el 12 de noviembre de 2009 .
  4. Aceleración del flujo de bits X-Video de AMD // phoronix, 28 de octubre de 2008
  5. Compensación de movimiento de X-Video - Especificación de la API v. 1.0 Archivado el 15 de mayo de 2007 en Wayback Machine
  6. Notas de la versión 0.25 de MythTV
  7. Especificación de la API de XvMC versión 1.0 Archivada el 15 de mayo de 2007 en Wayback Machine
  8. freedesktop.org - Software/vaapi
  9. https://web.archive.org/web/20150305200949/http://www.tuaw.com/2011/01/20/xbmc-for-ios-and-atv2-now-available/ XBMC para iOS y Apple TV ya está disponible
  10. "VideoToolbox - Documentación para desarrolladores de Apple" . developer.apple.com . Consultado el 5 de agosto de 2018 .
  11. "Copia archivada" (PDF) . Archivado del original (PDF) el 9 de abril de 2011. Recuperado el 16 de enero de 2012 .{{cite web}}: CS1 mantenimiento: copia archivada como título ( enlace ) API de decodificación de OpenVideo (OVD)