Contrôle de qualité par défaut
[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.]
Les classes de base DirectShow implémenter certains comportements par défaut pour le contrôle de qualité vidéo.
Les messages de qualité commencent au renderer. La classe de base pour les convertisseurs vidéo est CBaseVideoRenderer, qui a le comportement suivant :
- Lorsque le renderer vidéo reçoit un exemple, il compare l’horodatage sur l’exemple avec l’heure de référence actuelle.
- Le convertisseur vidéo génère un message de qualité. Dans la classe de base, le Proportion membre du message de qualité est limité à une plage de 500 (50%) à 2000 (200%). Les valeurs en dehors de cette plage peuvent entraîner des changements brusques de qualité.
- Par défaut, le convertisseur vidéo envoie le message de qualité à la broche de sortie en amont (la broche connectée à sa broche d’entrée). Les applications peuvent remplacer ce comportement en appelant la méthode SetSink.
Ce qui se passe ensuite dépend du filtre en amont. En règle générale, il s’agit d’un filtre de transformation. La classe de base pour les filtres de transformation est CTransformFilter, qui utilise les CTransformInputPin et classes CTransformOutputPin pour implémenter des broches d’entrée et de sortie. Ensemble, ces classes ont le comportement suivant :
- La méthode CTransformOutputPin ::Notify appelle CTransformFilter ::AlterQuality, méthode privée sur la classe de base de filtre.
- Les filtres dérivés peuvent remplacer alterQuality pour gérer le message de qualité. Par défaut, AlterQuality ignore le message de qualité.
- Si AlterQuality ne gère pas le message de qualité, l’épingle de sortie appelle CBaseInputPin ::P assNotify, une méthode privée sur la broche d’entrée du filtre.
- PassNotify transmet le message de qualité à l’emplacement approprié , l’épingle de sortie en amont suivante ou un gestionnaire de qualité personnalisé.
En supposant qu’aucun filtre de transformation ne gère le message de qualité, le message atteint finalement la broche de sortie sur le filtre source. Dans les classes de base, CBasePin ::Notify retourne E_NOTIMPL. La façon dont un filtre source particulier gère les messages de qualité dépend de la nature de la source. Certaines sources, telles que la capture vidéo en direct, ne peuvent pas effectuer un contrôle de qualité significatif. D’autres sources peuvent ajuster le taux auquel ils fournissent des échantillons.
Le diagramme suivant illustre le comportement par défaut.
Le convertisseur vidéo de base implémente IQualityControl ::Notify, ce qui signifie que vous pouvez transmettre des messages de qualité au renderer lui-même. Si vous définissez le membre Proportion sur une valeur inférieure à 1 000, le convertisseur vidéo insère une période d’attente entre chaque image qu’il affiche, ce qui ralentit en effet le convertisseur. (Vous pouvez le faire pour réduire l’utilisation du système, par exemple.) Pour plus d’informations, consultez CBaseVideoRenderer ::ThrottleWait. La définition du membre Proportion sur une valeur supérieure à 1 000 n’a aucun effet.
Rubriques connexes