Fourniture d’un Allocator-Presenter personnalisé pour VMR-7
[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La capture audio/vidéo dans Media Foundation au lieu de DirectShow, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]
L’allocateur-présentateur est responsable de l’allocation des surfaces DirectDraw et de la présentation des images vidéo pour le rendu. Dans la grande majorité des scénarios, les fonctionnalités de l’allocator-présentateur par défaut seront plus que suffisantes pour les besoins d’une application. Mais en branchant un présentateur-allocateur personnalisé, une application peut obtenir un accès direct aux bits vidéo et contrôler complètement le processus de rendu. Le compromis pour cette puissance accrue est que l’application doit gérer la complexité supplémentaire de la gestion des surfaces DirectDraw.
La figure précédente montre les interfaces de communication utilisées par le VMR et l’allocator-presenter. Un présentateur-allocator personnalisé qui remplace toutes les fonctionnalités d’allocation et de présentation par défaut doit implémenter les interfaces IVMRImagePresenter et IVMRSurfaceAllocator , et éventuellement, IVMRWindowlessControl.
Pour remplacer l’allocator-presenter par défaut, une application appelle la méthode IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator et passe un pointeur vers le nouvel allocator-presenter. En réponse à cet appel, le VMR appelle la méthode IVMRSurfaceAllocator::AdviseNotify de l’allocator-présentateur pour fournir le pointeur vers l’interface IVMRSurfaceAllocatorNotify de VMR. L’allocator-présentateur utilise ce pointeur d’interface lors de la transmission d’événements au VMR avec la méthode IVMRSurfaceAllocatorNotify::NotifyEvent .
En tant que solution alternative, une application peut utiliser à la fois son propre allocator-presenter et l’allocator-presenter par défaut. Dans ce scénario, l’allocator-présentateur personnalisé gère uniquement les appels pour lesquels des fonctionnalités personnalisées sont nécessaires et passe le reste des appels du VMR à l’allocator-presenter par défaut. Dans de nombreux cas, il est uniquement nécessaire de remplacer l’interface IVMRImagePresenter .
Pour utiliser à la fois un allocator-presenter personnalisé et l’allocator-presenter par défaut, une application appelle d’abord IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator pour fournir un pointeur vers le nouvel allocator-presenter. Comme l’allocator-présentateur par défaut est détruit, l’application doit créer un autre instance de celui-ci en appelant QueryInterface sur le VMR et en demandant l’interface IVMRSurfaceAllocator. Comme illustré dans la figure précédente, l’allocator-présentateur personnalisé remplace les méthodes d’interface IVMRImagePresenter et passe simplement tous les appels à l’interface IVMRSurfaceAllocator via l’implémentation par défaut. La figure montre également que l’interface IVMRWindowlessControl est implémentée sur l’allocator-presenter.
Rubriques connexes