Xビデオ拡張機能

X Window System のビデオ出力メカニズム
Xビデオ拡張機能
原作者X.Org財団
安定版リリース
2.0 / 1991年7月25日; 34年前 (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

MPlayerMythTVxineなど、X Window Systemで動作するビデオ再生プログラムには、通常、XVideo出力を有効にするオプションがあります。システムのGPUビデオハードウェアとデバイスドライバーがXVideoをサポートしており、OpenGLやVDPAUなどの最新のレンダリングシステムが利用できない場合は、このオプションをオンにすることを強くお勧めします。高速なCPUでも、速度向上は顕著です

プロトコル自体にはビデオ アダプタからのビデオ ストリームの読み取りとビデオ アダプタへのビデオ ストリームの書き込みの機能がありますが、実際には、関数XvPutImageと機能のみXvShmPutImageが使用されます。つまり、クライアント プログラムはイメージを繰り返し準備し、それをグラフィック ハードウェアに渡して、スケーリング、変換、および表示を行います。

画面

ビデオカードへの表示準備とスケーリングが完了したら、いよいよ表示です。この段階でアクセラレーションされたビデオを表示する方法はいくつかあります。フルアクセラレーションとは、ビデオコントローラーがビデオのスケーリング、変換、描画を担うことを意味するため、使用する手法はビデオを描画するデバイスによって大きく異なります。

ウィンドウマネージャのサポートと合成の役割

X では、ビデオが最終的にどのように描画されるかは、使用しているX ウィンドウ マネージャーによって大きく異なります。適切にインストールされたドライバーと、サポートされているIntelATI、および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以前では、ウィンドウ管理機能がオペレーティングシステムに深く組み込まれていたため、ハードウェアアクセラレーションによるビデオのレンダリングには、このプロセスが唯一の選択肢でした。そのため、 Windows XP以前のWindowsでは、ウィンドウ管理機能を高速化することは不可能でした。

ウィンドウマネージャーが合成をサポートしていない場合、前項で説明したクロマキー処理を用いたハードウェアオーバーレイの後処理によって、Xvideoアプリケーションの適切なスクリーンショットを作成できなくなる可能性があります。また、ハードウェアレベルでオーバーレイが1つしか許可されていない場合、この種の再生をセカンダリディスプレイで表示できなくなる可能性もあります。

参照

参考文献

  1. ^ 公式 XVideo 仕様、バージョン 2.0
  • 公式 X ビデオ拡張機能仕様、バージョン 2.0
  • XVideo バージョン 2.2 の追加機能
  • Xv マニュアルページ

サンプルプログラム

  • testxv.c: ほとんどのインストールでは、" gcc -o testxv testxv.c -L/usr/X11R6/lib -lX11 -lXext -lXv"によってコンパイルされます。
  • testxv2.cc: C++ の別の例
「https://en.wikipedia.org/w/index.php?title=X_video_extension&oldid=1329200315」から取得