共用方式為


In-Place處理

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

您可以直接修改資料來完成特定資料轉換。 這稱為 就地 處理。 許多音訊和視訊效果都可以以此方式完成。 如果 DMO 支援就地處理,它會公開 IMediaObjectInPlace 介面。 就地處理通常比針對輸出使用不同的緩衝區更有效率。 (其中一個主要例外狀況是緩衝區位於視訊記憶體中。在此情況下,讀取作業比寫入作業慢很多,因此不建議就地處理。)

為了就地處理資料,用戶端會對 IMediaObjectInPlace::P rocess 方法進行單一呼叫,而不是個別呼叫 ProcessInputProcessOutputProcess方法為同步;所有處理都會在呼叫內發生。 此外,就地處理不會使用 IMediaBuffer 物件。 Process方法會直接取得記憶體緩衝區的指標。

支援就地處理的 DMO 仍然必須實作 IMediaObject 介面,包括 ProcessInputProcessOutput 方法。 用戶端可以選擇使用就地處理或使用個別緩衝區。 不過,請勿混合兩種類型的處理。 如果您呼叫 Process,請勿呼叫 ProcessInputProcessOutput,反之亦然。

效果尾端

就地 DMO 可能會在輸入停止之後建立一些額外的輸出。 這稱為 效果尾端。 例如,在輸入到達無聲之後,殘響效果會繼續。 如果有效果結尾, Process 方法會傳回S_FALSE。 一旦應用程式處理過所有資料,它就可以藉由將空白緩衝區傳送至 Process 方法,以產生效果結尾。

直接裝載 DMO