X-Video Motion Compensation (XvMC), is an extension of theX video extension (Xv) for the X Window System. The XvMCAPI allows video programs to offload portions of thevideo decoding process to theGPU video-hardware. In theory this process should also reduce bus bandwidth requirements. Currently, the supported portions to be offloaded by XvMC onto the GPU aremotion compensation (mo comp) andinverse discrete cosine transform (iDCT) forMPEG-2 video. XvMC also supports offloading decoding ofmo comp,iDCT, andVLD ("Variable-Length Decoding", more commonly known as "slice level acceleration") for not onlyMPEG-2 but alsoMPEG-4 ASP video onVIA Unichrome (S3 Graphics Chrome Series) hardware.
XvMC was the first UNIX equivalent of the Microsoft WindowsDirectX Video Acceleration (DxVA) API. Popular software applications known to take advantage of XvMC includeMPlayer,MythTV, andxine.
Each hardware videoGPU capable of XvMC video acceleration requires aX11 softwaredevice driver to enable these features.
There are currently three X11 Nvidia drivers available: a 2D-onlyopen source but obfuscated driver maintained by Nvidia called nv, aproprietary binary driver by Nvidia, and an open source driver based on reverse engineering of the binary driver developed by the Linux community calledNouveau. Nouveau is not pursuing XvMC support,[1] the 2D nv driver does not support XvMC, and the officialproprietary binary driver by Nvidia only supports MPEG-2 offloading (mo comp and iDCT) on hardware up to and including theGeForce 7000 series.
VIA provides open source device drivers for some of itsVIA Unichrome (S3 Graphics Chrome Series) hardware, supporting offloading ofMPEG-2 andMPEG-4 ASP video.Thanks to VLD level of decoding VIA offloads much more decoding tasks from CPU than GPUs supporting iDCT or mo comp levels only. Keep in mind that not all devices are supported and there are some other caveats.[2]
Intel provides official open source device drivers which supports MPEG-2 offloading (mo comp and iDCT) on Intel's 8xx/9xx range of integrated graphics chips.[3]
Although ATI was the first manufacturer to provide MPEG-2 acceleration in their graphic boards with the Rage 128 GPU, it has never provided documentation on how to use it. So no XvMC is available, and will probably never be.XvMC is supported onRadeon-4000 cards (which haveUVD) byCatalyst driver from 8.10 and higher at an experimental level (meaning that it doesn't work "out of the box".)[4] (See alsoX-Video Bitstream Acceleration).Motion compensation support in other ATI/AMD hardware is planned for the future. (Now all hardware has support for MPEG-2 acceleration on iDCT and mo comp levels).
There are no device drivers which support XvMC on Matrox hardware, (althoughMatrox Parhelia hardware has support for MPEG-2 acceleration on mo comp level).
Binary device driver by S3 only supports MPEG-2 offloading in initial 2.0.16 driver on Chrome 20 GPUs.[citation needed]
This is fromX-Vxvideoideo Motion Compensation - API specification v. 1.0[5]
XvMC extends theX video extension (Xv) and makes use of the familiar concept of the XvPort. Ports have attributes that can be set and queried through Xv. In XvMC ports can also have hardwaremotion compensation contexts created for use with them. Ports which support XvImages (i.e. they have an "XV_IMAGE" port encoding as described in the Xv version 2.2 API addendum) can be queried for the list of XvMCSurface types they support. If they support any XvMCSurface types an XvMCContext can be created for that port.
XvMCContext describes the state of themotion compensation pipeline. An individual XvMCContext can be created for use with a single port, surface type, motion compensation type, width and height combination. For example, a context might be created for a particular port that doesMPEG-2 motion compensation on 720 x 480 4:2:0 surfaces. Once the context is created, referencing it implies the port, surface type, size and the motion compensation type. Contexts may be "direct" or "indirect". For indirect contexts the Xdisplay server renders all video using the data passed to it by the client. For direct contexts the client libraries render the video with little or no interaction with the X display server.
XvMCSurfaces are buffers into which themotion compensation hardware can render. The data in the buffers themselves are not client accessible and may be stored in a hardware-specific format. Any number of buffers can be created for use with a particular context (resources permitting).
XvMC provides video acceleration starting at one of two places in the videopipeline. Acceleration starting at the first point, which we shall call the "Motion Compensation" level, begins after theinverse quantization andIDCT at the place wheremotion compensation is to be applied. The second point, which we shall call the "IDCT" level, begins before the IDCT just after the inverse quantization.
Rendering is done by presenting the library with a target XvMCSurface and up to two reference XvMCSurfaces for the motion compensation, a buffer of 8x8 blocks and a command buffer which describes how to use the 8x8 blocks along with motion compensation vectors to construct the data in the target XvMCSurface. When the pipeline starts at the iDCT level, Xv will perform the IDCT on the blocks before performing the motion compensation. A function is provided to copy/overlay a portion of the XvMCSurface to a drawable with arbitrary scaling.
XvMCSubpictures are separate surfaces that may be blended with the target surface. Any number of XvMCSubpictures may be created for use with a context (resources permitting). Both "backend" and "frontend" subpicture behavior are supported.
XvMC acceleration is supported in:
XvMC have been removed inMesa 22.3.
Even though XvMC currently only supports hardware acceleration ofmotion compensation (mo comp) andinverse discrete cosine transform (iDCT), (and Variable-Length Decoding for VIA Unichrome GPU), additional video decoding processes could be passed on to modernGPUs which could be accelerated via GPU fragment programs. XvMC could be extended in the future to support the same processes as the newer competing hardware video acceleration APIs likeVDPAU,XvBA, andVAAPI:
Besides not matching all of the features and function ofDxVA (which is theMicrosoft equivalentAPI forWindows), and lacking support for other video formats thanMPEG-2 in Linux device drivers fromIntel andNvidia, theXvMC API specification version 1.0[7] currently also has these other limitations:
VA API is a more modern video acceleration API which support the video acceleration features of modern GPUs.[8]
{{cite web}}: CS1 maint: archived copy as title (link){{cite web}}: CS1 maint: archived copy as title (link) OpenVideo Decode (OVD) API