X-Video Motion Compensation (XvMC)は、 X Window System 用のX ビデオ拡張機能 (Xv)の拡張機能です。XvMC API を使用すると、ビデオ プログラムがビデオ デコード処理の一部をGPUビデオ ハードウェアにオフロードできます。理論的には、この処理によりバス帯域幅の要件も削減されるはずです。現在、XvMC が GPU にオフロードできる部分は、MPEG-2ビデオのモーション 補償 (mo comp)と逆離散コサイン変換 (iDCT)です。XvMC は、VIA Unichrome (S3 Graphics Chrome Series) ハードウェア上で、MPEG-2だけでなくMPEG-4 ASPビデオについても、 mo comp、iDCT、およびVLD (「可変長デコード」、一般的には「スライス レベル アクセラレーション」として知られています) のデコードオフロードもサポートしています。
XvMCは、Microsoft WindowsのDirectXビデオアクセラレーション(DxVA)APIに相当する最初のUNIX版でした。XvMCを活用していることで知られる人気ソフトウェアアプリケーションには、MPlayer、MythTV、xineなどがあります。
XvMCビデオアクセラレーションに対応した各ハードウェアビデオGPUは、これらの機能を有効にするためにX11ソフトウェアデバイスドライバを必要とします。
現在、Nvidia の X11 ドライバは 3 つあります。Nvidiaが保守している、難読化された 2D 専用のオープンソースドライバ nv、Nvidia のプロプライエタリバイナリドライバ、そして Linux コミュニティが開発したバイナリドライバのリバースエンジニアリングに基づくオープンソースドライバNouveauです。Nouveau は XvMC のサポートを追求しておらず、[ 1 ] 2D nv ドライバは XvMC をサポートしておらず、Nvidia の公式プロプライエタリバイナリドライバは、 GeForce 7000 シリーズまでのハードウェアでのみ MPEG-2 オフロード (mo comp および iDCT) をサポートしています。
VIAは、一部のVIA Unichrome(S3 Graphics Chromeシリーズ)ハードウェア向けにオープンソースのデバイスドライバを提供しており、MPEG-2およびMPEG-4 ASPビデオのオフロードをサポートしています。VLDレベルのデコードのおかげで、VIAはiDCTまたはmo compレベルのみをサポートするGPUよりもCPUから多くのデコードタスクをオフロードします。すべてのデバイスがサポートされているわけではなく、他にもいくつかの注意点があることに注意してください。[ 2 ]
Intelは、Intelの8xx/9xxシリーズの統合グラフィックスチップ上でMPEG-2オフロード(mo compおよびiDCT)をサポートする公式のオープンソースデバイスドライバを提供しています。[ 3 ]
ATIはRage 128 GPUを搭載したグラフィックボードでMPEG-2アクセラレーションを最初に提供したメーカーですが、その使用方法に関するドキュメントは提供していません。そのため、XvMCは利用できず、おそらく今後も利用できないでしょう。XvMCは、Radeon -4000カード( UVD搭載)ではCatalystドライバー8.10以降で実験的なレベルでサポートされています(つまり、「そのまま」では動作しません)。[ 4 ] ( X-Videoビットストリームアクセラレーション も参照)。他のATI/AMDハードウェアでのモーション補償サポートは将来的に予定されています。(現在、すべてのハードウェアでiDCTおよびmo compレベルでのMPEG-2アクセラレーションがサポートされています)。
Matroxハードウェア上でXvMCをサポートするデバイスドライバは存在しません(ただし、Matrox ParheliaハードウェアはモーションコンプレベルでのMPEG-2アクセラレーションをサポートしています)。
S3によるバイナリデバイスドライバは、Chrome 20 GPU上の初期バージョン2.0.16ドライバにおいて、MPEG-2オフロードのみをサポートしています。
これはX-Vxvideoideo モーション補償 - API 仕様 v. 1.0 [ 5 ]からのものです。
XvMCはXビデオ拡張機能(Xv)を拡張し、おなじみのXvPortの概念を利用します。ポートには、Xvを介して設定および照会できる属性があります。XvMCでは、ポートで使用するためのハードウェアモーション補正コンテキストを作成することもできます。XvImagesをサポートするポート(つまり、Xvバージョン2.2 API補足で説明されている「XV_IMAGE」ポートエンコーディングを持つポート)は、サポートするXvMCSurfaceタイプのリストを照会できます。いずれかのXvMCSurfaceタイプをサポートしている場合は、そのポート用にXvMCContextを作成できます。
XvMCContext は、モーション補償パイプラインの状態を表します。個々の XvMCContext は、単一のポート、サーフェスタイプ、モーション補償タイプ、幅と高さの組み合わせで使用するために作成できます。たとえば、 720 x 480 4:2:0 サーフェスでMPEG-2モーション補償を実行する特定のポート用にコンテキストを作成できます。コンテキストが作成されると、それを参照することで、ポート、サーフェスタイプ、サイズ、およびモーション補償タイプが暗黙的に指定されます。コンテキストは「直接」または「間接」のいずれかになります。間接コンテキストの場合、Xディスプレイサーバーはクライアントから渡されたデータを使用してすべてのビデオをレンダリングします。直接コンテキストの場合、クライアントライブラリは X ディスプレイサーバーとのやり取りをほとんどまたはまったく行わずにビデオをレンダリングします。
XvMCSurfacesは、モーション補正ハードウェアがレンダリングを行うためのバッファです。バッファ内のデータ自体はクライアントからアクセスできず、ハードウェア固有の形式で保存される場合があります。特定のコンテキストで使用するために、任意の数のバッファを作成できます(リソースが許せば)。
XvMCは、ビデオパイプライン内の2つの場所のいずれかからビデオアクセラレーションを開始します。最初の場所(以下、「モーション補償」レベルと呼びます)からのアクセラレーションは、逆量子化とIDCTの後、モーション補償が適用される場所で開始されます。2番目の場所(以下、「IDCT」レベルと呼びます)からのアクセラレーションは、逆量子化直後のIDCTの前から始まります。
レンダリングは、ターゲットとなる XvMCSurface と、モーション補正用の参照 XvMCSurface を最大 2 つライブラリに提示することで行われます。さらに、8x8 ブロックのバッファと、8x8 ブロックとモーション補正ベクトルを使用してターゲット XvMCSurface のデータを構築する方法を記述するコマンドバッファもライブラリに渡されます。パイプラインが iDCT レベルで開始される場合、Xv はモーション補正を実行する前にブロックに対して IDCT を実行します。XvMCSurface の一部を任意のスケールで描画可能なオブジェクトにコピー/オーバーレイする関数も提供されています。
XvMCSubpicturesは、ターゲットサーフェスとブレンド可能な独立したサーフェスです。1つのコンテキストで使用するために、任意の数のXvMCSubpicturesを作成できます(リソースが許せば)。「バックエンド」と「フロントエンド」の両方のサブピクチャ動作がサポートされています。
XvMCアクセラレーションは以下でサポートされています。
Mesa 22.3ではXvMCが削除されました。
XvMCは現在、モーション補償(mo comp)と逆離散コサイン変換(iDCT)のハードウェアアクセラレーション(およびVIA Unichrome GPUの可変長デコード)のみをサポートしていますが、追加のビデオデコード処理を最新のGPUに渡して、GPUフラグメントプログラムを介して高速化することができます。将来的には、XvMCはVDPAU、XvBA、VAAPIなどの新しい競合ハードウェアビデオアクセラレーションAPIと同じ処理をサポートするように拡張される可能性があります。
XvMC API仕様バージョン1.0 [ 7]は、 DxVA(Windows用のMicrosoft相当のAPI )のすべての機能や特性に一致していないこと、 IntelとNvidiaのLinuxデバイスドライバでMPEG-2以外のビデオフォーマットがサポートされていないことに加えて、現在、次のような制限もあります。
VA APIは、最新のGPUのビデオアクセラレーション機能をサポートする、より現代的なビデオアクセラレーションAPIです。[ 8 ]
{{cite web}}: CS1 maint: タイトルとしてアーカイブされたコピー (リンク){{cite web}}: CS1 maint: タイトルとしてアーカイブされたコピー (リンク) OpenVideo Decode (OVD) API