Compensación de movimiento de X-Video (XvMC) , es una extensión de la extensión de video X (Xv) para el sistema X Window . La API de 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 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 (Serie S3 Graphics Chrome) .
XvMC fue el primer equivalente en UNIX de la API de aceleración de video DirectX de Microsoft Windows (DxVA) . Las aplicaciones de software populares que se sabe que aprovechan XvMC incluyen MPlayer , MythTV y xine .
Controladores de dispositivo
Cada GPU de video de hardware capaz de aceleración de video XvMC requiere un controlador de dispositivo de software X11 para habilitar estas funciones.
Fabricantes de hardware
Nvidia
Actualmente hay tres controladores X11 Nvidia disponibles: un controlador de código abierto solo 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 de Linux llamado Nouveau . Nouveau no busca compatibilidad con XvMC, [1] el controlador 2D nv no es compatible con XvMC, y el controlador binario patentado oficial de Nvidia solo admite la descarga de MPEG-2 (mo comp e iDCT) en hardware hasta e incluyendo la serie GeForce 7000.
VÍA
VIA proporciona controladores de dispositivo de código abierto para algunos de sus hardware VIA Unichrome (serie S3 Graphics Chrome) , que admiten 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 iDCT o niveles de comp. Mo. Tenga en cuenta que no todos los dispositivos son compatibles y hay algunas otras advertencias. [2] t
Intel
Intel proporciona controladores de dispositivos de código abierto oficiales 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 MPEG2 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 estará. XvMC es compatible con tarjetas Radeon -4000 (que tienen UVD ) por el controlador Catalyst de 8.10 y superior a un nivel experimental (lo que significa que no funciona " de fábrica "). [4] (Consulte también X-Video Bitstream Aceleración ). El soporte de compensación de movimiento en otro hardware ATI / AMD está planeado para el futuro. (Ahora todo el hardware es compatible con la aceleración MPEG-2 en los niveles iDCT y mo comp).
Matrox
No hay controladores de dispositivo que admitan XvMC en hardware Matrox (aunque el hardware Matrox Parhelia es compatible con la aceleración MPEG-2 en el nivel de comp. Mo).
S3
El controlador de dispositivo binario de S3 solo admite la descarga de MPEG-2 en el controlador inicial 2.0.16 en las GPU Chrome 20. [ cita requerida ]
Descripción general técnica de la API de XvMC
Esto es de X-Vxvideoideo Motion Compensation - Especificación API v. 1.0 [5]
XvPort
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 los puertos XvMC también se pueden crear contextos de compensación de movimiento de hardware para su uso con ellos. Los puertos que admiten XvImages (es decir, 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 cualquier tipo de XvMCSurface, se puede crear un XvMCContext para ese puerto.
XvMCContext
XvMCContext describe el estado de la tubería de compensación de movimiento . Se puede crear un XvMCContext individual para usar con un solo puerto, tipo de superficie, tipo de compensación de movimiento, combinación de ancho y alto. Por ejemplo, se puede crear un contexto para un puerto en particular que realiza compensación de movimiento MPEG-2 en superficies 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". Para contextos indirectos, el servidor de visualización X procesa todo el video utilizando los datos que le pasa el cliente. Para contextos directos, las bibliotecas cliente renderizan el video con poca o ninguna interacción con el servidor de visualización X.
XvMCSuperficies
XvMCSurfaces son búferes en los que puede procesar el hardware de compensación de movimiento . Los datos de los propios búferes no son accesibles para el cliente y pueden almacenarse en un formato específico de hardware. Se puede crear cualquier cantidad de búferes para usar con un contexto particular (si los recursos lo permiten).
Canalización de video
XvMC proporciona aceleración de video comenzando en uno de dos lugares en la canalización 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 el IDCT en el lugar donde se aplicará la compensación de movimiento . El segundo punto, que llamaremos nivel "IDCT", comienza antes del IDCT justo después de la cuantificación inversa.
Representación
El renderizado se realiza presentando a la biblioteca un XvMCSurface de destino y hasta dos XvMCSurfaces de referencia para la compensación de movimiento, un búfer de bloques de 8x8 y un búfer de comando que describe cómo usar los bloques de 8x8 junto con los vectores de compensación de movimiento para construir los datos en el destino XvMCSurface. Cuando la tubería comienza en el nivel iDCT, Xv realizará el IDCT en los bloques antes de realizar la compensación de movimiento. Se proporciona una función para copiar / superponer una parte de XvMCSurface a un elemento de dibujo con escala arbitraria.
Subimágenes de XvMC
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 usar con un contexto (si los recursos lo permiten). Se admiten los comportamientos de subimagen "backend" y "frontend".
Soporte de software
La aceleración de XvMC es compatible con:
- MPlayer
- MythTV (la compatibilidad con XvMC se redujo en 0.25 [6] )
- Xine
Procesos que podrían acelerarse
Aunque XvMC actualmente solo admite aceleración de hardware de compensación de movimiento (mo comp) y transformación de coseno discreta inversa (iDCT) (y decodificación de longitud variable para VIA Unichrome GPU), los procesos de decodificación de video adicionales podrían transmitirse a GPU modernas que podrían ser acelerado a través de programas de fragmentos de GPU. XvMC podría ampliarse en el futuro para admitir los mismos procesos que las API de aceleración de video por hardware más nuevas de la competencia, como VDPAU , XvBA y VAAPI :
- Compensación de movimiento (comp. Mo)
- Transformada de coseno discreta inversa (iDCT)
- Corrección desplegable de telecine inverso 3: 2 y 2: 2
- Transformada de coseno discreta modificada inversa (iMDCT)
- Filtro de desbloqueo en bucle
- Predicción intracuadro
- Cuantización inversa (IQ)
- Decodificación de longitud variable (VLD), más comúnmente conocida como aceleración de nivel de corte
- -Espacial temporal desentrelazado y automático de entrelazado / progresivo de detección de fuente
- Procesamiento de flujo de bits ( CAVLC / CABAC )
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 MPEG-2 en 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.
- Imagen en imagen (PiP) no funciona con XvMC.
- Pasar a través del video cuadro por cuadro puede causar artefactos con XvMC.
- Editar un video es difícil o imposible con XvMC activado.
- Falta de transparencia de red en la API de XvMC
- No tiene la capacidad de que la aplicación cliente sea completamente independiente de qué biblioteca del lado del cliente debe usarse (es decir, una biblioteca contenedora unificada).
Se está llevando a cabo un proyecto llamado VA API para desarrollar una API de aceleración de video más moderna que admitirá las funciones de aceleración de video de las GPU modernas. [8]
Ver también
- Extensión de video X (comúnmente conocida como "XVideo" o "Xv")
- Sistema de ventanas X (comúnmente conocido como "X11" o "X")
- MIT-SHM : la extensión de memoria compartida MIT para X11
- API DirectX Video Acceleration (DxVA) - Microsoft Windows equivalente a XvMC
- API de aceleración de video (API VA)
- OpenMAX IL (Capa de integración de aceleración de medios abiertos) : una API de abstracción de medios multiplataforma libre de regalías de Khronos Group
- Aceleración de flujo de bits de X-Video (XvBA)
- VDPAU (API de presentación y decodificación de video para Unix)
- Distributed Codec Engine (libcde) es una API de Texas Instruments para el motor de códec de video en sistemas embebidos basados en OMAP
- Video Decode Acceleration Framework es la API de Apple Inc. para la decodificación acelerada por hardware de H.264 en Mac OS X
- VideoToolbox es una API de Apple Inc. para decodificación acelerada por hardware en Apple TV y Mac OS X 10.05 o posterior. [9] Originalmente no estaba documentado, pero desde entonces Apple ha publicado documentación sobre él. [10]
- OpenVideo Decode (OVD) : una nueva API abierta de aceleración de video multiplataforma de AMD . [11]
Referencias
- ^ nouveau Wiki - Matriz de funciones
- ^ "Copia archivada" . Archivado desde el original el 26 de septiembre de 2015 . Consultado el 26 de febrero de 2009 .CS1 maint: copia archivada como título ( enlace )
- ^ Controladores de gráficos Linux de Intel - i810 - chipsets gráficos integrados Intel 8xx
- ^ Aceleración de flujo de bits de X-Video de AMD // phoronix, 28 de octubre de 2008
- ^ Compensación de movimiento de X-Video: especificación API v. 1.0 Archivado el 15 de mayo de 2007 en Wayback Machine
- ^ Notas de la versión de MythTV 0.25
- ^ Especificación de la API de XvMC versión 1.0 Archivada el 15 de mayo de 2007 en Wayback Machine.
- ^ freedesktop.org - Software / vaapi
- ^ 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 ahora disponible
- ^ "VideoToolbox - Documentación para desarrolladores de Apple" . developer.apple.com . Consultado el 5 de agosto de 2018 .
- ^ "Copia archivada" (PDF) . Archivado desde el original (PDF) el 9 de abril de 2011 . Consultado el 16 de enero de 2012 .CS1 maint: copia archivada como título ( enlace ) API de decodificación de OpenVideo (OVD)
enlaces externos
- Fundación X.Org
- El proyecto XFree86, Inc.
- freedesktop.org
- El proyecto Unichrome
- XvMC en la wiki de MythTV