IVMRSurfaceAllocator::AllocateSurface 方法 (strmif.h)

[與此頁面相關的功能 DirectShow 是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft 強烈建議新程式代碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 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,可唯一識別此 VMR 實例,以用於配置器演示者的一個實例搭配多個 VMR 實例時使用。

[in] lpAllocInfo

指定 VMRALLOCATIONINFO 結構。 請參閱<備註>。

[in] lpdwActualBuffers

[out]在輸入上,此參數用來要求所需的緩衝區數目。 在輸出上,它會收到實際建立的緩衝區數目。

[out] lplpSurface

接收 Direct3D 表面的指標位址。

傳回值

如果方法成功,它會傳回 S_OK。 如果方法失敗,則會傳回錯誤碼。

傳回碼 Description
E_POINTER
其中一個指標無效。
E_INVALIDARG
dwFlags 中,AMAP_3D_TARGET會結合AMAP_FORCE_SYSMEM或AMAP_ALLOW_SYSMEM。
E_FAIL
lpAllocInfo-lpHdr> 所指定的 BITMAPINFOHEADER 結構的一或多個成員不正確。

備註

明確呼叫 AllocateSurface 之前,用戶端應用程式應該呼叫 IVMRSurfaceAllocator::FreeSurface ,以確保 DirectDraw 譯碼介面前端緩衝區為 NULL。 如果應用程式呼叫 AllocateSurface 時不是 NULL,則偵錯版本的 quartz.dll 會導致判斷提示。

在自訂配置器演示者中實作此方法時,您必須檢查 lpAllocInfo-lpHdr-biBitCount>> 的值。 如果 biBitCount 為零,則您必須將它設定為目前顯示器的圖元深度。 如果 BiBitCount 保留為零,介面配置將會失敗,並建立新的 (預設) VMR。

規格需求

需求
最低支援的用戶端 具有 SP1 的 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限傳統型應用程式]
目標平台 Windows
標頭 strmif.h (包含 Dshow.h)
程式庫 Strmiids.lib

另請參閱

錯誤和成功碼

IVMRSurfaceAllocator 介面

使用影片混合轉譯器