共用方式為


CDynamicOutputPin 類別

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

類別 CDynamicOutputPin 會實作支援動態重新連線和格式變更的輸出針腳。

這個類別衍生自 CBaseOutputPin 類別,並實作 IPinFlowControl 介面。 它支援數個對動態圖形建置而言很重要的作業:

  • 動態重新連線:當篩選仍在作用中時,針腳可以中斷連線並重新連線, (暫停或執行) 。
  • 動態格式變更:針腳可以在篩選仍在使用中時交涉新的媒體類型,而不需重新連線。
  • 流程式控制制:擁有篩選 (或應用程式) 可以封鎖來自釘選的資料流程,而不需停止篩選。

如需詳細資訊,請參閱 動態圖形建置

針腳有三種可能的狀態:已封鎖、解除封鎖和擱置。 在 擱置 狀態中,針腳正在等候另一個執行緒上的某些作業完成,再將針腳切換至封鎖狀態。 當釘選遭到封鎖時,篩選無法透過針腳傳遞資料,或變更針腳的連線。

若要在多個執行緒之間協調,擁有篩選準則必須遵循特定規則。 (如需篩選圖形中線程的詳細資訊,請參閱 執行緒和關鍵區段。) First,串流執行緒一律必須呼叫 CDynamicOutputPin::StartUsingOutputPin 方法,才能呼叫下列任何方法:

之後,它必須呼叫 CDynamicOutputPin::StopUsingOutputPin 方法。

其次,應用程式執行緒不得呼叫上一個清單中的任何方法。 第三,串流執行緒不得呼叫封鎖或解除封鎖針腳的類別方法。 這些方法是: CDynamicOutputPin::BlockCDynamicOutputPin::SynchronousBlockOutputPinCDynamicOutputPin::SyncBlockOutputPinCDynamicOutputPin::UnblockOutputPin

這些規則可確保應用程式執行緒在使用串流執行緒時無法封鎖釘選,反之亦然。 串流執行緒呼叫 StartUsingOutputPin之後,除非串流執行緒呼叫 StopUsingOutputPin,否則針腳將不會封鎖。 相反地,如果釘選遭到封鎖, StartUsingOutputPin 會等到針腳解除封鎖為止。

若要避免忘記呼叫 StopUsingOutputPin,您可以使用 CAutoUsingOutputPin 類別。 它會在超出範圍時自動呼叫 StopUsingOutputPin

當擁有篩選器聯結或離開篩選圖形 (在其 IBaseFilter::JoinFilterGraph 方法) 時,它必須呼叫針腳的 CDynamicOutputPin::SetConfigInfo 方法。

受保護的成員變數 Description
m_BlockStateLock 保護封鎖狀態的重要區段。
m_hUnblockOutputPinEvent 未封鎖針腳時發出訊號的事件。
m_hNotifyCallerPinBlockedEvent 當釘選成功封鎖或使用者解除擱置區塊時發出訊號的事件。
m_BlockState 封鎖狀態。
m_dwBlockCallerThreadID 此釘選上最後呼叫 IPinFlowControl::Block 方法的執行緒識別碼。
m_dwNumOutstandingOutputPinUsers 使用此釘選的串流執行緒數目。
m_hStopEvent 篩選準則停止或針腳排清資料時發出訊號的事件。
m_pGraphConfig 用於執行動態重新連線的 IGraphConfig 介面指標。
m_bPinUsesReadOnlyAllocator 旗標,指定針腳配置器中的樣本是否為唯讀。
保護方法 Description
SynchronousBlockOutputPin 封鎖針腳;除非封鎖針腳,否則不會傳回 。
SyncBlockOutputPin 封鎖針腳;可能會在封鎖針腳之前傳回 。
UnblockOutputPin 解除封鎖針腳。
BlockOutputPin 封鎖針腳。
WaitEvent 等候指定的事件收到訊號。
公用方法 Description
CDynamicOutputPin 建構函式方法。
~CDynamicOutputPin 解構函式方法。
SetConfigInfo 指定 IGraphConfig 指標和 stop 事件。
DeliverBeginFlush 要求連接的輸入針腳開始排清作業。
DeliverEndFlush 要求連接的輸入針腳結束排清作業。
非使用中 通知釘選篩選已停止。
使用中 通知針腳,篩選準則現在為作用中。
CompleteConnect 完成輸入針腳的連接。 虛擬。
StartUsingOutputPin 取得串流作業之針腳的存取權。 虛擬。
StopUsingOutputPin 釋放串流作業之後的釘選存取權。 虛擬。
StreamingThreadUsingOutputPin 判斷任何執行緒是否正在釘選上執行串流作業。 虛擬。
ChangeOutputFormat 動態變更連線的媒體類型,並提供新的區段資訊。
ChangeMediaType 動態變更連接的媒體類型。
DynamicReconnect 使用新的媒體類型執行動態重新連線。
IPin 方法 Description
中斷連線 中斷目前的針腳連接。
IPinFlowControl 方法 Description
封鎖或解除封鎖釘選的資料流程。

規格需求

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