[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、IMFMediaEngine及媒體基金會中的音訊/視訊擷取取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayer、IMFMediaEngine 和 音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]
您可以藉由直接修改數據來完成某些資料轉換。 這稱為 就地 處理。 許多音訊和視訊效果都可以以此方式完成。 如果 DMO 支援就地處理,它會公開 IMediaObjectInPlace 介面。 就地處理通常比針對輸出使用不同的緩衝區更有效率。 (其中一個主要例外狀況是緩衝區位於視訊記憶體中。在此情況下,讀取作業比寫入作業慢得多,因此不建議就地處理。
為了就地處理數據,用戶端會呼叫 IMediaObjectInPlace::P rocess 方法,而不是個別呼叫 ProcessInput,ProcessOutput。 Process 方法是同步的;所有處理都會在呼叫內發生。 此外,就地處理不會使用 IMediaBuffer 物件。 Process 方法會直接取得記憶體緩衝區的指標。
支援就地處理的 DMO 仍必須實作 IMediaObject 介面,包括 ProcessInput 和 ProcessOutput 方法。 用戶端可以選擇使用就地處理或使用個別緩衝區。 不過,請勿混合這兩種類型的處理。 如果您呼叫 Process,請勿呼叫 ProcessInput 或 ProcessOutput,反之亦然。
效果尾部
在地 DMO 可能會在輸入停止後產生一些額外的輸出。 這稱為 效果尾端。 例如,在輸入達到無聲之後,迴響效果會繼續。 如果有效果尾端,Process 方法會傳回S_FALSE。 一旦應用程式處理了所有數據,就可以將空白緩衝區傳送至 Process 方法,以產生效果尾端。
相關主題