CDynamicOutputPin, classe

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 génération de graphiques dynamiques :

  • Reconnexion dynamique : le code confidentiel peut se déconnecter et se reconnecter lorsque le filtre est toujours actif (en pause ou en cours d’exécution).
  • Modification du format dynamique : le code confidentiel peut négocier un nouveau type de média alors que le filtre est toujours actif, sans se reconnecter.
  • contrôle Flow : le filtre propriétaire (ou une application) peut bloquer le workflow de données à partir du code confidentiel sans arrêter le filtre.

pour plus d’informations, consultez génération de Graph dynamique.

Le code pin a trois États possibles : bloqué, débloqué et en attente. Dans l’état en attente , le code PIN attend qu’une opération se termine sur un autre thread, avant que le code confidentiel passe à l’État bloqué. Lorsque le code confidentiel est bloqué, le filtre ne peut pas fournir de données par le biais du code confidentiel ou modifier la connexion du pin.

Pour coordonner plusieurs threads, le filtre propriétaire doit respecter certaines règles. (Pour plus d’informations sur les threads dans le graphique de filtre, 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 pas appeler les 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 le code confidentiel. Ces méthodes sont les suivantes : CDynamicOutputPin :: Block, CDynamicOutputPin :: SynchronousBlockOutputPin, CDynamicOutputPin :: AsynchronousBlockOutputPinet CDynamicOutputPin :: UnblockOutputPin.

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

Pour éviter d’oublier d’appeler StopUsingOutputPin, vous pouvez utiliser la classe CAutoUsingOutputPin . Il appelle StopUsingOutputPin automatiquement lorsqu’il est hors de portée.

Quand le filtre propriétaire rejoint ou leaveds le graphique de filtre (dans sa méthode IBaseFilter :: JoinFilterGraph ), il doit appeler la méthode CDynamicOutputPin :: SetConfigInfo du pin.

Variables membres protégées Description
m _ BlockStateLock Section critique qui protège l’état de blocage.
m _ hUnblockOutputPinEvent Événement signalé lorsque le pin n’est pas bloqué.
m _ hNotifyCallerPinBlockedEvent Événement signalé lorsque le code confidentiel se bloque correctement ou lorsque l’utilisateur annule un bloc en attente.
m _ BlockState État de blocage.
m _ dwBlockCallerThreadID Identificateur du thread qui a appelé la méthode IPinFlowControl :: Block sur ce code confidentiel.
m _ dwNumOutstandingOutputPinUsers Nombre de threads de streaming utilisant ce code PIN.
m _ hStopEvent Événement signalé lorsque le filtre s’arrête ou que le code PIN vide les données.
m _ pGraphConfig Pointeur vers l’interface IGraphConfig pour l’exécution de reconnexions dynamiques.
m _ bPinUsesReadOnlyAllocator Indicateur qui spécifie si les échantillons de l’allocateur du pin sont en lecture seule.
Méthodes protégées Description
SynchronousBlockOutputPin Bloque le code confidentiel ; n’est pas retourné tant que le code confidentiel n’est pas bloqué.
AsynchronousBlockOutputPin Bloque le code confidentiel ; peut retourner avant que le code confidentiel soit bloqué.
UnblockOutputPin Débloque le code confidentiel.
BlockOutputPin Bloque le code confidentiel.
WaitEvent Attend que l’événement spécifié soit signalé.
Méthodes publiques Description
CDynamicOutputPin Méthode de 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 pour commencer une opération de vidage.
DeliverEndFlush Demande la broche d’entrée connectée pour terminer une opération de vidage.
Inactif Notifie le code confidentiel que le filtre a arrêté.
Actif Notifie le code confidentiel que le filtre est maintenant actif.
CompleteConnect Termine une connexion à une broche d’entrée. Virtuels.
StartUsingOutputPin Obtient l’accès au code confidentiel pour une opération de diffusion en continu. Virtuels.
StopUsingOutputPin Libère l’accès au code PIN après une opération de diffusion en continu. Virtuels.
StreamingThreadUsingOutputPin Détermine si un thread effectue une opération de diffusion en continu sur le code confidentiel. Virtuels.
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 code confidentiel actuelle.
Méthodes IPinFlowControl Description
Block Bloque ou débloque le workflow de données à partir du code confidentiel.

Spécifications

Condition requise Valeur
En-tête
Amfilter. h (inclure Flux. h)
Bibliothèque
Strmbase. lib (versions commerciales);
Strmbasd. lib (versions Debug)