Gestion des modifications de format à partir du convertisseur vidéo

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si 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.]

Cette section décrit comment un filtre de décodeur ou un filtre de transformation doit gérer les modifications de format à partir du convertisseur vidéo.

Filtre du convertisseur vidéo

Lorsque l’ancien filtre Video Renderer se connecte, il nécessite un format RVB qui correspond au format d’affichage du moniteur principal. Cela lui permet d’utiliser GDI pour le rendu si DirectDraw n’est pas disponible. Lorsque la lecture démarre, le convertisseur vidéo peut basculer vers un format compatible DirectDraw. Pour vérifier si le filtre amont peut prendre en charge le nouveau format, le convertisseur vidéo appelle IPin::QueryAccept sur la broche de sortie du filtre amont. Si le filtre amont accepte le nouveau format, la méthode QueryAccept retourne S_OK. Le convertisseur vidéo change de format en attachant un type de média avec le nouveau format à l’exemple de média suivant retourné par son allocateur. Le filtre amont doit case activée pour les modifications de format en appelant IMediaSample::GetMediaType sur chaque exemple. Le convertisseur vidéo peut basculer entre le format d’origine et le nouveau format à tout moment pendant la diffusion en continu. Il n’appelle pas QueryAccept après le premier changement de format. Une fois que le filtre amont a accepté le nouveau format, il doit être en mesure de basculer.

Le filtre amont peut rejeter le changement de format en retournant S_FALSE à partir de QueryAccept. Dans ce cas, le convertisseur vidéo continue d’utiliser GDI avec le format d’origine.

Filtre du convertisseur de mixage vidéo

Le filtre convertisseur de mixage vidéo (VMR-7 et VMR-9) se connecte à n’importe quel format pris en charge par le matériel graphique sur le système. VmR-7 utilise toujours DirectDraw pour le rendu et alloue les surfaces DirectDraw sous-jacentes lorsque le filtre amont se connecte. VmR-9 utilise toujours Direct3D pour le rendu et alloue les surfaces Direct3D sous-jacentes lorsque le filtre amont se connecte.

Le matériel graphique peut nécessiter une plus grande foulée de surface que la largeur de l’image. Dans ce cas, le VMR demande un nouveau format en appelant QueryAccept. Il signale la foulée de surface dans le membre biWidth de BITMAPINFOHEADER au format vidéo. Si le filtre amont ne retourne pas d’S_OK à partir de QueryAccept, le vmr rejette le format et tente de se connecter à l’aide du format suivant publié par le filtre amont. VmR attache le type de média avec le nouveau format au premier exemple de média. Après le premier exemple, le format reste constant ; le VMR ne change pas de format pendant l’exécution du graphique.

Rendu vidéo amélioré (EVR)

L’EVR utilise toujours Direct3D pour le rendu. Si une plus grande foulée de surface est nécessaire, l’EVR utilise le même mécanisme QueryAccept que le VMR.

QueryAccept (Upstream)