共用方式為


ISampleGrabber::GetCurrentBuffer 方法

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

注意

[已被取代。 此 API 可能會從未來的 Windows 版本中移除。]

 

GetCurrentBuffer方法會擷取與最近範例相關聯的緩衝區複本。

語法

HRESULT GetCurrentBuffer(
  [in, out] long *pBufferSize,
  [out]     long *pBuffer
);

參數

pBufferSize [in, out]

緩衝區大小的指標。 如果 pBufferNull,此參數會接收所需的緩衝區大小,以位元組為單位。 如果 pBuffer 不是 Null,請將此參數設定為等於緩衝區的大小,以位元組為單位。 在輸出時,參數會接收復制到緩衝區的位元組數目。 此值可能小於緩衝區的大小。

pBuffer [out]

pBufferSizeNull位元組陣列的指標。 如果此參數不是 Null,則目前的緩衝區會複製到陣列中。 如果此參數為 NullpBufferSize 參數會收到所需的緩衝區大小。

傳回值

傳回下列其中一個值。

傳回碼 Description
E_INVALIDARG
未緩衝處理範例。 呼叫 ISampleGrabber::SetBufferSamples
E_OUTOFMEMORY
指定的緩衝區不夠大。
E_POINTER
Null 指標引數。
S_OK
成功。
VFW_E_NOT_CONNECTED
篩選準則未連線。
VFW_E_WRONG_STATE
篩選尚未收到任何範例。 若要傳遞範例,請執行或暫停圖形。

 

備註

若要啟用緩衝處理,請使用TRUE值呼叫ISampleGrabber::SetBufferSamples

呼叫這個方法兩次。 在第一次呼叫時,將 pBuffer 設定為 Null。 緩衝區的大小會以 pBufferSize傳回。 然後配置陣列,然後再次呼叫 方法。 第二次呼叫時,傳遞 pBufferSize中的陣列大小,並在 pBuffer中傳遞陣列的位址。 如果陣列不夠大,方法會傳回E_OUTOFMEMORY。

pBuffer參數的類型為指標,但緩衝區的內容取決於資料的格式。 呼叫 ISampleGrabber::GetConnectedMediaType 以取得格式的媒體類型。

當篩選圖表正在執行時,請勿呼叫這個方法。 當篩選圖表正在執行時,範例抓取器篩選準則會在收到新的樣本時覆寫緩衝區的內容。 使用此方法的最佳方式是使用「單次模式」,這會在收到第一個樣本之後停止圖形。 若要設定單次模式,請呼叫 ISampleGrabber::SetOneShot

篩選不會緩衝預先註冊範例,或AM_SAMPLE2_PROPERTIES結構之 dwStreamId成員不是AM_STREAM_MEDIA以外的任何範例。

注意

標頭檔 Qedit.h 與 7 版之後的 Direct3D 標頭不相容。

 

注意

若要取得 Qedit.h,請下載適用于 Windows Vista 的 Microsoft Windows SDK Update 和 .NET Framework 3.0。 Windows 7 和 .NET Framework 3.5 Service Pack 1 Microsoft Windows SDK中無法使用 Qedit.h。

 

規格需求

需求
標頭
Qedit.h
程式庫
Strmiids.lib

另請參閱

使用範例擷取器

ISampleGrabber 介面