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 :
- CDynamicOutputPin::ChangeOutputFormat
- CDynamicOutputPin::ChangeMediaType
- CDynamicOutputPin ::D ynamicReconnect
- CBaseOutputPin ::D eliver
- CBaseOutputPin ::D eliverEndOfStream
- CBaseOutputPin ::D eliverNewSegment
- IMemInputPin :: Receive
- IMemInputPin::ReceiveMultiple
- IPin :: EndOfStream
- IPin::NewSegment
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 |
|
| Bibliothèque |
|