共用方式為


In-Place 處理

[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngine及媒體基金會中的音訊/視訊擷取取代。 這些功能已針對 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