VMR-7 用のカスタム Allocator-Presenterの提供
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/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 インターフェイスをオーバーライドするだけで済みます。
カスタム アロケーター 発表者と既定のアロケーター 発表者の両方を使用するには、アプリケーションは最初に IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator を呼び出して、新しいアロケーター 発表者へのポインターを提供します。 これにより、既定のアロケーター 発表者が破棄されるため、アプリケーションは VMR で QueryInterface を 呼び出し、 IVMRSurfaceAllocator インターフェイスを要求することで、そのインスタンスの別のインスタンスを作成する必要があります。 前の図に示すように、カスタムアロケーター発表者は IVMRImagePresenter インターフェイス メソッドをオーバーライドし、 IVMRSurfaceAllocator インターフェイスへのすべての呼び出しを既定の実装に渡すだけです。 この図は、アロケーター 発表者に実装されている IVMRWindowlessControl インターフェイスも示しています。
関連トピック