iMemAllocator::GetBuffer 方法 (strmif.h)

[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]

GetBuffer方法會擷取包含空白緩衝區的媒體範例。

語法

HRESULT GetBuffer(
  [out] IMediaSample   **ppBuffer,
  [in]  REFERENCE_TIME *pStartTime,
  [in]  REFERENCE_TIME *pEndTime,
  [in]  DWORD          dwFlags
);

參數

[out] ppBuffer

接收緩衝區 IMediaSample 介面的指標。 呼叫端必須釋放 介面。

[in] pStartTime

範例開始時間的指標,或 Null

[in] pEndTime

範例結束時間的指標,或 Null

[in] dwFlags

下列旗標之零或多個位組合:

旗標 描述
AM_GBF_NOTASYNCPOINT 這個範例不是同步處理點。 此範例不允許動態格式變更。 在重迭混合器或 VMR 上呼叫時,此旗標表示傳回的緩衝區將包含與最後一個傳遞映射相同的影像。
AM_GBF_PREVFRAMESKIPPED 此範例是連續之後的第一個範例。 (只有視訊轉譯器使用此旗標。)
AM_GBF_NOWAIT 請勿等候緩衝區變成可用。
AM_GBF_NODDSURFACELOCK 影片混合轉譯器篩選器 7 搭配使用,以要求解除鎖定的 DirectDraw 表面。 如需詳細資訊,請參閱 使用 Direct3D 轉譯目標

傳回值

傳回 HRESULT 值。 可能的值包括下表所示的值。

傳回碼 描述
S_OK
成功。
VFW_E_NOT_COMMITTED
配置器已取消認可。
VFW_E_TIMEOUT
逾時。

備註

根據預設,這個方法會封鎖,直到可用的可用範例或配置器已取消認可為止。 如果呼叫端指定AM_GBF_NOWAIT旗標,而且沒有可用的範例,配置器可以立即傳回VFW_E_TIMEOUT的傳回值。 不過,配置器不需要支援此旗標。

ppBuffer中傳回的範例具有有效的緩衝區指標。 呼叫端負責設定範例上的任何其他屬性,例如時間戳記、媒體時間或同步點屬性。 (如需詳細資訊,請參閱 IMediaSample.)

pStartTimepEndTime參數不會套用至範例。 配置器可能會使用這些值來判斷其擷取的緩衝區。 例如, 影片轉譯器 篩選會使用這些值來同步 DirectDraw 表面之間的切換。 若要在範例上設定時間戳記,請呼叫 IMediaSample::SetTime 方法。

您必須先呼叫 IMemAllocator::Commit 方法,才能呼叫此方法。 呼叫 IMemAllocator::D ecommit 方法之後,這個方法就會失敗。

規格需求

   
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 strmif.h (包含 Dshow.h)
程式庫 Strmiids.lib

另請參閱

錯誤和成功碼

IMemAllocator 介面