[與此頁面 相關的功能 DirectShow是舊版功能。 它已被 MediaPlayer、 IMFMediaEngine和 Media Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayer、 IMFMediaEngine 和 音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議盡可能重寫使用舊版 API 的現有程式碼,以使用新的 API。]
類別 COutputQueue 會實作佇列來傳遞媒體範例。
這個類別可讓輸出釘選以非同步方式傳遞範例。 範例會放在佇列上,而背景工作執行緒會將它們傳遞至輸入針腳。 佇列也可以保存控制訊息,指出新的區段、串流結束通知或排清作業。
若要使用此類別,請為篩選上的每個輸出釘選建立 COutputQueue 物件。 在建構函式方法中,指定連接到該輸出針腳的輸入針腳。 使用這個類別時,輸出針腳不會直接在輸入針腳上呼叫方法。 相反地,它會在 中 COutputQueue 呼叫對應的方法,如下表所示。
| Pin 方法 | COutputQueue 方法 |
|---|---|
| IPin::BeginFlush | BeginFlush |
| IPin::EndFlush | EndFlush |
| IPin::EndOfStream | EOS |
| IPin::NewSegment | NewSegment |
| IMemInputPin::Receive | 接收 |
| IMemInputPin::ReceiveMultiple | ReceiveMultiple |
您可以選擇性地設定 COutputQueue 物件以同步方式傳遞樣本,而不需要背景工作執行緒。 物件也可以根據輸入針腳的特性,在執行時間決定是否要使用背景工作執行緒。 如需詳細資訊,請參閱 COutputQueue::COutputQueue。
| 受保護的成員變數 | Description |
|---|---|
| m_pPin | 輸入針腳的 IPin 介面指標。 |
| m_pInputPin | 輸入針腳的 IMemInputPin 介面指標。 |
| m_bBatchExact | 旗標,指定物件是否以確切批次傳遞樣本。 |
| m_lBatchSize | 批次大小。 |
| m_List | 媒體範例佇列。 |
| m_hSem | 執行緒用來等候樣本的號志控制碼。 |
| m_evFlushComplete | 當排清作業完成時發出訊號的事件。 |
| m_hThread | 背景工作執行緒的控制碼。 |
| m_ppSamples | 大小為 COutputQueue::m_lBatchSize的樣本陣列。 |
| m_nBatched | 目前批次處理和等候處理的樣本數目。 |
| m_lWaiting | 當執行緒正在等候樣本時,具有非零值的旗標。 |
| m_bFlushing | 旗標,指定物件是否正在執行排清作業。 |
| m_bTerminate | 指定執行緒是否應該終止的旗標。 |
| m_bSendAnyway | 覆寫批次處理的旗標。 |
| m_hr | HRESULT 值,指出物件是否接受樣本。 |
| m_hEventPop | 每當物件從佇列中移除範例時,就會發出訊號的事件。 |
| 保護方法 | Description |
| InitialThreadProc | 建立執行緒時,呼叫 COutputQueue::ThreadProc 方法。 |
| ThreadProc | 從佇列擷取樣本,並將其傳遞至輸入針腳。 |
| IsQueued | 判斷物件是否使用背景工作執行緒來傳遞範例。 |
| QueueSample | 將媒體範例或控制訊息排入佇列。 |
| IsSpecialSample | 判斷佇列資料是否為控制訊息。 |
| FreeSamples | 釋放所有擱置中的範例。 |
| NotifyThread | 通知執行緒佇列包含資料。 |
| 公用方法 | Description |
| COutputQueue | 建構函式方法。 |
| ~COutputQueue | 解構函式方法。 |
| BeginFlush | 開始排清作業。 |
| EndFlush | 結束排清作業。 |
| EOS | 將串流結束呼叫傳遞至輸入針腳。 |
| SendAnyway | 提供任何擱置的範例。 |
| NewSegment | 將新的區段傳遞至輸入針腳。 |
| 接收 | 將媒體範例傳遞至輸入針腳。 |
| ReceiveMultiple | 將一批媒體範例傳遞至輸入針腳。 |
| 重 置 | 重設 物件,使其可以接收更多資料。 |
| IsIdle | 判斷物件是否正在等候資料。 |
| SetPopEvent | 指定每當物件從佇列中移除範例時發出訊號的事件。 |
規格需求
| 需求 | 值 |
|---|---|
| 標頭 |
|
| 程式庫 |
|