PDD_VPORTCB_GETBANDWIDTH
コールバックシグネチャ
DWORD PDD_VPORTCB_GETBANDWIDTH(
DD_GETVPORTBANDWIDTHDATA* param0
);パラメーター
| フィールド | 型 | 説明 |
|---|---|---|
| param0 | DD_GETVPORTBANDWIDTHDATA* | ドライバーが帯域幅データを返すために必要な情報を格納した DD_GETVPORTBANDWIDTHDATA 構造体へのポインターです。 |
公式ドキュメント
DdVideoPortGetBandwidth コールバック関数は、指定された VPE オブジェクトの出力形式に基づいて、デバイスのフレームバッファーメモリの帯域幅の制限を報告します。
戻り値
DdVideoPortGetBandwidth は、次のコールバックコードのいずれかを返します。
解説(Remarks)
DdVideoPortGetBandwidth は、VPE をサポートする DirectDraw ドライバーで実装する必要があります。
DdVideoPortGetBandwidth は、指定された任意の形式に対する帯域幅の要件をクライアントに通知し、クライアントが形式を選択し、その制限をより深く理解できるようにします。ドライバーが正確な帯域幅情報を提供できるのは VPE オブジェクトが作成された後だけです。これは、ドライバーが DDVIDEOPORTDESC 構造体内の情報を必要とするためです。
DdVideoPortGetBandwidth は通常、指定されたハードウェアビデオポートの帯域幅パラメーターを取得するために 2 回呼び出されます。lpGetVideoPortBandwidth が指す DD_GETVPORTBANDWIDTHDATA 構造体の dwFlags メンバーに応じて、ドライバーは次の処理を行う必要があります。
-
フラグが DDVPB_TYPE の場合、ドライバーは、DD_GETVPORTBANDWIDTHDATA の lpBandwidth メンバーが指す DDVIDEOPORTBANDWIDTH 構造体の dwCaps メンバーに次のいずれかのフラグを設定して、自身がどの種類のデバイスであるかを示す必要があります。
- DDVPBCAPS_DESTINATION は、デバイスが自身の帯域幅性能をオーバーレイの拡大率で表すことを示します。つまり、次回の DdVideoPortGetBandwidth の呼び出しでドライバーが返す帯域幅情報が、転送先オーバーレイのサイズを基準とすることを示します。このフラグは、プライマリサーフェスとオーバーレイサーフェスの両方から同時にリフレッシュを行うハードウェアを最もよく表します。転送先のビデオが拡大されるほど、ハードウェアがオーバーレイサーフェスからピクセルを読み取る時間に余裕ができ、必要なメモリ帯域幅は減少します。
- DDVPBCAPS_SOURCE は、デバイスが自身の帯域幅性能を必要な転送元オーバーレイのサイズで表すことを示します。つまり、次回の DdVideoPortGetBandwidth の呼び出しで返される帯域幅情報が、転送元オーバーレイのサイズを基準とすることを示します。このフラグは、オーバーレイデータをラインバッファーまたは大容量の FIFO にプリフェッチするハードウェアを最もよく表します。この種のハードウェアは余分な帯域幅を必要としませんが、転送元オーバーレイのデータがハードウェアのサポートするバッファー/FIFO のサイズ内に完全に収まる必要があります。
ドライバーは、戻る前に DDVIDEOPORTBANDWIDTH 構造体の dwSize メンバーも設定する必要があります。
-
フラグが DDVPB_VIDEOPORT の場合、DD_GETVPORTBANDWIDTHDATA 構造体の dwWidth メンバーと dwHeight メンバーは、ハードウェアビデオポートが転送元オーバーレイとしてフレームバッファーに書き込むビデオデータのプリスケールサイズを表します。ドライバーは、デバイスがオーバーレイを表示できるオーバーレイ拡大率を 1000 倍した値を、DDVIDEOPORTBANDWIDTH 構造体の dwOverlay、dwColorkey、dwYInterpolate、dwYInterpAndColorkey の各メンバーに返す必要があります。たとえば、値 2000 は、オーバーレイを表示する際に転送元の指定サイズの 2 倍まで拡大できる帯域幅をデバイスが備えていることを示します。値 1000 は、指定されたデータサイズに対して拡大が不要であることを示します。値 500 は、オーバーレイの転送先を半分に縮小するのに十分な帯域幅をデバイスが備えていることを示します。ドライバーは dwOverlay に有効な値を設定する必要がありますが、サポートしていない残りの 3 つのメンバーには -1 を返すことができます。
DDVPB_VIDEOPORT フラグは、デバイスが DDVPBCAPS_DESTINATION フラグで最もよく表されることを前提としています。そうでない場合、ドライバーはこの呼び出しを失敗させる必要があります。
-
DDVPB_OVERLAY フラグが設定されている場合、DD_GETVPORTBANDWIDTHDATA 構造体の dwWidth メンバーと dwHeight メンバーは、転送元オーバーレイのサイズを表します。ドライバーは、オーバーレイの表示をサポートできるこのオーバーレイのサイズに対する割合を 1000 倍した値を、DDVIDEOPORTBANDWIDTH 構造体の dwOverlay、dwColorkey、dwYInterpolate、dwYInterpAndColorkey の各メンバーに返す必要があります。たとえば、値 750 は、デバイスが正常に表示するために、指定された転送元オーバーレイを元のサイズの 75% に縮小する必要があることを示します。値 1000 は、縮小が不要であることを示します。この種のデバイスのドライバーは通常、1000 より大きい値を返しません。ドライバーは dwOverlay に有効な値を設定する必要がありますが、カラーキーや Y 軸補間をサポートしていない場合は、残りの 3 つのメンバーに 0 を返すことができます。
DDVPB_OVERLAY フラグは、デバイスが DDVPBCAPS_SOURCE フラグで最もよく表されることを前提としています。そうでない場合、ドライバーはこの呼び出しを失敗させる必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)