- X-Video Motion Compensation
X-Video Motion Compensation (XvMC), is an extension of the X video extension (Xv) for the
X Window System. The XvMC APIallows video programs to offload portions of the video decodingprocess to the GPU video-hardware. In theory this process should also reduce bus bandwidth requirements. Currently, the supported portions to be offloaded by XvMC onto the GPU are motion compensation (mo comp) and inverse discrete cosine transform (iDCT) for MPEG-2video. XvMC also supports offloading decoding of mo comp, iDCT, and VLD ("Variable-Length Decoding", more commonly known as "slice level acceleration") for not only MPEG-2but also MPEG-4 ASPand MPEG-4 AVC (H.264) video on VIA Unichrome (S3 Graphics Chrome Series) hardware. Popular software applications known to take advantage of XvMC include MPlayer, MythTV, and xine.
XvMC is the UNIX equivalent of the Microsoft Windows DirectX Video Acceleration (DxVA) API. Mac OS X also includes MPEG-2 acceleration capabilities, but Apple has chosen not to expose that API for use outside their own DVD-Video player application.Fact|date=February 2007
Motion compensationis an algorithmic technique employed in the encoding of video data, for example in the generation of MPEG-2files.
Each hardware video
GPUcapable of XvMC video acceleration requires a X11software device driverto enable these features.
There are currently three X11 Nvidia drivers available: One
open sourcedeveloped by the Linux community called Nouveau, one 2-d only open source driver maintained by nVidia called nv, and one proprietarybinary device driver by NVIDIA. Nouveau is not pursuing XvMC support [ [http://nouveau.freedesktop.org/wiki/FeatureMatrix nouveau Wiki - Feature Matrix] ] , the 2D nv driver does not support XvMC, and the official proprietarybinary device driver by NVIDIA only supports MPEG-2 offloading (mo comp and iDCT) on hardware up to and including the GeForce7000 series.
VIA provides open source device drivers for its VIA Unichrome (S3 Graphics Chrome Series) hardware, supporting offloading of
MPEG-2, MPEG-4 ASP, and MPEG-4 AVC (H.264) video.Thanks to VLD level of decoding VIA offloads much more decoding tasks from CPU than GPUs supporting iDCT or mo comp levels only.
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. [ [http://intellinuxgraphics.org/man.html Linux Graphics Drivers from Intel - i810 - Intel 8xx integrated graphics chipsets] ]
There are no device drivers which support XvMC on ATI/AMD hardware, (although all
Radeonhardware has support for MPEG-2 acceleration on iDCT and mo comp levels).
There are no device drivers which support XvMC on Matrox hardware, (although
Matrox Parheliahardware 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.
XvMC API technical overview
This is from "X-Video Motion Compensation - API specification v. 1.0" [ [http://www.xfree86.org/~mvojkovi/XvMC_API.txt X-Video Motion Compensation - API specification v. 1.0] ]
XvMC extends the X 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 hardware
motion compensationcontexts created for use with them. Ports which support XvImages (ie. 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 the
motion compensationpipeline. 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 does MPEG-2motion 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 X serverrenders 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 server.
XvMCSurfaces are buffers into which the
motion compensationhardware 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 video pipeline. Acceleration starting at the first point, which we shall call the "Motion Compensation" level, begins after the the
inverse quantizationand IDCT at the place where motion compensationis 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:
VLC media player
Processes that could be accelerated
Even though XvMC currently only support hardware acceleration of motion compensation (mo comp) and inverse discrete cosine transform (iDCT), (and Variable-Length Decoding for VIA Unichrome GPU), additional video decoding processes could be passed on to modern GPUs which on
Microsoft Windowscan accelerate many more via Microsoft's DirectX Video Acceleration (DxVA) API. XvMC could be extended in the future to support the same processes:
* Motion compensation (mocomp)
* Inverse discrete cosine transform (iDCT)
Inverse telecine3:2 and 2:2 pull-down correction
modified discrete cosine transform(iMDCT)
* In-loop deblocking filter
* Intra-frame prediction
* Inverse quantization (IQ)
* Variable-Length Decoding (VLD), more commonly known as slice-level acceleration
deinterlacingand automatic interlace/progressive source detection
* Bitstream processing (
Besides not matching all of the features and function of DxVA (which is the
Microsoftequivalent APIfor Windows), and lacking support for other video formats than MPEG-2in Linux device drivers from ATIand NVIDIA, the "XvMC API specification version 1.0" [ [http://www.xfree86.org/~mvojkovi/XvMC_API.txt XvMC API specification version 1.0] ] currently also has these other limitations:
*BOB and onefield are the only
deinterlacingmethods that work with XvMC.
*Picture in Picture (PiP) does work with XvMC.
*Stepping through the video frame by frame can cause artifacts with XvMC.
*Editing a video is difficult to impossible with XvMC activated.
*The client application must run as root
*Lacking network transparency in the XvMC API
*Lacking the ability for the client application to be completely independent of which client side library needs to be used (ie. a unified wrapper library).
A project called VA API is underway to develop a more modern video acceleration API which will support the video acceleration features of modern GPUs. [ [http://www.freedesktop.org/wiki/Software/vaapi freedesktop.org - Software/vaapi] ]
X video extension(commonly referred to as just "XVideo" or "Xv")
X Window System(commonly referred to as just "X11" or "X")
MIT-SHM- The MIT Shared Memory Extension for X11
* DirectX Video Acceleration (DxVA) API -
Microsoft Windowsequivalent to XvMC
* Video Acceleration API (VA API)
* [http://www.x.org X.Org Foundation]
* [http://www.xfree86.org The XFree86 Project, Inc.]
* [http://www.freedesktop.org freedesktop.org]
* [http://www.openchrome.org/ openChrome Project]
** [http://wiki.openchrome.org/tikiwiki/tiki-index.php?page=HardwareCaveats openChrome supported hardware]
* [http://sourceforge.net/projects/unichrome The Unichrome Project]
* [http://www.mythtv.org/wiki/index.php/XvMC XvMC at MythTV's wiki]
Wikimedia Foundation. 2010.
См. также в других словарях:
Motion compensation — is an algorithmic technique employed in the encoding of video data for video compression, for example in the generation of MPEG 2 files. Motion compensation describes a picture in terms of the transformation of a reference picture to the current… … Wikipedia
Global motion compensation — (GMC) is a technique used in video compression to reduce the bitrate required to encode video. It is most commonly used in MPEG 4 ASP, such as with the DivX and Xvid codecs. OperationGlobal motion compensation describes the motion in a scene… … Wikipedia
Video Acceleration API — (VA API) is a software API specification which provides access to graphics hardware (GPU) acceleration for video processing. Accelerated processing includes video decoding, subpicture blending and rendering.VA API is meant to some day replace… … Wikipedia
Motion interpolation — is a form of video processing in which intermediate animation frames are generated between existing ones, in an attempt to make animation more fluid. Contents 1 Applications 1.1 HDTV 1.2 Side effects 1.2.1 … Wikipedia
Motion estimation — is the process of determining motion vectors that describe the transformation from one 2D image to another; usually from adjacent frames in a video sequence. It is an ill posed problem as the motion is in three dimensions but the images are a… … Wikipedia
Video compression — refers to reducing the quantity of data used to represent video images and is a straightforward combination of image compression and motion compensation. This article deals with its applications: compressed video can effectively reduce the… … Wikipedia
Video Acceleration API — (abrégé en VA API, VA API ou VAAPI) est une bibliothèque open source (libVA) et une interface de programmation qui visent à permettre le rendu vidéo par le processeur graphique sur les systèmes dérivés d UNIX (comme Linux ou FreeBSD) utilisant X… … Wikipédia en Français
Motion coding — is a technique that can be viewed as extensions of the standard block matching techniques in other MPEG standard to image sequences of arbitrary shape. Advanced motion compensation such as overlapped motion compensation and coding of motion… … Wikipedia
Video codec — A video codec is a device or software that enables video compression and/or decompression for digital video. The compression usually employs lossy data compression. Historically, video was stored as an analog signal on magnetic tape. Around the… … Wikipedia
Motion JPEG — In multimedia, Motion JPEG (M JPEG) is an informal name for a class of video formats where each video frame or interlaced field of a digital video sequence is separately compressed as a JPEG image. Originally developed for multimedia PC… … Wikipedia