Compartilhar via


Fornecendo uma Allocator-Presenter personalizada para VMR-7

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

O alocador-apresentador é responsável por alocar superfícies DirectDraw e apresentar os quadros de vídeo para renderização. Na grande maioria dos cenários, a funcionalidade do alocador-apresentador padrão será mais do que suficiente para as necessidades de um aplicativo. Mas ao conectar um alocador-apresentador personalizado, um aplicativo pode obter acesso direto aos bits de vídeo e controlar completamente o processo de renderização. A compensação para esse aumento de potência é que o aplicativo deve lidar com a complexidade adicional do gerenciamento de superfície directDraw.

usando um alocador-apresentador personalizado

A figura anterior mostra as interfaces de comunicação usadas pela VMR e pelo alocador-apresentador. Um alocador-apresentador personalizado que substitui toda a funcionalidade padrão de alocação e apresentação deve implementar as interfaces IVMRImagePresenter e IVMRSurfaceAllocator e, opcionalmente, IVMRWindowlessControl.

Para substituir o alocador-apresentador padrão, um aplicativo chama o método IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator e passa um ponteiro para o novo alocador-apresentador. Em resposta a essa chamada, a VMR chamará o método IVMRSurfaceAllocator::AdviseNotify do alocador para fornecer o ponteiro para a interface IVMRSurfaceAllocatorNotify da VMR . O alocador-apresentador usará esse ponteiro de interface ao passar eventos para a VMR com o método IVMRSurfaceAllocatorNotify::NotifyEvent .

Como uma solução alternativa, um aplicativo pode usar seu próprio alocador-apresentador e o alocador-apresentador padrão. Nesse cenário, o alocador-apresentador personalizado manipula apenas as chamadas em que a funcionalidade personalizada é necessária e passa o restante das chamadas da VMR para o alocador-apresentador padrão. Em muitos casos, só é necessário substituir a interface IVMRImagePresenter .

usando dois alocadores-apresentadores

Para usar um alocador-apresentador personalizado e o alocador-apresentador padrão, um aplicativo primeiro chamaria IVMRSurfaceAllocatorNotify::AdviseSurfaceAllocator para fornecer um ponteiro para o novo alocador-apresentador. Isso faz com que o alocador-apresentador padrão seja destruído, portanto, o aplicativo deve criar outra instância dele chamando QueryInterface na VMR e solicitando a interface IVMRSurfaceAllocator . Conforme mostrado na figura anterior, o alocador-apresentador personalizado substitui os métodos de interface IVMRImagePresenter e simplesmente passa todas as chamadas para a interface IVMRSurfaceAllocator até a implementação padrão. A figura também mostra a interface IVMRWindowlessControl como sendo implementada no alocador-apresentador.

Fornecendo uma Allocator-Presenter personalizada para VMR-9

Modo de Reprodução Sem Renderização da VMR (Alocador Personalizado-Apresentadores)