Platform SDK: DirectX

HREF、VREF、およびコネクション

[Visual Basic]

ここでは、C++ でのアプリケーション開発について説明する。Visual Basic for DirectX 7.0 ではビデオ ポートをサポートしていない。

[C++]

モニタまたは他のディスプレイ デバイスがイメージを表示している場合、一般に左から右、上から下へイメージを作成して、スクリーンを下方にスキャンする (1 つのイメージを作成するのに、デバイスがスクリーンの下方へ 2 つずつスキャンすることもある。このタイプのディスプレイは、インターレイス方式ディスプレイと呼ばれる)。ビデオ ストリームには、新しいラインまたは新しいスクリーンを描画するときをディスプレイ デバイスに指示する信号が含まれる。

hsync および vsync とも呼ばれる HREF および VREF は、ディスプレイ デバイスに何をいつ行うかを知らせるビデオ ストリーム内の信号である。HREF は新しいラインを描画することを知らせ、VREF は新しいスクリーンを描画することを知らせる。

たとえば、世界最小のモニタ用ビデオ信号を取り扱っているとする。モニタには 4 走査線しかない (もちろん、これはまったく現実的ではないが、取り扱いが簡単になる)。オシロスコープでは、HREF および VREF 信号が次の図に示すようになるものと考えられる。

上記の図で、HREF および VREF 信号は共に "アクティブ ハイ" である。これは、これらの信号が強調状態 (波形が上昇するとき) のときに、アクティブになると考えられる。これらの信号に対する標準は存在しない。波形が下降する場所 ("ロー" 状態) でアクティブな HREF または VREF の信号を送る場合がある。また、一方がアクティブ ハイでもう一方がアクティブ ローであることもある。上記の図は想像上の例にすぎないが、個々の VREF に対して多数の HREF 信号が存在することに注意する。その理由は、個々の新しいスクリーンに対していくつかの走査線が存在するからである。もちろん、実際のブロードキャストに対する実際のビデオ信号では、1 つの VREF に対して数百の HREF が存在する。

HREF 信号、VREF 信号、およびビデオ データは、物理データ ラインを渡りデコーダからビデオ ポートまで伝達される。多くの場合、ビデオ データ用にいくつかのラインが確保されており、他のラインも HREF 信号や VREF 信号を伝達するための専用として使われている。ただし、これらのデータラインの使用についての標準はない。

コネクションは、ビデオ ポートやデコーダがこれらのデータ ラインの使用を定義するために使うプロトコルである。ビデオ ポートやビデオ デコーダは、さまざまなコネクションをサポートする。DirectDraw ビデオ ポート拡張機能は、GUID (globally-unique identifier) を使って個々のコネクション タイプを識別する。IDDVideoPortContainer::GetVideoPortConnectInfo メソッドを呼び出すことにより、ビデオ ポートがサポートするコネクションを照会できる。IDDVideoPortContainer::CreateVideoPort メソッドを呼び出すことにより、与えられたコネクションをサポートする DirectDrawVideoPort オブジェクトを作成できる。

ビデオ デコーダは DirectDraw ビデオ ポート拡張機能の範囲外であり、それ自体のインターフェイスからサポートされるコネクションを公開することを忘れてはならない。ビデオ ポートがサポートするコネクションを列挙して、その結果をデコーダのサポートするコネクションと比較することで、両方のコンポーネントで理解できる共通コネクション (あるいは、"言葉") を決めることができる。