共用方式為


為 VMR-7 提供的自訂 Allocator-Presenter

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

配置器演示者負責配置 DirectDraw 表面,並呈現要轉譯的視訊畫面。 在絕大多數案例中,預設配置器演示者的功能將足以滿足應用程式的需求。 但是,藉由插入自定義配置器-呈現器,應用程式可以直接存取視頻位元,並完全控制渲染過程。 此增加的效能的取捨是應用程式必須處理 DirectDraw 表面管理的額外複雜度。

使用自訂配置器演示者

上圖顯示 VMR 和配置器演示者所使用的通訊介面。 覆寫所有預設配置和簡報功能的自定義配置器演示者,必須實作 IVMRImagePresenterIVMRSurfaceAllocator 接口,並選擇性地 IVMRWindowlessControl

若要取代預設配置器演示者,應用程式會呼叫 IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator 方法,並傳入新配置器演示者的指標。 為了回應此呼叫,VMR 會呼叫配置器演示者的 IVMRSurfaceAllocator::AdviseNotify 方法,提供指向 VMR IVMRSurfaceAllocatorNotify 介面的指標。 配置器演示者會在使用 IVMRSurfaceAllocatorNotify::NotifyEvent 方法將事件傳遞至 VMR 時,會使用此介面指標。

作為替代解決方案,應用程式可以使用它自己的配置器演示者和預設配置器演示器。 在此案例中,自定義配置器演示者只會處理需要自定義功能的呼叫,並將 VMR 的其餘呼叫傳遞至預設配置器演示者。 在許多情況下,只需要覆寫 IVMRImagePresenter 介面。

使用兩個分配器-演示者

若要同時使用自定義配置器演示器和預設配置器演示者,應用程式會先呼叫 IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator,以提供新配置器演示者的指標。 這會導致預設配置呈現器被銷毀,因此應用程式必須在 VMR 上呼叫 QueryInterface,並要求 IVMRSurfaceAllocator 介面來建立另一個實例。 如上圖所示,自定義配置器演示者會覆寫 IVMRImagePresenter 介面方法,並直接將所有呼叫傳遞至 IVMRSurfaceAllocator 介面到默認實作。 此圖還顯示了在分配器-呈現器上實作的 IVMRWindowlessControl 介面。

為 VMR-9 提供自定義 Allocator-Presenter

VMR 無轉譯播放模式 (自訂 Allocator-Presenters)