| 原作者 | X.Org財団 |
|---|---|
| 安定リリース | 2.0 / 1991年7月25日 |
Xビデオ拡張( XVideoまたはXvと略されることが多い) は、 X Window Systemのビデオ出力メカニズムです。このプロトコルは David Carver によって設計され、プロトコルのバージョン 2 の仕様は 1991 年 7 月に作成されました。 [1]これは現在主に、ビデオ コントローラ ハードウェアでビデオ コンテンツのサイズを変更して、特定のビデオを拡大したり、全画面モードで視聴したりするために使用されています。XVideo がなければ、X はメイン CPU でこのスケーリングを行う必要があります。これにはかなりの処理能力が必要になり、ビデオ ストリームが遅くなったり、品質が低下したりする可能性があります。ビデオ コントローラはこの種の計算用に特別に設計されているため、はるかに安価に行うことができます。同様に、X ビデオ拡張では、ビデオ コントローラで色空間変換を実行し、表示されるビデオ ストリームのコントラスト、明るさ、色相を変更できます。
これが機能するためには、次の 3 つの条件が満たされる必要があります。
- ビデオ コントローラーは必要な機能を提供する必要があります。
- ビデオ コントローラのデバイスドライバソフトウェアと Xディスプレイ サーバープログラムは、XVideo インターフェイスを実装する必要があります。
- ビデオ再生ソフトウェアはこのインターフェースを利用する必要があります。
最近のビデオ コントローラのほとんどは、 XVideoに必要な機能を備えています。この機能は、ハードウェア スケーリングおよびYUVアクセラレーション、または2D ハードウェア アクセラレーションと呼ばれることもあります。XFree86 X ディスプレイ サーバーは、バージョン 4.0.2 以降で XVideo を実装しています。特定の X ディスプレイ サーバーが XVideo をサポートしているかどうかを確認するには、ユーティリティを使用します。ビデオ コントローラが必要な機能を提供しているかどうか、および X デバイス ドライバーがそれらの機能のいずれかに対して XVideo を実装しているかどうかを確認するには、プログラムを使用します。
xdpyinfoxvinfo
MPlayer、MythTV、xineなど、X Window システムで実行されるビデオ再生プログラムには、通常、XVideo 出力を有効にするオプションがあります。システムのGPUビデオハードウェアとデバイスドライバーが XVideo をサポートしており、OpenGL や VDPAU などの最新のレンダリングシステムが利用できない場合は、このオプションをオンにすることを強くお勧めします。高速CPUでも、速度の向上が顕著に表れます。
プロトコル自体にはビデオ アダプタからのビデオ ストリームの読み取りとビデオ アダプタへのビデオ ストリームの書き込みの機能がありますが、実際には、機能XvPutImageと機能のみXvShmPutImageが使用されます。つまり、クライアント プログラムは繰り返しイメージを準備し、それをグラフィック ハードウェアに渡して、拡大縮小、変換、および表示します。
画面
ビデオが拡大縮小され、ビデオ カードで表示できるように準備されたら、ビデオを表示する必要があります。この段階では、高速化されたビデオを表示する方法はいくつかあります。完全な高速化とは、ビデオ コントローラーがビデオの拡大縮小、変換、および描画を担当することを意味するため、使用される手法は、ビデオが描画される対象によって完全に異なります。
ウィンドウマネージャのサポートと合成の役割
X では、ビデオが最終的にどのように描画されるかは、使用しているX ウィンドウ マネージャーに大きく依存します。適切にインストールされたドライバーと、サポートされているIntel、ATI、およびnVidiaチップ セットなどのGPUハードウェアがあれば、合成ウィンドウ マネージャーと呼ばれる一部のウィンドウ マネージャーで、ウィンドウを個別に処理してからレンダリング (または合成) することができます。この場合、すべてのウィンドウが最初にメモリ内の別々の出力バッファーにレンダリングされ、後で結合されて完全なグラフィカル インターフェイスが形成されます。(ビデオ) メモリ内にある間、個々のウィンドウを個別に変換することができ、この段階でテクスチャ フィルターを使用して加速されたビデオを追加してから、ウィンドウを合成して描画することができます。XVideo は、OpenGLフレームバッファー オブジェクトまたは pbuffer を使用してウィンドウを描画している間にビデオの再生を加速するためにも使用できます。
X ウィンドウ マネージャーのMetacity は、この方法で合成を使用します。合成では、GLX_EXT_texture_from_pixmap などの 3D パイプライン アクセラレーションも使用できます。特に、このプロセスにより、多数のビデオ出力が互いに干渉することなく同じ画面を共有できます。Compizなどの他の合成ウィンドウ マネージャーも合成を使用します。
ただし、OpenGL アクセラレーション機能が制限されているシステム、具体的には OpenGLフレームバッファ オブジェクトまたはpbufferが不足しているシステムでは、 Xglなどの OpenGL 環境を使用するとxv ハードウェア アクセラレーションが不可能になります。
クロマキーの欠点
ウィンドウ マネージャーが合成を直接サポートしていない場合、ビデオ ストリームをレンダリングする場所を特定するのが難しくなります。これは、高速化できるまでに出力が 1 つの画像に変換されているためです。これを行う唯一の方法は、通常、クロマ キーイングを使用して、後処理されたハードウェア オーバーレイを使用することです。すべてのウィンドウが描画された後は、ビデオ ウィンドウのキャンバスのサイズと位置という情報しか利用できません。ビデオ ウィンドウのキャンバスのどの部分が他のウィンドウに隠れていて、どの部分が隠れていないかを示す 3 つ目の情報が必要です。したがって、ビデオ プレーヤーはキャンバスを単色 (ここでは緑) を使用して描画し、この色が間に合わせの 3 つ目の次元になります。すべてのウィンドウが描画されると、ビデオ プレーヤーを覆うウィンドウが緑色をブロックします。ビデオ ストリームが出力に追加されると、グラフィック カードはキャンバスの座標をスキャンするだけで済みます。緑色に遭遇すると、ビデオ ウィンドウの可視部分を見つけたことがわかり、ビデオのその部分のみを描画します。この同じプロセスは、Microsoft Windows XPおよびそれ以前のバージョンでは、ウィンドウ管理機能がオペレーティング システムに深く埋め込まれていたため、高速化が不可能だったため、ハードウェア アクセラレーションされたビデオをレンダリングする唯一のオプションでもありました。
ウィンドウ マネージャーが合成をサポートしていない場合、前の段落で説明したクロマ キーを使用した後処理ハードウェア オーバーレイにより、Xvideo アプリケーションの適切なスクリーンショットを作成できなくなる可能性があります。また、ハードウェア レベルで 1 つのオーバーレイのみが許可されている場合、この種類の再生をセカンダリ ディスプレイで表示できなくなる可能性もあります。
参照
参考文献
- ^ 公式 XVideo 仕様、バージョン 2.0
外部リンク
- 公式 X ビデオ拡張機能仕様、バージョン 2.0
- XVideo バージョン 2.2 の追加機能
- Xv マニュアルページ
サンプルプログラム
gcc -o testxv testxv.c -L/usr/X11R6/lib -lX11 -lXext -lXvtestxv.c: ほとんどのインストールでは、" "によってコンパイルされます。- testxv2.cc: C++ の別の例
