Partager via


Classe CDynamicOutputPin

[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.]

La CDynamicOutputPin classe implémente une broche de sortie qui prend en charge les reconnexions dynamiques et les modifications de format.

Cette classe dérive de la classe CBaseOutputPin et implémente l’interface IPinFlowControl . Il prend en charge plusieurs opérations importantes pour la création de graphiques dynamiques :

  • Reconnexion dynamique : le code pin peut se déconnecter et se reconnecter tant que le filtre est toujours actif (en pause ou en cours d’exécution).
  • Changement de format dynamique : l’épingle peut négocier un nouveau type de média tant que le filtre est toujours actif, sans se reconnecter.
  • Contrôle de flux : le filtre propriétaire (ou une application) peut bloquer le flux de données à partir de la broche sans arrêter le filtre.

Pour plus d’informations, consultez Génération de graphiques dynamiques.

La broche a trois états possibles : bloqué, débloqué et en attente. Dans l’état en attente , la broche attend qu’une opération se termine sur un autre thread, avant que le broche passe à l’état bloqué. Lorsque la broche est bloquée, le filtre ne peut pas fournir de données via la broche, ni modifier la connexion de la broche.

Pour se coordonner entre plusieurs threads, le filtre propriétaire doit suivre certaines règles. (Pour plus d’informations sur les threads dans le graphe de filtres, consultez Threads et sections critiques.) Tout d’abord, le thread de streaming doit toujours appeler la méthode CDynamicOutputPin::StartUsingOutputPin avant d’appeler l’une des méthodes suivantes :

Ensuite, il doit appeler la méthode CDynamicOutputPin::StopUsingOutputPin .

Deuxièmement, le thread d’application ne doit appeler aucune des méthodes de la liste précédente. Troisièmement, le thread de streaming ne doit pas appeler les méthodes de classe qui bloquent ou débloquent l’épingle. Ces méthodes sont : CDynamicOutputPin::Block, CDynamicOutputPin::SynchronousBlockOutputPin, CDynamicOutputPin::AsynchroneBlockOutputPin et CDynamicOutputPin::UnblockOutputPin.

Ces règles garantissent que le thread d’application ne peut pas bloquer la broche pendant que le thread de streaming l’utilise, et vice versa. Une fois que le thread de streaming a appelé StartUsingOutputPin, le code pin ne bloque pas tant que le thread de streaming n’appelle pas StopUsingOutputPin. À l’inverse, si la broche est bloquée, StartUsingOutputPin attend que la broche soit débloquée.

Pour éviter d’oublier d’appeler StopUsingOutputPin, vous pouvez utiliser la classe CAutoUsingOutputPin . Il appelle automatiquement StopUsingOutputPin lorsqu’il sort de l’étendue.

Lorsque le filtre propriétaire joint ou quitte le graphe de filtre (dans sa méthode IBaseFilter::JoinFilterGraph ), il doit appeler la méthode CDynamicOutputPin::SetConfigInfo de la broche.

Variables membres protégées Description
m_BlockStateLock Section critique qui protège l’état de blocage.
m_hUnblockOutputPinEvent Événement signalé lorsque la broche n’est pas bloquée.
m_hNotifyCallerPinBlockedEvent Événement signalé lorsque l’épingle a réussi à bloquer ou que l’utilisateur annule un bloc en attente.
m_BlockState État de blocage.
m_dwBlockCallerThreadID Identificateur du thread qui a appelé la dernière méthode IPinFlowControl::Block sur cette broche.
m_dwNumOutstandingOutputPinUsers Nombre de threads de streaming utilisant cette broche.
m_hStopEvent Événement signalé lorsque le filtre s’arrête ou que la broche vide les données.
m_pGraphConfig Pointeur vers l’interface IGraphConfig pour effectuer des reconnexions dynamiques.
m_bPinUsesReadOnlyAllocator Indicateur qui spécifie si les exemples de l’allocateur de la broche sont en lecture seule.
Méthodes protégées Description
SynchronousBlockOutputPin Bloque la broche ; ne retourne pas tant que la broche n’est pas bloquée.
AsynchroneBlockOutputPin Bloque la broche ; peut revenir avant que l’épingle ne soit bloquée.
UnblockOutputPin Débloque l’épingle.
BlockOutputPin Bloque l’épingle.
WaitEvent Attend que l’événement spécifié soit signalé.
Méthodes publiques Description
CDynamicOutputPin Méthode du constructeur.
~CDynamicOutputPin Méthode de destructeur.
SetConfigInfo Spécifie le pointeur IGraphConfig et l’événement stop.
DeliverBeginFlush Demande à la broche d’entrée connectée de commencer une opération de vidage.
DeliverEndFlush Demande à la broche d’entrée connectée de mettre fin à une opération de vidage.
Inactif Avertit l’épingle que le filtre s’est arrêté.
Actif Avertit la broche que le filtre est maintenant actif.
CompleteConnect Termine une connexion à une broche d’entrée. Virtuel.
StartUsingOutputPin Obtient l’accès à la broche pour une opération de diffusion en continu. Virtuel.
StopUsingOutputPin Libère l’accès à l’épingle après une opération de diffusion en continu. Virtuel.
StreamingThreadUsingOutputPin Détermine si un thread effectue une opération de diffusion en continu sur la broche. Virtuel.
ChangeOutputFormat Modifie dynamiquement le type de média pour la connexion et fournit de nouvelles informations de segment.
ChangeMediaType Modifie dynamiquement le type de média pour la connexion.
DynamicReconnect Effectue une reconnexion dynamique avec un nouveau type de média.
Méthodes IPin Description
Déconnecter Interrompt la connexion de broche actuelle.
Méthodes IPinFlowControl Description
Bloc Bloque ou débloque le flux de données à partir de l’épingle.

Configuration requise

Condition requise Valeur
En-tête
Amfilter.h (include Streams.h)
Bibliothèque
Strmbase.lib (builds de vente au détail) ;
Strmbasd.lib (builds de débogage)