Filtre du renderer vidéo
[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngineet audio/vidéo capture dans 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 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.]
Le filtre Video Renderer est un convertisseur vidéo robuste et universel.
Note
Sur Windows XP et versions ultérieures, le renderer vidéo par défaut est le Video Mixing Renderer Filter 7 (VMR-7). VmR-7 et Video Renderer ont tous les deux le nom convivial « Video Renderer ». Sur les plateformes antérieures, Video Renderer est le renderer par défaut. Consultez Choix du convertisseur approprié.
Video Renderer utilise DirectDraw et les surfaces de superposition, si la carte vidéo les prend en charge. Le Gestionnaire de graphes de filtre expose l’interface IVideoWindow, qui permet aux applications de définir et de récupérer des propriétés sur le renderer vidéo. Avec des cartes vidéo plus récentes, Video Renderer prend en charge le rendu en plein écran. Sinon, le Gestionnaire de graphiques de filtre bascule automatiquement vers le convertisseur plein écran filtre pour le mode plein écran. Pour plus d’informations, consultez IVideoWindow ::p ut_FullScreenMode.
! [Important]
Normalement, la fenêtre vidéo de ce filtre traite les messages sur un thread de travail créé par le Gestionnaire de graphes de filtre. Howerver, si une application crée directement le filtre à l’aide de CoCreateInstance, la fenêtre vidéo traite les messages sur le thread d’application. Dans ce cas, le thread d’application doit avoir une boucle de message pour distribuer des messages dans la fenêtre vidéo. En outre, le thread ne doit pas se quitter tant que la version finale appel au renderer Video, qui se produit lorsque le Gestionnaire de graphes de filtre s’arrête. Sinon, l’application risque d’interblocage.
Étiquette | Valeur |
---|---|
Interfaces de filtre | IBaseFilter, IBasicVideo, IBasicVideo2 , IDirectDrawVideo, IKsPropertySet, IMediaPosition, IMediaSeeking, IQualityControl, IQualProp, IVideoWindow |
Types de supports de broche d’entrée | Formats vidéo non compressés. |
Interfaces de broche d’entrée | IMemInputPin, IOverlay , IPin, IPinConnection, IQualityControl |
Types de supports de broche de sortie | Sans objet. |
Interfaces de broche de sortie | Sans objet. |
Filtrer le CLSID | CLSID_VideoRenderer |
Page de propriétés CLSID | Aucune page de propriétés. |
Exécutable | quartz.dll |
mérite | Windows XP et versions ultérieures : MERIT_UNLIKELY |
catégorie de filtre | CLSID_LegacyAmFilterCategory |
Remarques
Dans la version de débogage de Quartz.dll, si le niveau de débogage LOG_TRACE est défini sur 5 ou version ultérieure, le Renderer Video Renderer affiche les horodatages de chaque image sur la fenêtre vidéo. Ces numéros n’apparaissent pas dans la version commerciale de la DLL. Pour plus d’informations, consultez Fonctions de sortie de débogage.
Les remarques suivantes sont destinées aux développeurs de filtres :
Video Renderer accepte les formats YUV si la carte graphique vidéo prend en charge les surfaces de superposition YUV. Quand il se connecte d’abord au filtre en amont, toutefois, le renderer vidéo nécessite un format RVB qui correspond à la profondeur de couleur des paramètres actuels du moniteur. Par exemple, si le paramètre d’affichage actuel est de couleur 24 bits, le filtre en amont doit être en mesure de fournir une vidéo RVB 24 bits. Lorsque le graphe de filtre passe à un état d’exécution, video Renderer négocie une modification dynamique du format vers l’espace de couleurs YUV approprié.
En vous connectant avec un type RVB, Video Renderer garantit qu’il peut utiliser GDI si DirectDraw n’est pas disponible. Il bascule vers GDI si une autre application utilise la mémoire vidéo, si le rectangle vidéo chevauche deux moniteurs sur un système à plusieurs moniteurs, ou si le rectangle vidéo est complètement masqué par une autre fenêtre.
Note
Video Mixing Renderer n’effectue pas ce type de modification de format dynamique et ne nécessite pas de type de média RVB, car il n’utilise jamais GDI pour le rendu.
Pour négocier une modification de format, Video Renderer appelle IPin ::QueryAccept avec le nouveau type de média. Si le filtre en amont retourne S_OK, Video Renderer attache le nouveau média à l’exemple suivant. Le filtre en amont doit appeler IMediaSample ::GetMediaType sur chaque exemple. Si GetMediaType retourne une valeurNULL non, elle indique une modification de format et le filtre en amont doit répondre en changeant de type de sortie. (Ne pas changer de type dans la méthode QueryAccept.) Le filtre en amont doit accepter au moins les principaux types RVB, et idéalement prendre en charge les types YUV courants. Pendant la diffusion en continu, video Renderer peut basculer entre les types YUV et RVB n’importe quel nombre de fois. Video Renderer n’accepte pas les modifications de format dynamique initiées par le filtre en amont.
Lorsque le renderer video dessine sur une surface de superposition DirectDraw, il alloue une mémoire tampon unique pour sa broche d’entrée. Si le filtre en amont tente de forcer une connexion à l’aide de plusieurs mémoires tampons, video Renderer ne peut pas utiliser la surface de superposition.
Rubriques connexes