IVMRSurfaceAllocator::AllocateSurface
AllocateSurface メソッドは、DirectDraw サーフェイスを割り当てる。
構文
HRESULT AllocateSurface(
DWORD_PTR dwUserID,
VMRALLOCATIONINFO* lpAllocInfo,
DWORD* lpdwActualBuffers,
LPDIRECTDRAWSURFACE7* lplpSurface
);
パラメータ
dwUserID
[in] アロケータプレゼンタの 1 つのインスタンスが複数の VMR インスタンスで使われる場合に使う、VMR のこのインスタンスを一意に識別するアプリケーションが定義した DWORD_PTR クッキー。
lpAllocInfo
[in] VMRALLOCATIONINFO 構造体を指定する。「注意」を参照すること。
lpdwActualBuffers
[in] [out] 入力では、このパラメータを使って必要なバッファ数を要求する。出力では、作成された実際のバッファ数を受け取る。
lplpSurface
[out] Direct3D サーフェイスを受け取るポインタのアドレス。
戻り値
メソッドが成功すると S_OK を返す。失敗するとエラー コードを返す。
エラー コード | 説明 |
E_POINTER | ポインタの 1 つが無効である。 |
E_INVALIDARG | dwFlags で、AMAP_3D_TARGET が AMAP_FORCE_SYSMEM または AMAP_ALLOW_SYSMEM と結合していた。 |
E_FAIL | lpAllocInfo->lpHdr で指定された BITMAPINFOHEADER 構造体の少なくとも 1 つのメンバが正しくない。 |
注意
AllocateSurface を明示的に呼び出す前に、クライアント アプリケーションは IVMRSurfaceAllocator::FreeSurface を呼び出して、DirectDraw のデコーディング サーフェイス用フロント バッファを必ず NULL にしておくこと。アプリケーションが AllocateSurface を呼び出すときに NULL でない場合は、デバッグ バージョンの quartz.dll がアサートを起こす。
カスタム アロケータプレゼンタでこのメソッドを実装する場合は、*lpAllocInfo->*lpHdr->biBitCount の値を調べる必要がある。biBitCount がゼロの場合は、現在のディスプレイのピクセル数を設定すること。BiBitCount をゼロのままにすると、サーフェイス割り当てが失敗し、新しい (デフォルトの) VMR が作成される。
参照