次の方法で共有


VMR-7 用のカスタム Allocator-Presenterの提供

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

allocator-presenter は、DirectDraw サーフェスを割り当て、レンダリング用のビデオ フレームを提示する役割を担います。 シナリオの大部分では、既定のアロケーター 発表者の機能は、アプリケーションのニーズに十分以上のものになります。 ただし、カスタム アロケーター 発表者を接続することで、アプリケーションはビデオ ビットへの直接アクセスを取得し、レンダリング プロセスを完全に制御できます。 この強化された電力のトレードオフは、アプリケーションが DirectDraw サーフェス管理の複雑さを処理する必要があるということです。

カスタム アロケーター 発表者の使用

上の図は、VMR とアロケーター発表者によって使用される通信インターフェイスを示しています。 すべての既定の割り当ておよびプレゼンテーション機能をオーバーライドするカスタム アロケーター 発表者は、 IVMRImagePresenter インターフェイスと IVMRSurfaceAllocator インターフェイス、および必要に応じて IVMRWindowlessControl を実装する必要があります。

既定のアロケーター 発表者を置き換えるために、アプリケーションは IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator メソッドを呼び出し、新しいアロケーター 発表者へのポインターを渡します。 この呼び出しに応答して、VMR はアロケーター発表者の IVMRSurfaceAllocator::AdviseNotify メソッドを呼び出して、VMR の IVMRSurfaceAllocatorNotify インターフェイスへのポインターを提供します。 アロケーター 発表者は、 IVMRSurfaceAllocatorNotify::NotifyEvent メソッドを使用して VMR にイベントを渡すときに、このインターフェイス ポインターを使用します。

別のソリューションとして、アプリケーションは独自の allocator-presenter と既定のアロケーター 発表者の両方を使用できます。 このシナリオでは、カスタム アロケーター 発表者は、カスタム機能が必要な呼び出しのみを処理し、VMR から既定のアロケーター 発表者に残りの呼び出しを渡します。 多くの場合、 IVMRImagePresenter インターフェイスをオーバーライドするだけで済みます。

2 人のアロケーター 発表者を使用する

カスタム アロケーター 発表者と既定のアロケーター 発表者の両方を使用するには、アプリケーションは最初に IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator を呼び出して、新しいアロケーター 発表者へのポインターを提供します。 これにより、既定のアロケーター 発表者が破棄されるため、アプリケーションは VMR で QueryInterface を 呼び出し、 IVMRSurfaceAllocator インターフェイスを要求することで、そのインスタンスの別のインスタンスを作成する必要があります。 前の図に示すように、カスタムアロケーター発表者は IVMRImagePresenter インターフェイス メソッドをオーバーライドし、 IVMRSurfaceAllocator インターフェイスへのすべての呼び出しを既定の実装に渡すだけです。 この図は、アロケーター 発表者に実装されている IVMRWindowlessControl インターフェイスも示しています。

VMR-9 用のカスタム Allocator-Presenterの提供

VMR レンダリングレス再生モード (カスタム アロケーター 発表者)