IMemInputPin::Receive 方法 (strmif.h)

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

方法 Receive 會接收數據流中的下一個媒體範例。

語法

HRESULT Receive(
  [in] IMediaSample *pSample
);

參數

[in] pSample

範例 IMediaSample 介面的指標。

傳回值

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

傳回碼 描述
S_OK
成功。
S_FALSE
此範例遭到拒絕。
E_POINTER
NULL 指標自變數。
VFW_E_INVALIDMEDIATYPE
無效的媒體類型。
VFW_E_RUNTIME_ERROR
發生運行時錯誤。
VFW_E_WRONG_STATE
針腳已停止。

備註

這個方法是同步且可能封鎖的。 針腳會執行下列其中一項動作:

  • 拒絕範例。
  • 立即傳回 ,並在背景工作線程中處理範例。
  • 在傳回之前處理範例。
在最後一個案例中,方法可能會無限期地封鎖。 如果發生這種情況, IMemInputPin::ReceiveCanBlock 方法會傳回S_OK。

如果針腳使用背景工作線程來處理範例,它會保存樣本的參考計數。 在任何情況下,輸出釘選都無法直接重複使用此範例。 它必須呼叫 IMemAllocator::GetBuffer 方法來取得新的範例。

如果此方法傳回S_FALSE或錯誤碼,上游篩選應該會停止傳送樣本,直到圖形停止或完成排清作業為止。 S_FALSE傳回值的一般原因包括:

  • 下游針腳正在排清;也就是說,它收到 BeginFlush 呼叫,但尚未收到 EndFlush 呼叫。
  • 下游篩選偵測到數據流結尾。 (請參閱 Stream Notifications.)

規格需求

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

另請參閱

錯誤和成功碼

IMemInputPin 介面