Share via


Proporcionar un Allocator-Presenter personalizado para VMR-7

[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

El asignador-moderador es responsable de asignar superficies de DirectDraw y presentar los fotogramas de vídeo para la representación. En la gran mayoría de los escenarios, la funcionalidad del asignador-moderador predeterminado será más que suficiente para las necesidades de una aplicación. Sin embargo, al conectar un presentador de asignador personalizado, una aplicación puede obtener acceso directo a los bits de vídeo y controlar completamente el proceso de representación. La compensación de este aumento de potencia es que la aplicación debe controlar la complejidad adicional de la administración de superficies de DirectDraw.

uso de un asignador-moderador personalizado

En la ilustración anterior se muestran las interfaces de comunicación usadas por VMR y el asignador-moderador. Un presentador de asignador personalizado que invalida todas las funciones de presentación y asignación predeterminadas debe implementar las interfaces IVMRImagePresenter e IVMRSurfaceAllocator y, opcionalmente, IVMRWindowlessControl.

Para reemplazar el asignador-moderador predeterminado, una aplicación llama al método IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator y pasa un puntero al nuevo asignador-moderador. En respuesta a esta llamada, VMR llamará al método IVMRSurfaceAllocator::AdviseNotify del asignador para proporcionar el puntero a la interfaz IVMRSurfaceAllocatorNotify de VMR . El asignador-moderador usará este puntero de interfaz al pasar eventos a VMR con el método IVMRSurfaceAllocatorNotify::NotifyEvent .

Como solución alternativa, una aplicación puede usar su propio asignador-moderador y el asignador-moderador predeterminado. En este escenario, el asignador-moderador personalizado controla solo las llamadas en las que se necesita la funcionalidad personalizada y pasa el resto de las llamadas de VMR a través del asignador-moderador predeterminado. En muchos casos, solo es necesario invalidar la interfaz IVMRImagePresenter .

usar dos moderadores de asignador

Para usar un asignador-moderador personalizado y el asignador-moderador predeterminado, una aplicación llamaría primero a IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator para proporcionar un puntero al nuevo asignador-moderador. Esto hace que se destruya el asignador-moderador predeterminado, por lo que la aplicación debe crear otra instancia de ella llamando a QueryInterface en vmR y solicitando la interfaz IVMRSurfaceAllocator . Como se muestra en la ilustración anterior, el asignador personalizado-moderador invalida los métodos de interfaz IVMRImagePresenter y simplemente pasa todas las llamadas a la interfaz IVMRSurfaceAllocator a través de la implementación predeterminada. En la ilustración también se muestra la interfaz IVMRWindowlessControl como implementada en el asignador-moderador.

Proporcionar un Allocator-Presenter personalizado para VMR-9

Modo de reproducción sin representación de VMR (presentadores de asignadores personalizados)