Microsoft DirectX 8.0

IDirectDrawVideo インターフェイス

IDirectDrawVideo インターフェイスはビデオ レンダラに実装され、DirectDraw サーフェスとハードウェア機能に関する情報をアプリケーションに提供する。アプリケーションはこのインターフェイスを使って、ビデオ レンダラが利用する DirectDraw 機能を制御する。たとえば、ビデオ レンダラでハードウェア オーバーレイを利用しないことが確実であれば、SetSwitches メソッドを使って、ハードウェア オーバーレイの使用を無効にすることができる。

注 :  このインターフェイスを使って、ビデオ レンダラに DirectDraw の特定の機能を強制的に使用させることはできない。可能なのは、ビデオ レンダラが特定の機能を使わないようにすることだけである。

このインターフェイスは、一部が IDirectDraw インターフェイスと重複する。ただし、このインターフェイスでは、DirectDraw プロバイダを直接呼び出さなくても、同じ情報に簡単にアクセスできる。

ビデオ レンダラは接続されるまで DirectDraw をロードせず、同様に、DirectDraw はレンダラの接続が切断されるまでアンロードされない。レンダラがビデオ再生に使用する DirectDraw サーフェスを割り当てると、アプリケーションはそれを記述する DDSURFACEDESC 構造体を取得できる。レンダラは DDSURFACEDESC 構造体へのポインタを渡すことによって、現在のサーフェスに関する詳細なデータを構造体に格納する。DirectDraw がロードされていない場合、レンダラは、E_FAIL を返す。レンダラが DCI (DirectDraw の前のバージョン) を使っている場合、DDSURFACEDESC 構造体にデータは格納されず、呼び出しは S_FALSE を返す。レンダラが使用する DCI サーフェスのタイプは、プライマリ サーフェスに限られる。

vtable 順のメソッド

IUnknown メソッド説明
QueryInterface サポートされているインターフェイスへのポインタを取得する。
AddRef 参照カウントをインクリメントする。
Release 参照カウントをデクリメントする。
IDirectDrawVideo メソッド説明
GetCaps ハードウェア機能が格納された DirectDraw 定義 DDCAPS 構造体を取得する。
GetEmulatedCaps エミュレート機能が格納された DirectDraw 定義 DDCAPS 構造体を取得する。
CanUseOverlayStretch レンダラがオーバーレイ制限をチェックするかどうかを決定する。
CanUseScanLine レンダラが描画するときに現在の走査線をチェックするかどうかを決定する。
GetDirectDraw IDirectDraw インターフェイスを取得する。
GetFourCCCodes マルチメディア フォーマット タイプ FOURCC DWORD を取得する。
GetSurfaceDesc 使用されている DirectDraw サーフェスの説明を取得する。
GetSurfaceType 実際のサーフェス タイプを取得する。
GetSwitches レンダラが使用できるサーフェス タイプを取得する。
SetDefault 現在のプロパティ設定をグローバル デフォルトにする。
SetDirectDraw ロードされているドライバに IDirectDraw インターフェイスを渡す。
SetSwitches レンダラが使用できるサーフェス タイプを設定する。
UseOverlayStretch レンダラがオーバーレイ拡大制限をチェックする必要があるかどうかを決定する。
UseScanLine レンダラがビデオを描画するときに現在の走査線をチェックする必要があるかどうかを決定する。
UseWhenFullScreen フルスクリーン モードに切り替わるときに DirectShow がディスプレイ モードを変更する必要があるかどうかを決定する。
WillUseFullScreen フルスクリーン モードに切り替わるときに DirectShow がディスプレイ モードを変更するかどうかを決定する。

IDirectDrawVideo::CanUseOverlayStretch

IDirectDrawVideo インターフェイス

レンダラがオーバーレイ制限をチェックするかどうかを決定する。

構文

HRESULT CanUseOverlayStretch(
    long *UseOverlayStretch
);

パラメータ

UseOverlayStretch
レンダラがオーバーレイ制限を使えるかどうかを示す値へのポインタ。OATRUE はレンダラがオーバーレイ制限をチェックすることを示し、OAFALSE はチェックしないことを示す。

戻り値

HRESULT 値を返す。

注意

オーバーレイ拡大機能については、「IDirectDrawVideo::UseOverlayStretch」を参照すること。

IDirectDrawVideo::CanUseScanLine

IDirectDrawVideo インターフェイス

レンダラが描画するときに現在の走査線をチェックするかどうかを決定する。

構文

HRESULT CanUseScanLine(
    long *UseScanLine
);

パラメータ

UseScanLine
レンダラが走査線情報を使用するかどうかを示す値へのポインタ。OATRUE はレンダラが描画するときに現在の走査線をチェックすることを示し、OAFALSE はチェックしないことを示す。

戻り値

HRESULT 値を返す。

注意

DirectShow ビデオ レンダラで走査線検出を使用する方法については、「IDirectDrawVideo::UseScanLine」を参照すること。

IDirectDrawVideo::GetCaps

IDirectDrawVideo インターフェイス

ハードウェア機能が格納された DirectDraw 定義 DDCAPS 構造体を取得する。

構文

HRESULT GetCaps(
    DDCAPS *pCaps
);

パラメータ

pCaps
ハードウェア機能が格納されている DDCAPS 構造体へのポインタ。

戻り値

HRESULT 値を返す。

注意

レンダラが DirectDraw をロードしていない場合、このメソッドは E_FAIL を返す。

IDirectDrawVideo::GetDirectDraw

IDirectDrawVideo インターフェイス

IDirectDraw インターフェイスを取得する。

構文

HRESULT GetDirectDraw(
    LPDIRECTDRAW *ppDirectDraw
);

パラメータ

ppDirectDraw
IDirectDraw インターフェイスへのポインタのアドレス。

戻り値

HRESULT 値を返す。

注意

アプリケーションが DirectDraw をロードしたいが、レンダラがサーフェスを割り当てられるようにもしたい場合、アプリケーションは、レンダラに DirectDraw をロードさせた後、このメソッドを使って、参照がインクリメントされた DirectDraw へのインターフェイスを取得することができる。アプリケーションは、返されたインターフェイスを使用した後、解放する必要がある。

IDirectDrawVideo::GetEmulatedCaps

IDirectDrawVideo インターフェイス

エミュレート機能が格納された DirectDraw 定義 DDCAPS 構造体を取得する。

構文

HRESULT GetEmulatedCaps(
    DDCAPS *pCaps
);

パラメータ

pCaps
エミュレート機能が格納されている DDCAPS 構造体へのポインタ。

戻り値

HRESULT 値を返す。レンダラが DirectDraw をロードしていない場合、このメソッドは E_FAIL を返す。

IDirectDrawVideo::GetFourCCCodes

IDirectDrawVideo インターフェイス

マルチメディア フォーマット タイプを取得する。

構文

HRESULT GetFourCCCodes(
    DWORD *pCount,
    DWORD *pCodes
);

パラメータ

pCount
pCodes 配列内の FOURCC コードの数へのポインタ。
pCodes
以前 Microsoft マルチメディア タイプで使用されていた DWORD メディア タグの配列へのポインタ。

戻り値

HRESULT 値を返す。

注意

最初の Microsoft® Windows® multimedia API では、メディア タイプに FOURCC コードと呼ばれる 4 個の 8 ビット文字から作成される 32 ビット値のタグが付けられていた。FOURCC コードは一意であるため、FOURCC を表す 40 億個の GUID を割り当てることによって、1 対 1 のマッピングが可能だった。

このメソッドは、現在のディスプレイ ドライバがサポートできる FOURCC コードを取得する。利用可能な FOURCC コードの数を取得するには、有効な pCount ポインタを指定し、pCodes を NULL に設定してメソッドを呼び出す。その場合、pCount 変数には、利用可能な FOURCC コードの数が格納される。次に、アプリケーションは、取得された FOURCC コードの数に対応する十分な数の DWORD 値を割り当てて、pCodes で配列ポインタを指定し、メソッドを再び呼び出す。

IDirectDrawVideo::GetSurfaceDesc

IDirectDrawVideo インターフェイス

現在の DirectDraw サーフェスを記述する DDSURFACEDESC 構造体を取得する。

構文

HRESULT GetSurfaceDesc(
    DDSURFACEDESC *pSurfaceDesc
);

パラメータ

pSurfaceDesc
現在の DirectDraw サーフェスを記述する DDSURFACEDESC 構造体へのポインタ。

戻り値

HRESULT 値を返す。割り当てられているサーフェスがない場合、このメソッドは E_FAIL を返す。DCI プライマリ サーフェスが使用されている場合、DDSURFACEDESC 構造体にはデータが格納されず、呼び出しは S_FALSE を返す。

注意

サーフェスはレンダラがポーズしているときにだけ割り当てられる。レンダラがポーズした後、停止したときにサーフェスを解放することはできない。

IDirectDrawVideo::GetSurfaceType

IDirectDrawVideo インターフェイス

実際のサーフェス タイプを DirectShow DirectDraw Surface (AMDDS) 定義として取得する。

構文

HRESULT GetSurfaceType(
    DWORD *pSurfaceType
);

パラメータ

pSurfaceType
次の AMDDS 定義のリストから選択された 1 ビット設定が格納されているフィールドへのポインタ。
AMDDS_NONE DCI/DirectDraw を使用しない。
AMDDS_DCIPS DCI プライマリ サーフェスを使用する。
AMDDS_PS DirectDraw プライマリ サーフェスを使用する。
AMDDS_RGBOVR RGB オーバーレイ サーフェス。
AMDDS_YUVOVR YUV オーバーレイ サーフェス。
AMDDS_RGBOFF RGB オフスクリーン サーフェス。
AMDDS_YUVOFF YUV オフスクリーン サーフェス。
AMDDS_RGBFLP RGB フリッピング サーフェス。
AMDDS_YUVFLP YUV フリッピング サーフェス。
AMDDS_ALL 上記すべてのフラグ。
AMDDS_DEFAULT 利用可能なサーフェスすべてを使用する。
AMDDS_YUV (AMDDS_YUVOFF | AMDDS_YUVOVR | AMDDS_YUVFLP)。
AMDDS_RGB (AMDDS_RGBOFF | AMDDS_RGBOVR | AMDDS_RGBFLP)。
AMDDS_PRIMARY (AMDDS_DCIPS | AMDDS_PS)。

戻り値

HRESULT 値を返す。

注意

DDSURFACEDESC 構造体を見ただけは、使用されているサーフェスの種類がわからないことがある。したがって、アプリケーションは GetSurfaceType を呼び出して、サーフェス タイプを取得することができる。フィールドには、上記の AMDDS 定義のリストから選択された 1 ビット設定が格納される。

IDirectDrawVideo::GetSwitches

IDirectDrawVideo インターフェイス

レンダラが使用できるサーフェス タイプを取得する。

構文

HRESULT GetSwitches(
    DWORD *pSwitches
);

パラメータ

pSwitches
次の DirectShow DirectDraw Surface (AMDDS) サーフェス タイプの中の 1 つ以上が含まれたビット マスクへのポインタ。
AMDDS_NONE DCI/DirectDraw を使用しない。
AMDDS_DCIPS DCI プライマリ サーフェスを使用する。
AMDDS_PS DirectDraw プライマリ サーフェスを使用する。
AMDDS_RGBOVR RGB オーバーレイ サーフェス。
AMDDS_YUVOVR YUV オーバーレイ サーフェス。
AMDDS_RGBOFF RGB オフスクリーン サーフェス。
AMDDS_YUVOFF YUV オフスクリーン サーフェス。
AMDDS_RGBFLP RGB フリッピング サーフェス。
AMDDS_YUVFLP YUV フリッピング サーフェス。
AMDDS_ALL 上記すべてのフラグ。
AMDDS_DEFAULT 利用可能なサーフェスすべてを使用する。
AMDDS_YUV (AMDDS_YUVOFF | AMDDS_YUVOVR | AMDDS_YUVFLP)。
AMDDS_RGB (AMDDS_RGBOFF | AMDDS_RGBOVR | AMDDS_RGBFLP)。
AMDDS_PRIMARY (AMDDS_DCIPS | AMDDS_PS)。

戻り値

HRESULT 値を返す。

IDirectDrawVideo::SetDefault

IDirectDrawVideo インターフェイス

現在のプロパティ設定をグローバル デフォルトにする。

構文

HRESULT SetDefault(void);

戻り値

HRESULT 値を返す。

注意

IDirectDrawVideo を通じて設定されるすべてのプロパティは、その特定のインスタンスに固有のプロパティである。このメソッドを呼び出すことによって、IDirectDrawVideo のこのインスタンスに対して設定されているプロパティを、このインターフェイスのすべての DirectShow インスタンスのグローバル デフォルトにする。メソッドが呼び出された後は、ほかの DirectShow フィルタ グラフを起動したり、コンピュータを再起動したりしても、現在のプロパティ設定が引き継がれる。

IDirectDrawVideo::SetDirectDraw

IDirectDrawVideo インターフェイス

ロードされているドライバに IDirectDraw インターフェイスを渡す。

構文

HRESULT SetDirectDraw(
    LPDIRECTDRAW pDirectDraw
);

パラメータ

pDirectDraw
渡される IDirectDraw インターフェイスへのポインタ。

戻り値

HRESULT 値を返す。

注意

アプリケーションは SetDirectDraw を呼び出して NULL を渡すことにより、SetDirectDraw を通じて前に渡した DirectDraw インターフェイスをレンダラに解放させることができる。しかし、レンダラは、レンダラの接続が切断されるまで、その DirectDraw インターフェイスを使い続ける。したがって、NULL パラメータを指定して SetDirectDraw を呼び出しても、レンダラが直ちにインターフェイスの使用をやめるわけではない。

このメソッドが作られた理由は、DirectX 7.0 以前の DirectDraw のバージョンでは、1 つのプロセスにつき 1 つの IDirectDraw のインスタンスしかロードできなかったからである。DirectX 7.0 以降を使っている場合は、このメソッドを呼び出す必要はない。アプリケーションが IDirectDraw をロードしたいが、ビデオ レンダラがサーフェスを割り当てられるようにもしたい場合、アプリケーションは、IDirectDraw 自体を開き、IDirectDrawVideo::SetDirectDraw を使って、ロードされているドライバにインターフェイスを渡すことができる。このほかに、アプリケーションがレンダラに DirectDraw をロードさせた後、IDirectDrawVideo::GetDirectDraw を使って、参照がインクリメントされた DirectDraw へのインターフェイスを取得するという方法もある。ただし、DirectShow には最新バージョンの DirectDraw が付属するため、アプリケーションがディスプレイ モード自体を変更し、DirectDraw オブジェクトを渡して、レンダラがそれを使ってサーフェスを割り当てられるようにする場合を除き、このメソッドは必要ない。

IDirectDrawVideo::SetSwitches

IDirectDrawVideo インターフェイス

レンダラが使用できるサーフェス タイプを設定する。

構文

HRESULT SetSwitches(
    DWORD Switches
);

パラメータ

Switches
次の DirectShow DirectDraw Surface (AMDDS) サーフェス タイプの中の 1 つ以上が含まれたビット マスク。
AMDDS_NONE DCI/DirectDraw を使用しない。
AMDDS_DCIPS DCI プライマリ サーフェスを使用する。
AMDDS_PS DirectDraw プライマリ サーフェスを使用する。
AMDDS_RGBOVR RGB オーバーレイ サーフェス。
AMDDS_YUVOVR YUV オーバーレイ サーフェス。
AMDDS_RGBOFF RGB オフスクリーン サーフェス。
AMDDS_YUVOFF YUV オフスクリーン サーフェス。
AMDDS_RGBFLP RGB フリッピング サーフェス。
AMDDS_YUVFLP YUV フリッピング サーフェス。
AMDDS_ALL 上記すべてのフラグ。
AMDDS_DEFAULT 利用可能なサーフェスすべてを使用する。
AMDDS_YUV (AMDDS_YUVOFF | AMDDS_YUVOVR | AMDDS_YUVFLP)。
AMDDS_RGB (AMDDS_RGBOFF | AMDDS_RGBOVR | AMDDS_RGBFLP)。
AMDDS_PRIMARY (AMDDS_DCIPS | AMDDS_PS)。

戻り値

HRESULT 値を返す。

注意

このメソッドはビデオ レンダラが接続する前に呼び出されなければならない。

IDirectDrawVideo::UseOverlayStretch

IDirectDrawVideo インターフェイス

レンダラがオーバーレイ拡大制限をチェックする必要があるかどうかを決定する。

構文

HRESULT UseOverlayStretch(
    long UseOverlayStretch
);

パラメータ

UseOverlayStretch
レンダラがオーバーレイ拡大機能をチェックするかどうかを指定する値。レンダラにオーバーレイ 拡大機能をチェックさせるときは OATRUE に設定し、それ以外の場合は、OAFALSE に設定する。

戻り値

HRESULT 値を返す。

注意

一部のディスプレイ カードは、DirectDraw を経由してオーバーレイ サーフェスを使用する機能を備えている。オーバーレイ サーフェスとは、モニタの垂直リフレッシュ期間中にディスプレイにオーバーレイされる内容が格納されているビデオ メモリのブロックである。通常、オーバーレイ サーフェスは、ビデオの画質が高く、パフォーマンスがきわめて高速であるため、DirectShow は、可能な限り、利用可能なすべてのオーバーレイ サーフェスを使用する。比較的高いビット深度に設定されている一部のディスプレイ カードでは、ディスプレイのハードウェア帯域幅の制限に対応するために、オーバーレイを実際のオーバーレイのサイズより大きい画面に表示する必要がある。オーバーレイを十分に大きく表示しないと、ディスプレイ上で "瞬間的なちらつき" と呼ばれる画面の乱れが発生する可能性がある。

UseOverlayStretch が OATRUE (オン、デフォルト) に設定されていると、DirectShow は、オーバーレイを表示する前に、オーバーレイが正しく拡大されていることを確認する。UseOverlayStretch が OAFALSE (オフ) に設定されていると、DirectShow は、オーバーレイが正しく拡大されているかどうかをチェックしないため、画面の乱れが発生する可能性がある。ただし、可能な場合にはオーバーレイが使用されることは保証される。

IDirectDrawVideo::UseScanLine

IDirectDrawVideo インターフェイス

レンダラがビデオを描画するときに現在の走査線をチェックする必要があるかどうかを決定する。

構文

HRESULT UseScanLine(
    long UseScanLine
);

パラメータ

UseScanLine
走査線情報を使うかどうかを指定する Long 型整数値。走査線情報を使用するには OATRUE に設定し、走査線情報を無視するには OAFALSE に設定する。

戻り値

引数が無効である場合は E_INVALIDARG を返し、それ以外の場合は NOERROR を返す。

注意

モニタの走査線が画面の見える部分を走査している間にビデオ画像をビデオ メモリにブリットすると、完成した画像は、古い画像と新しい画像の複合画像になる。この複合画像は、分裂ビデオ画像と呼ばれる。前の画像が完了するまで新しい画像のブリットを待つことによって、分裂画像の発生を避けることができる。一部のビデオ カードでは、走査線の現在の位置を取得できる。この情報が利用できれば、走査線が画面の外に出るまで DirectShow に新しい画像のブリットを待機させることによって、テアリングを軽減することができる。ただし、走査線の位置のチェックはプロセッサの負荷を増大させるため、画面に表示されるビデオ フレームの量が減少する可能性があることに注意する必要がある。走査線情報が利用できれば、DirectShow はデフォルトでそれを利用する。多少画像の乱れがあっても処理時間を優先させたい場合は、UseScanLine を OAFALSE に設定する。

IDirectDrawVideo::UseWhenFullScreen

IDirectDrawVideo インターフェイス

フルスクリーン モードに切り替わるときに DirectShow がディスプレイ モードを変更する必要があるかどうかを決定する。

構文

HRESULT UseWhenFullScreen(
    long UseWhenFullScreen
);

パラメータ

UseWhenFullScreen
ディスプレイ モードを変更するかどうかを指定する値。レンダラに DirectShow をフルスクリーン モードで使わせるには OATRUE に設定し、それ以外の場合は OAFALSE に設定する。

戻り値

HRESULT 値を返す。

注意

フルスクリーン モードに移行するように要求された場合、DirectShow には多くの選択肢がある。最初の選択肢は、グラフ内にフルスクリーン再生を直接サポートするフィルタがあるかどうかを調べることで、フィルタがある場合、そのフィルタはフルスクリーン再生のサポートを要求される。

2 番目の選択肢は、DirectDraw モード変更サービスを使用する特殊なフルスクリーン レンダラをフィルタ グラフに自動的に追加し、ビデオを再生する方法である。ディスプレイ モードを変更すると、ビデオは、ディスプレイ上の、より大きい領域 (必ずしも全領域ではない) を占める。したがって、たとえば、1024 × 768 ピクセル モードでは小さくしか表示されないビデオでも、ディスプレイ モードが 320 × 240 になれば、見栄えがずっとよくなる。

3 番目で最後の選択肢は、IVideoWindow インターフェイスをサポートする任意のレンダラを使って、そのレンダラのウィンドウをフルスクリーンに拡大させる方法である。通常、この方法では、フルスクリーンの DirectDraw 対応レンダラに切り替える 2 番目の選択肢よりパフォーマンスが低くなる。UseWhenFullScreen パラメータをオン (OATRUE) に設定すれば、フルスクリーン再生のときには常にウィンドウがフルスクリーンにまで拡大される。このパラメータをオフ (デフォルト) に設定すれば、フィルタ グラフ マネージャは、DirectDraw 対応のフルスクリーン レンダラに切り替えることができる。

IDirectDrawVideo::WillUseFullScreen

IDirectDrawVideo インターフェイス

フルスクリーン モードに切り替わるときに DirectShow がディスプレイ モードを変更するかどうかを決定する。

構文

HRESULT WillUseFullScreen(
    long *UseWhenFullScreen
);

パラメータ

UseWhenFullScreen
DirectShow が DirectX をフルスクリーン モードで使用するかどうかを示す値へのポインタ。OATRUE は、フルスクリーン モードで使用することを示し、OAFALSE は使用しないことを示す。

戻り値

HRESULT 値を返す。

注意

この機能については、「IDirectDrawVideo::UseWhenFullScreen」を参照すること。