The protocol was designed by David Carver; the specification for version 2 of the protocol was written in July 1991.
It is mainly used today to resize video content in the video controller hardware in order to enlarge a given video or to watch it in full screen mode.
Without XVideo, X would have to do this scaling on the main CPU.
That requires a considerable amount of processing power, which could slow down or degrade the video stream; video controllers are specifically designed for this kind of computation, so can do it much more cheaply.
Similarly, the X video extension can have the video controller perform color space conversions, and change the contrast, brightness, and hue of a displayed video stream.
In order for this to work, three things have to come together: The video controller has to provide the required functions.
The device driver software for the video controller and the X display server program have to implement the XVideo interface.
The video playback software has to make use of this interface.Most modern video controllers provide the functions required for XVideo; this feature is known as hardware scaling and YUV acceleration or sometimes as 2D hardware acceleration.
The XFree86 X display server has implemented XVideo since version 4.0.2.
To check whether a given X display server supports XVideo, one can use the utility xdpyinfo.
To check whether the video controller provides the required functions and whether the X device driver implements XVideo for any of them, one can use the xvinfo program.
Video playback programs that run under the X Window system, such as MPlayer, MythTV or xine, typically have an option to enable XVideo output.
It is very advisable to switch on this option if the system GPU video-hardware and device drivers supports XVideo and more modern rendering systems such as OpenGL and VDPAU are unavailable – the speedup is very noticeable even on a fast CPU.
While the protocol itself has features for reading and writing of video streams from and to video adapters, in practice today only the functions XvPutImage and XvShmPutImage are used: the client program repeatedly prepares images and passes them on to the graphics hardware to be scaled, converted and displayed.Read more