iMemAllocator::GetBuffer 方法 (strmif.h)
[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 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 值。 可能的值包括下表所示的值。
傳回碼 | 描述 |
---|---|
|
成功。 |
|
配置器已取消認可。 |
|
逾時。 |
備註
根據預設,這個方法會封鎖,直到可用的可用範例或配置器已取消認可為止。 如果呼叫端指定AM_GBF_NOWAIT旗標,而且沒有可用的範例,配置器可以立即傳回VFW_E_TIMEOUT的傳回值。 不過,配置器不需要支援此旗標。
ppBuffer中傳回的範例具有有效的緩衝區指標。 呼叫端負責設定範例上的任何其他屬性,例如時間戳記、媒體時間或同步點屬性。 (如需詳細資訊,請參閱 IMediaSample.)
pStartTime和pEndTime參數不會套用至範例。 配置器可能會使用這些值來判斷其擷取的緩衝區。 例如, 影片轉譯器 篩選會使用這些值來同步 DirectDraw 表面之間的切換。 若要在範例上設定時間戳記,請呼叫 IMediaSample::SetTime 方法。
您必須先呼叫 IMemAllocator::Commit 方法,才能呼叫此方法。 呼叫 IMemAllocator::D ecommit 方法之後,這個方法就會失敗。
規格需求
最低支援的用戶端 | Windows 2000 Professional [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限桌面應用程式] |
目標平台 | Windows |
標頭 | strmif.h (包含 Dshow.h) |
程式庫 | Strmiids.lib |