Microsoft DirectX 8.0 |
IDirectDrawMediaStream インターフェイスは、Microsoft® DirectDraw® サーフェスに表示されるメディア ストリームを制御する。DirectDraw サーフェスにストリームするには、DirectDraw がビデオ ストリーム フォーマットをサポートしている必要がある。
マルチメディア ストリーミング インターフェイスを実装するサンプル コードについては、「マルチメディア ストリーミングのサンプル コード」を参照すること。
このインターフェイスは、アプリケーション開発者による実装を目的としたものではない。Microsoft® DirectShow® マルチメディア ストリームに追加できる DirectDraw メディア ストリーム上で公開される。
DirectDraw サーフェスにビデオ ストリームを送るには、このインターフェイスを使用する。
IUnknown メソッド 説明 QueryInterface サポートされているインターフェイスへのポインタを取得する。 AddRef 参照カウントをインクリメントする。 Release 参照カウントをデクリメントする。 IDirectDrawMediaStream メソッド 説明 GetFormat 現在のメディア ストリームのフォーマットを取得し、オプションでその望ましいフォーマットも取得する。 SetFormat 現在のメディア ストリームのフォーマットを設定する。ストリームに既に割り当て済みのサンプルがあり、そのサンプルのフォーマットと指定されたフォーマットが一致しない場合、このメソッドは失敗する。 GetDirectDraw 現在のメディア ストリームで使用される DirectDraw オブジェクトへのポインタを取得する。 SetDirectDraw 現在のメディア ストリームの DirectDraw オブジェクトを設定する。 CreateSample 指定された DirectDraw サーフェス オブジェクトを使用するストリーム サンプルを作成する。 GetTimePerFrame ビデオ ストリームから得られる 1 秒あたりの平均フレーム数を取得する。
指定された DirectDraw サーフェス オブジェクトを使用するストリーム サンプルを作成する。
構文
HRESULT CreateSample( IDirectDrawSurface *pSurface, const RECT *pRect, DWORD dwFlags, IDirectDrawStreamSample **ppSample );
パラメータ
- pSurface
- [in] 既存の DirectDraw サーフェスへのポインタ。
- pRect
- [in] 指定したサーフェスに使用するクリッピング矩形へのポインタ。サーフェス全体を使用するには、このパラメータを NULL に設定する。
- dwFlags
- [in] レンダリング方式がプログレッシブかどうかを指定するフラグ。プログレッシブ レンダリングを実行するには、この値を DDSFF_PROGRESSIVERENDER に設定する。このフラグをセットした場合、サンプルを更新すると、サンプル データがサーフェスにコピーされる。
- ppSample
- [out] IDirectDrawStreamSample インターフェイスへのポインタのアドレス。このポインタに、新しく作成されたサンプルのアドレスを受け取る。
戻り値
次のいずれかの値を返す。
DDERR_INVALIDPIXELFORMAT 指定されたピクセル フォーマットがストリーム フォーマットと互換でない。 DDERR_INVALIDRECT 指定されたクリッピング矩形が無効。 DDERR_INVALIDSURFACETYPE 指定されたサーフェスがストリーム フォーマットと互換でない。 E_POINTER 無効な必須パラメータがある。 MS_E_SAMPLEALLOC ストリームに既に割り当て済みサンプルがあり、サンプルのフォーマットがサーフェスと一致しない。 S_OK 成功。
注意
このメソッドは、現在のストリームからサンプルを作成し、そのサンプルをこのサーフェスにアタッチする。
ストリームに割り当て済みのサーフェスがなく、指定されたサーフェスがストリームのフォーマットと一致しない場合、このメソッドはストリームの IDirectDrawMediaStream::SetFormat メソッドを呼び出して 2 つのフォーマットを一致させる。
プログレッシブ レンダリングを実行するには、サンプルを 1 つ作成し、そのサンプルをそれ以降のビデオ フレームに繰り返し使用する。ビデオ デコンプレッサ フィルタは、直前のフレームを部分的に更新するためにこのテクニックを使う。
pRect パラメータは、ストリームのフォーマットと一致していなければならない (「IDirectDrawMediaStream::GetFormat」を参照)。誤まったクリッピング矩形を設定したか、またはクリッピング矩形を設定していない場合、サーフェスとサイズが異なるムービーは再生されない可能性がある。プライマリ サーフェスが使用される場合には、ユーザーがディスプレイ設定を変更するとプライマリ サーフェスのサイズが変わる可能性があるため、クリッピング矩形の使用を推奨する。
現在のメディア ストリームで使用される DirectDraw オブジェクトへのポインタを取得する。
構文
HRESULT GetDirectDraw( IDirectDraw **ppDirectDraw );
パラメータ
- ppDirectDraw
- [out] 現在のメディア ストリームに関連付けられた DirectDraw オブジェクトが格納される IDirectDraw インターフェイスへのポインタのアドレス。
戻り値
成功した場合は、S_OK を返す。パラメータが無効な場合は、E_POINTER を返す。
注意
ストリームをまだ初期化していない場合、取得されるポインタは NULL となり、メソッドは S_OK を返す。ストリームが初期化されている場合、メソッドは取得されたポインタの参照カウントをインクリメントする。
現在のメディア ストリームのフォーマットを取得し、オプションでその望ましいフォーマットも取得する。
構文
HRESULT GetFormat( DDSURFACEDESC *pDDSDCurrent, IDirectDrawPalette **ppDirectDrawPalette, DDSURFACEDESC *pDDSDDesired, DWORD *pdwFlags );
パラメータ
- pDDSDCurrent
- [out] 現在のメディア ストリームのフォーマットが格納される DirectDraw サーフェス記述へのポインタ。
- ppDirectDrawPalette
- [out] IDirectDrawPalette インターフェイスへのポインタのアドレス (ある場合)。
- pDDSDDesired
- [out] 現在のメディア ストリームの望ましいフォーマットが格納される DirectDraw サーフェス記述へのポインタ。
- pdwFlags
- [out] DDSURFACEDESC 構造体にセットされるフラグへのポインタ。有効なフィールドには以下のものがある。
DDSD_HEIGHT 構造体の高さのメンバが有効なことを示す。 DDSD_WIDTH 構造体の幅のメンバが有効なことを示す。 DDSD_PIXELFORMAT 構造体のピクセル フォーマットのメンバが有効なことを示す。 DDSD_CAPS 構造体のサーフェス能力のメンバが有効なことを示す。
戻り値
次のいずれかの値を返す。
DDERR_INVALIDPARAMS DirectDraw サーフェス パラメータの 1 つが無効。 E_POINTER 無効な必須パラメータがある。 S_OK 成功。
注意
このメソッドを呼び出した後、現在のフォーマットに従うか、または IDirectDrawMediaStream::SetFormat メソッドを呼び出してフォーマットの変更を試みる。
このメソッドのパラメータはすべて省略可能である。取得しないでよい情報がある場合は、そのパラメータを NULL に設定する。
プログレッシブ レンダリングを実行するには、サンプルを 1 つ作成し、そのサンプルをそれ以降のビデオ フレームに繰り返し使用する。ビデオ デコンプレッサ フィルタは、直前のフレームを部分的に更新するためにこのテクニックを使う。
このメソッドを呼び出す前に、DDSURFACEDESC 構造体の dwSize メンバを初期化する必要がある。
DDSD_CAPS フラグがオンの場合、DDSCAPS 構造体に含まれる値の 1 つ、または DDSCAPS_DATAEXCHANGE を返す。DDSCAPS_DATAEXCHANGE は、Ddrawex.h に DDSCAPS_SYSTEMMEMORY|DDSCAPS_VIDEOMEMORY として定義されている。
ビデオ ストリームから得られる 1 秒あたりの平均フレーム数を取得する。
構文
HRESULT GetTimePerFrame( STREAM_TIME *pFrameTime );
パラメータ
- pFrameTime
- [out] フレームあたりの平均時間 (100 ナノ秒単位) を示す STREAM_TIME 値へのポインタ。
戻り値
成功した場合は、S_OK を返す。ポインタが無効な場合は、E_POINTER を返す。
現在のメディア ストリームの DirectDraw オブジェクトを設定する。
構文
HRESULT SetDirectDraw( IDirectDraw *pDirectDraw );
パラメータ
- pDirectDraw
- [in] メディア ストリームの新しい DirectDraw オブジェクトが格納された IDirectDraw インターフェイスへのポインタ。
戻り値
成功した場合は、S_OK を返す。ポインタが無効な場合は、E_POINTER を返す。
注意
現在のストリームに既に割り当て済みのサンプルがあり、その DirectDraw オブジェクトと指定されたオブジェクトが一致しない場合、このメソッドは失敗する。指定された DirectDraw オブジェクトがストリームの現在のオブジェクトと一致する場合には、必ず成功する。
このストリームに割り当て済みのサンプルがない場合、pDirectDraw を NULL に設定することができる。こうすると、ストリームから現在の DirectDraw オブジェクトの参照が強制的に解放される。
現在のメディア ストリームのフォーマットを設定する。
構文
HRESULT SetFormat( const DDSURFACEDESC *pDDSurfaceDesc, IDirectDrawPalette *pDirectDrawPalette );
パラメータ
- pDDSurfaceDesc
- [in] 新しいフォーマットが格納された DirectDraw サーフェス記述へのポインタ。
- pDirectDrawPalette
- [in] IDirectDrawPalette インターフェイスへのポインタ (省略可能)。
戻り値
次のいずれかの値を返す。
S_OK 成功。 DDERR_INVALIDSURFACETYPE 指定されたフォーマットが現在のストリームと互換でない。 MS_E_SAMPLEALLOC このストリームには既に割り当て済みのストリーム サンプルがあるため、フォーマットを変更できない。
注意
ストリームに既に割り当て済みのサンプルがあり、そのサンプルのフォーマットと指定されたフォーマットが一致しない場合、このメソッドは失敗する。指定されたフォーマットが現在のフォーマットと一致している場合、このメソッドは必ず成功する。