X-Videoモーション補償

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 compiDCTVLD (「可変長デコード」、一般に「スライス レベル アクセラレーション」と呼ばれる) のデコードのオフロードもサポートしてます

XvMCは、Microsoft Windows DirectX Video Acceleration (DxVA) APIに相当する最初のUNIX版です。XvMCを利用することで知られる一般的なソフトウェアアプリケーションには、MPlayerMythTVxineなどがあります。

デバイスドライバー

XvMC ビデオ アクセラレーションが可能な各ハードウェア ビデオGPUでは、これらの機能を有効にするために X11ソフトウェアデバイス ドライバーが必要です。

ハードウェアメーカー

エヌビディア

現在、X11 Nvidia ドライバには3種類あります。1つはNvidiaが管理する2D専用のオープンソースだが難読化されたドライバで、nvと呼ばれています。もう1つはNvidiaのプロプライエタリバイナリドライバで、もう1つは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 ]

インテル

インテルは、インテルの8xx/9xxシリーズの統合グラフィックチップ上でMPEG-2オフロード(mo compおよびiDCT)をサポートする公式オープンソースデバイスドライバーを提供しています。[ 3 ]

ATI/AMD

ATIはRage 128 GPUを搭載したグラフィックボードにMPEG-2アクセラレーションを初めて搭載したメーカーですが、その使い方に関するドキュメントはこれまで提供されていません。そのため、XvMCは利用できず、おそらく今後も提供されないでしょう。XvMCは、Radeon -4000カード( UVD搭載)において、 Catalystドライバ8.10以降で試験的なレベルでサポートされています(つまり、「そのままでは」動作しません)。[ 4 ] ( X-Videoビットストリームアクセラレーション も参照)。他のATI/AMDハードウェアにおける動き補償のサポートは、将来的に計画されています。(現在、すべてのハードウェアがiDCTおよび動き補償レベルでMPEG-2アクセラレーションをサポートしています)。

マトロックス

Matrox ハードウェア上で XvMC をサポートするデバイス ドライバーはありません (ただし、Matrox Parheliaハードウェアは mo comp レベルで MPEG-2 アクセラレーションをサポートしています)。

S3

S3 によるバイナリ デバイス ドライバーは、Chrome 20 GPU 上の初期の 2.0.16 ドライバーでのみ MPEG-2 オフロードをサポートします。

XvMC API 技術概要

これはX-Vxvideoideo Motion Compensation - API仕様v. 1.0からのものです[ 5 ]

Xvポート

XvMC はX ビデオ拡張機能 (Xv)を拡張し、XvPort というおなじみの概念を活用します。ポートには、Xv を介して設定および照会できる属性があります。XvMC では、ポートで使用するためにハードウェアモーション補正コンテキストを作成することもできます。XvImage をサポートするポート (つまり、Xv バージョン 2.2 API 補足資料に記載されているように "XV_IMAGE" ポートエンコーディングを持つポート) では、サポートする XvMCSurface タイプのリストを照会できます。XvMCSurface タイプのどれかをサポートしている場合、そのポート用に XvMCContext を作成できます。

XvMCコンテキスト

XvMCContext は、モーション補正パイプラインの状態を記述します。個々の XvMCContext は、単一のポート、サーフェスタイプ、モーション補正タイプ、幅と高さの組み合わせで使用できます。例えば、 720 x 480 4:2:0 サーフェスでMPEG-2モーション補正を行う特定のポート用にコンテキストを作成できます。コンテキストが作成されると、そのコンテキストを参照することで、ポート、サーフェスタイプ、サイズ、およびモーション補正タイプが暗黙的に指定されます。コンテキストは「直接」または「間接」のいずれかです。間接コンテキストの場合、Xディスプレイサーバーはクライアントから渡されたデータを使用してすべてのビデオをレンダリングします。直接コンテキストの場合、クライアントライブラリは X ディスプレイサーバーとのやり取りをほとんど、あるいは全く行わずにビデオをレンダリングします。

XvMCSurfaces

XvMCSurfacesは、モーション補償ハードウェアがレンダリングできるバッファです。バッファ内のデータ自体はクライアントからはアクセスできず、ハードウェア固有の形式で保存される場合があります。特定のコンテキストで使用するために、(リソースが許す限り)任意の数のバッファを作成できます。

ビデオパイプライン

XvMCは、ビデオパイプラインの2つのポイントのいずれかからビデオアクセラレーションを開始します。最初のポイント(ここでは「動き補償」レベルと呼びます)から加速が開始され、動き補償が適用される位置で逆量子化IDCTの後に開始されます。2番目のポイント(ここでは「IDCT」レベルと呼びます)から加速が開始され、逆量子化の直後、IDCTの前に開始されます。

レンダリング

レンダリングは、ライブラリにターゲットXvMCSurfaceとモーション補正用の最大2つの参照XvMCSurface、8x8ブロックのバッファ、そして8x8ブロックとモーション補正ベクトルを用いてターゲットXvMCSurfaceのデータを構築する方法を記述したコマンドバッファを提供することで行われます。パイプラインがiDCTレベルで開始されると、Xvはモーション補正を実行する前にブロックに対してIDCTを実行します。XvMCSurfaceの一部を任意のスケーリングで描画可能オブジェクトにコピー/オーバーレイする関数も提供されています。

XvMCサブピクチャ

XvMCSubpicturesは、ターゲットサーフェスとブレンド可能な独立したサーフェスです。コンテキストで使用するために、リソースが許せば任意の数のXvMCSubpicturesを作成できます。「バックエンド」と「フロントエンド」の両方のサブピクチャ動作がサポートされています。

ソフトウェアサポート

XvMC アクセラレーションは以下でサポートされています:

XvMC はMesa 22.3で削除されました。

加速できるプロセス

XvMCは現在、モーション補償(mo comp)と逆離散コサイン変換(iDCT)、そしてVIA Unichrome GPU向けの可変長デコードのみのハードウェアアクセラレーションをサポートしていますが、追加のビデオデコード処理を最新のGPUに渡すことで、GPUフラグメントプログラムによる高速化が可能になります。XvMCは将来的に拡張され、 VDPAUXvBAVAAPIといった新しい競合ハードウェアビデオアクセラレーションAPIと同様の処理をサポートする可能性があります。

現在の制限

XvMC API仕様バージョン1.0 [ 7]には、 DxVAWindows用のMicrosoftの同等のAPI )のすべての機能と特徴に対応していないこと、 IntelNvidiaのLinuxデバイスドライバーでMPEG-2以外のビデオフォーマットがサポートされていないことに加えて、現在次のような制限もあります。

  • BOB と onefield は、XvMC で機能する唯一のデインターレース方法です。
  • ピクチャー イン ピクチャー (PiP) は XvMC では動作しません。
  • ビデオをフレームごとにステップ実行すると、XvMC でアーティファクトが発生する可能性があります。
  • XvMC を有効にすると、ビデオの編集は困難または不可能になります。
  • XvMC API にネットワークの透明性が欠けている
  • クライアント アプリケーションが、どのクライアント側ライブラリを使用する必要があるか (つまり、統合ラッパー ライブラリ) から完全に独立する機能がありません。

VA APIは、最新のGPUのビデオアクセラレーション機能をサポートする、より現代的なビデオアクセラレーションAPIです。[ 8 ]

参照

参考文献

  1. ^ nouveau Wiki - 機能マトリックス
  2. ^ “アーカイブコピー” . 2015年9月26日時点のオリジナルよりアーカイブ。2009年2月26日閲覧。{{cite web}}: CS1 maint: アーカイブされたコピーをタイトルとして (リンク)
  3. ^ 「Linux グラフィックドライバー Intel - i810 - Intel 8xx 統合グラフィックチップセット」 2010年3月25日時点のオリジナルよりアーカイブ。 2009年11月12日閲覧
  4. ^ AMDのX-Videoビットストリームアクセラレーション// phoronix、2008年10月28日
  5. ^ X-Video Motion Compensation - API仕様 v. 1.0 2007年5月15日アーカイブ、 Wayback Machine
  6. ^ MythTV 0.25 リリースノート
  7. ^ XvMC API仕様バージョン1.0 2007年5月15日アーカイブ、 Wayback Machine
  8. ^ freedesktop.org - ソフトウェア/vaapi
  9. ^ https://web.archive.org/web/20150305200949/http://www.tuaw.com/2011/01/20/xbmc-for-ios-and-atv2-now-available/ iOS および Apple TV 向け XBMC が利用可能になりました
  10. ^ 「VideoToolbox - Apple Developer Documentation」 . developer.apple.com . 2018年8月5日閲覧。
  11. ^ 「アーカイブコピー」(PDF) 。 2011年4月9日時点のオリジナル(PDF)からアーカイブ2012年1月16日閲覧。{{cite web}}: CS1 maint: アーカイブされたコピーをタイトルとして (リンク)OpenVideo デコード (OVD) API