Contrôle qualité par défaut

les Classes de Base DirectShow implémentent des comportements par défaut pour le contrôle de la qualité vidéo.

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

  1. Quand le convertisseur vidéo reçoit un échantillon, il compare l’horodatage de l’échantillon avec le temps de référence actuel.
  2. Le convertisseur vidéo génère un message de qualité. Dans la classe de base, le membre de proportion du message de qualité est limité à une plage de 500 (50%) à 2000 (200%). Les valeurs en dehors de cette plage peuvent entraîner des modifications de qualité brusques.
  3. Par défaut, le convertisseur vidéo envoie le message de qualité à la broche de sortie en amont (le code confidentiel connecté à sa broche d’entrée). Les applications peuvent substituer 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 classes CTransformInputPin et CTransformOutputPin pour implémenter les 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é (la broche 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 finit par atteindre 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 Live Video capture, ne peuvent pas effectuer un contrôle de qualité significatif. D’autres sources peuvent ajuster la vitesse à laquelle elles fournissent des exemples.

Le diagramme suivant illustre le comportement par défaut.

contrôle de 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 un délai d’attente entre chaque frame qu’il restitue, ce qui ralentit 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 de proportion sur une valeur supérieure à 1000 n’a aucun effet.

Gestion du contrôle de la qualité