Partager via


Contrôle qualité par défaut

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La 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émentent certains comportements par défaut pour le contrôle qualité vidéo.

Les messages de qualité commencent au convertisseur. La classe de base pour les convertisseurs vidéo est CBaseVideoRenderer, qui a le comportement suivant :

  1. Lorsque le convertisseur vidéo reçoit un exemple, il compare l’horodatage de l’exemple à l’heure de référence actuelle.
  2. Le convertisseur vidéo génère un message de qualité. Dans la classe de base, le membre Proportion du message de qualité est limité à une plage comprise entre 500 (50 %) et 2000 (200 %). Les valeurs situées en dehors de cette plage peuvent entraîner des changements brusques de qualité.
  3. Par défaut, le convertisseur vidéo envoie le message de qualité à la broche de sortie amont (la broche connectée à sa broche d’entrée). Les applications peuvent remplacer ce comportement en appelant la méthode SetSink .

La suite dépend du filtre 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 classes CTransformInputPin et CTransformOutputPin pour implémenter des broches d’entrée et de sortie. Ensemble, ces classes ont le comportement suivant :

  1. La méthode CTransformOutputPin::Notify appelle CTransformFilter::AlterQuality, une méthode privée sur la classe de base de filtre.
  2. Les filtres dérivés peuvent remplacer AlterQuality pour gérer le message de qualité. Par défaut, AlterQuality ignore le message de qualité.
  3. Si AlterQuality ne gère pas le message de qualité, la broche de sortie appelle CBaseInputPin::P assNotify, une méthode privée sur la broche d’entrée du filtre.
  4. PassNotify transmet le message de qualité à l’emplacement approprié( le code de sortie amont suivant ou un gestionnaire de qualité personnalisé.

En supposant qu’aucun filtre de transformation ne gère le message de qualité, le message finit par atteindre l’épingle 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 qualité significatif. D’autres sources peuvent ajuster la fréquence à laquelle elles livrent des échantillons.

Le diagramme suivant illustre le comportement par défaut.

contrôle qualité dans les classes de base

Le convertisseur vidéo de base implémente IQualityControl::Notify, ce qui signifie que vous pouvez passer des messages de qualité au convertisseur lui-même. Si vous définissez le membre Proportion sur une valeur inférieure à 1000, le convertisseur vidéo insère une période d’attente entre chaque image qu’il affiche, ce qui ralentit le rendu. (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 à 1000 n’a aucun effet.

Gestion du contrôle qualité