Sincronizando a VMR com a taxa de atualização do Monitor

[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.]

Em cenários raros, talvez você queira sincronizar com precisão a renderização de vídeo com a taxa de atualização do monitor, para que exatamente um novo quadro seja apresentado sempre que o monitor for atualizado. A maneira mais confiável de fazer isso é criar um alocador-apresentador personalizado que usa uma operação de inversão em vez de uma operação blit para gravar os bits de vídeo na superfície primária. "Flip" é chamado sempre que o monitor é atualizado, portanto, se o fluxo de vídeo não contiver carimbos de data/hora, a VMR será renderizada o mais rápido possível para a superfície primária, mas a superfície bloqueará o fluxo até que a operação Flip seja concluída. Isso significa que, enquanto a CPU não estiver sobrecarregada, o próximo quadro sempre estará aguardando na superfície primária sempre que o monitor for atualizado. No entanto, se algum outro processo com uso intensivo de CPU estiver em execução, ele poderá passar fome no thread de streaming do DirectShow para que ele não possa entregar quadros de vídeo rápidos o suficiente para a superfície primária.

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