共用方式為


DMO 架構

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

本節說明 DMO 的整體架構。

串流

DMO 是接受 m 輸入並產生 n 輸出的物件。 輸入和輸出稱為 資料流程。 每個 DMO 至少有一個資料流程。 資料流程不是物件;它們只會依索引編號在 DMO 上參考。 資料流程數目在設計階段是固定的。

媒體類型

所有資料都是使用 媒體類型來輸入,其會定義如何解譯資料的內容。 例如,320 x 240 24 位 RGB 視訊是一種類型;44.1-kbhertz (kHz) 16 位身歷聲 PCM 音訊是另一種類型。 媒體類型是使用 DMO_MEDIA_TYPE 結構來描述。 用戶端必須先設定 DMO 上每個資料流程的媒體類型,用戶端才能處理任何資料。

一般而言,資料流程可以接受各種媒體類型。 有些 DMO 支援比其他類型更廣泛的類型。 DMO 介面會定義用戶端探索支援類型的方法。 例如,一個 DMO 可能支援任何位深度的 RGB 視訊,而另一個可能只支援 24 位 RGB。 此外,DMO 可能僅限於輸入和輸出的特定組合。 例如,如果輸入類型是 16 位視訊,輸出資料流程可能需要相同的位深度。 用戶端可以列舉每個資料流程的慣用類型,然後測試特定組合。

緩衝區

在預設的 DMO 模型中,用戶端會配置個別的輸入緩衝區和輸出緩衝區。 它會使用資料填入輸入緩衝區,並將其傳遞至 DMO,而 DMO 會將新資料寫入輸出緩衝區。

選擇性地,DMO 可以支援「就地」處理。 使用就地處理時,DMO 會將輸出直接寫入輸入緩衝區,並透過原始資料。 就地處理不需要個別的緩衝區。 另一方面,它會改變原始資料,但某些應用程式可能無法接受。

IMediaObject介面支援預設 (非就地) 緩衝模型。 所有 DMO 都必須實作此介面。 如果 DMO 支援就地處理,它也會公開 IMediaObjectInPlace 介面。 用戶端負責配置所有緩衝區,包括輸入和輸出。

關於 DMO