# Extensión de video X

La extensión de vídeo X, comúnmente abreviado como XVideo o Xv, es un mecanismo de producción del vídeo para el Sistema de ventanas X. El protocolo estuvo diseñado por David Carver. La especificación para versión 2 del protocolo se escribió en julio de 1991. Es utilizado actualmente para cambiar el tamaño del vídeo en el hardware del controlador, para ampliar un vídeo o poder verlo en pantalla completa. Sin XVideo, tendríamos que hacer este cambio de tamaño con la CPU principal. Esto carga considerablemente nuestro procesador, el cual podría ir más despacio o degradar la corriente de vídeo. Los controladores de vídeo son específicamente diseñados para esta clase de computación, así que lo puede hacer mucho más sencillo. De este modo, la extensión de vídeo X puede hacer que el controlador de vídeo realice conversiones de color y cambie el contraste, brillo, y tono de la retransmisión de vídeo mostrada.
Para hacer funcionar esto, se necesitan principalmente tres cosas:
* El controlador de vídeo tiene que proporcionar funciones requeridas.
* El software del controlador del dispositivo de vídeo y el servidor de exhibición X tienen que implementar la interfaz de XVideo.
* El software de reproducción de vídeo debe utilizar esta interfaz.
La mayoría de controladores de vídeo modernos proporcionan las funciones requeridas para XVideo. Esta característica está conocida como hardware scaling y YUV aceleración o a veces como aceleración de hardware 2D. El servidor de XFree86 ha implementado XVideo desde la versión 4.0.2. Para comprobar si un servidor de exhibición soporta XVideo, uno puede utilizar la utilidad xdpyinfo. Para comprobar si el controlador de vídeo proporciona las funciones requeridas y si el controlador del dispositivo implementa XVideo puede utilizar el programa xvinfo.
Los programas de reproducción de video que se ejecutan bajo el sistema X Window, como MPlayer, MythTV o Xine, generalmente tienen una opción para habilitar la salida de XVideo. Es muy recomendable activar esta opción si el hardware de video de la GPU del sistema y los controladores de dispositivo son compatibles con XVideo y los sistemas de renderizado más modernos como OpenGL y VDPAU no están disponibles; la aceleración es muy notable incluso en una CPU rápida.
Si bien el protocolo en sí tiene características para leer y escribir secuencias de video desde y hacia adaptadores de video, en la práctica hoy en día solo se utilizan las funciones XvPutImage y XvShmPutImage: el programa cliente prepara imágenes repetidamente y las pasa al hardware gráfico para escalarlas, convertirlas y se muestra.

## Exhibición

Después de que el vídeo haya sido escalado y preparado para mostrarse en la tarjeta de vídeo, hay unas cuantas maneras posibles de mostrar vídeo hasta llegar a este punto. Dado que la aceleración total significa que el controlador de video es responsable de escalar, convertir y dibujar el video, la técnica utilizada depende completamente de en qué se dibuja el video.

### El papel del soporte y la composición del administrador de ventanas

Cómo se dibuja finalmente el video depende en gran medida del administrador de ventanas X en uso. Con los controladores correctamente instalados y el hardware de la GPU, como los conjuntos de chips Intel, ATI y Nvidia compatibles, algunos administradores de ventanas, llamados administradores de ventanas de composición, permiten que las ventanas se procesen por separado y luego se procesen (o compongan). Esto implica que todas las ventanas se rendericen en búferes de salida separados en la memoria primero y luego se combinen para formar una interfaz gráfica completa. Mientras están en la memoria (de video), las ventanas individuales se pueden transformar por separado, y se puede agregar video acelerado en esta etapa usando un filtro de textura, antes de componer y dibujar la ventana. XVideo también se puede usar para acelerar la reproducción de video durante el dibujo de ventanas usando un Objeto OpenGL Framebuffer o pbuffer.
Metacity, un administrador de ventanas X usa la composición de esta manera. La composición también puede hacer uso de aceleraciones de tuberías 3D como GLX_EXT_texture_from_pixmap. Entre otras cosas, este proceso permite que muchas salidas de video compartan la misma pantalla sin interferir entre sí. Otros gestores de ventanas de composición como Compiz también utilizan la composición.
Sin embargo, en un sistema con función de aceleración OpenGL limitada, específicamente la falta de un objeto Framebuffer OpenGL o Pbuffer, el uso de un entorno OpenGL como Xgl hace que las aceleraciones de hardware xv sean imposibles.

### Las desventajas de codificación chroma

En el caso de que el administrador de ventanas no admita directamente la composición, es más difícil aislar dónde se debe renderizar la transmisión de video, porque cuando se puede acelerar, la salida ya se ha convertido en una sola imagen. La única forma de hacer esto suele ser empleando una superposición de hardware post-procesada, utilizando un Chroma. Una vez que ya se han dibujado todas las ventanas, la única información que tenemos disponible es el tamaño y la posición del lienzo de la ventana de video. Se requiere un tercer dato para indicar qué partes del lienzo de la ventana de video están oscurecidas por otras ventanas y cuáles no. Por lo tanto, el reproductor de video dibuja su lienzo usando un color sólido (diremos verde), y este color se convierte en una tercera dimensión improvisada. Cuando se hayan dibujado todas las ventanas, las ventanas que cubren el reproductor de video bloquearán el color verde. Cuando la secuencia de video se agrega a la salida, la tarjeta gráfica puede simplemente escanear las coordenadas del lienzo. Cuando encuentra el verde, sabe que ha encontrado una parte visible de la ventana de video y solo dibuja esas partes del video. Este mismo proceso fue también la única opción disponible para renderizar video acelerado por hardware bajo Microsoft Windows XP y versiones anteriores, ya que sus funciones de administración de ventanas estaban tan profundamente integradas en el sistema operativo que acelerarlas hubiera sido imposible.
Si el administrador de ventanas no admite la composición, las superposiciones de hardware post-procesadas utilizando el Chroma como se describe en el párrafo anterior pueden hacer que sea imposible producir capturas de pantalla adecuadas de las aplicaciones de Xvideo. También puede hacer que sea imposible ver este tipo de reproducción en una pantalla secundaria cuando solo se permite una superposición a nivel de hardware.