次の方法で共有


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 が作成される。

参照