CDynamicOutputPin 類別
[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。
類別 CDynamicOutputPin
會實作支援動態重新連線和格式變更的輸出針腳。
這個類別衍生自 CBaseOutputPin 類別,並實作 IPinFlowControl 介面。 它支援數個對動態圖形建置而言很重要的作業:
- 動態重新連線:當篩選仍在作用中時,針腳可以中斷連線並重新連線, (暫停或執行) 。
- 動態格式變更:針腳可以在篩選仍在使用中時交涉新的媒體類型,而不需重新連線。
- 流程式控制制:擁有篩選 (或應用程式) 可以封鎖來自釘選的資料流程,而不需停止篩選。
如需詳細資訊,請參閱 動態圖形建置。
針腳有三種可能的狀態:已封鎖、解除封鎖和擱置。 在 擱置 狀態中,針腳正在等候另一個執行緒上的某些作業完成,再將針腳切換至封鎖狀態。 當釘選遭到封鎖時,篩選無法透過針腳傳遞資料,或變更針腳的連線。
若要在多個執行緒之間協調,擁有篩選準則必須遵循特定規則。 (如需篩選圖形中線程的詳細資訊,請參閱 執行緒和關鍵區段。) First,串流執行緒一律必須呼叫 CDynamicOutputPin::StartUsingOutputPin 方法,才能呼叫下列任何方法:
- CDynamicOutputPin::ChangeOutputFormat
- CDynamicOutputPin::ChangeMediaType
- CDynamicOutputPin::D ynamicReconnect
- CBaseOutputPin::D eliver
- CBaseOutputPin::D eliverEndOfStream
- CBaseOutputPin::D eliverNewSegment
- IMemInputPin::Receive
- IMemInputPin::ReceiveMultiple
- IPin::EndOfStream
- IPin::NewSegment
之後,它必須呼叫 CDynamicOutputPin::StopUsingOutputPin 方法。
其次,應用程式執行緒不得呼叫上一個清單中的任何方法。 第三,串流執行緒不得呼叫封鎖或解除封鎖針腳的類別方法。 這些方法是: CDynamicOutputPin::Block、 CDynamicOutputPin::SynchronousBlockOutputPin、 CDynamicOutputPin::SyncBlockOutputPin和 CDynamicOutputPin::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 |
塊 | 封鎖或解除封鎖釘選的資料流程。 |
規格需求
需求 | 值 |
---|---|
標頭 |
|
程式庫 |
|