次の方法で共有


IVMRSurfaceAllocator::AllocateSurface メソッド (strmif.h)

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

メソッドは AllocateSurface DirectDraw サーフェイスを割り当てます。

構文

HRESULT AllocateSurface(
  [in]  DWORD_PTR            dwUserID,
  [in]  VMRALLOCATIONINFO    *lpAllocInfo,
  [in]  DWORD                *lpdwActualBuffers,
  [out] LPDIRECTDRAWSURFACE7 *lplpSurface
);

パラメーター

[in] dwUserID

アプリケーション定義のDWORD_PTR Cookie。アロケーター 発表者の 1 つのインスタンスが複数の VMR インスタンスで使用されるシナリオで使用するために、VMR のこのインスタンスを一意に識別します。

[in] lpAllocInfo

VMRALLOCATIONINFO 構造体を指定します。 「解説」を参照してください。

[in] lpdwActualBuffers

[out]入力時に、このパラメーターを使用して、必要なバッファーの数を要求します。 出力では、作成されたバッファーの実際の数を受け取ります。

[out] lplpSurface

Direct3D サーフェスを受け取るポインターのアドレス。

戻り値

メソッドが成功した場合は、S_OK を返します。 失敗した場合はエラー コードを返します。

リターン コード 説明
E_POINTER
いずれかのポインターが無効です。
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 が 0 の場合は、現在のディスプレイのピクセル深度に設定する必要があります。 BiBitCount を 0 のままにすると、サーフェス割り当てが失敗し、新しい (既定の) VMR が作成されます。

要件

要件
サポートされている最小のクライアント SP1 を使用した Windows XP [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー strmif.h (Dshow.h を含む)
Library Strmiids.lib

こちらもご覧ください

エラーコードと成功コード

IVMRSurfaceAllocator インターフェイス

ビデオ 混合レンダラーの使用