共用方式為


CBaseAllocator.GetBuffer 方法

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

方法會 GetBuffer 擷取包含緩衝區的媒體範例。 這個方法會實作 IMemAllocator::GetBuffer 方法。

語法

HRESULT GetBuffer(
   IMediaSample   **ppBuffer,
   REFERENCE_TIME *pStartTime,
   REFERENCE_TIME *pEndTime,
   DWORD          dwFlags
);

參數

ppBuffer

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

pStartTime

範例開始時間的指標。

pEndTime

範例結束時間的指標。

dwFlags

零個或多個旗標的位組合。 基類支援下列旗標。

意義
AM_GBF_NOWAIT
請勿等候緩衝區可供使用。

傳回值

傳回下列其中一個 HRESULT 值。

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

備註

除非呼叫端在dwFlags中指定AM_GBF_NOWAIT旗標,否則這個方法會封鎖直到下一個範例可用為止。

擷取的媒體範例具有已配置緩衝區的有效指標。 呼叫端負責在範例上設定任何其他屬性,例如時間戳記、媒體時間或同步點屬性。 如需詳細資訊,請參閱 IMediaSample

在基類中, 會忽略 pStartTimepEndTime 參數。 衍生類別可以使用這些值。 例如, 影片轉譯器 篩選的配置器會使用這些值來同步處理 DirectDraw 介面之間的切換。

如果方法需要等候樣本,它會遞增等候物件計數, (CBaseAllocator::m_lCount) ,並在旗號 (CBaseAllocator::m_hSem) 呼叫WaitForSingleObject函式。 當範例變成可用時,它會在配置器上呼叫 CBaseAllocator::ReleaseBuffer 方法,藉此將信號計數增加 m_lCount (藉此釋放等候執行緒) 並將 m_lCount 設定回零。

規格需求

需求
標頭
Amfilter.h (包含 Streams.h)
程式庫
Strmbase.lib (零售組建) ;
Strmbasd.lib (偵錯組建)

另請參閱

CBaseAllocator 類別