Flow les portes de contrôle dans AVStream

AVStream utilise des portes logiques comme mécanisme de contrôle de Workflow. Chaque porte logique est représentée par une structure KSGATE .

AVStream Initialise chaque filtre ou code pin avec un single et une porte. Un minipilote peut ensuite utiliser ce mécanisme pour déterminer si cet objet spécifique peut traiter des données. Pour récupérer la porte de contrôle de traitement d’un code confidentiel, le minipilote appelle KsPinGetAndGate. Pour récupérer la porte de contrôle de traitement d’un filtre, appelez KsFilterGetAndGate.

Pour créer des portes logiques, le minipilote appelle KsGateInitializeAnd ou KsGateInitializeOr. Vous pouvez utiliser la sortie d’une porte comme entrée d’une autre porte, en transférant les transitions d’État. Pour ce faire, fournissez un paramètre NextOrGate ou NextAndGate dans ces appels.

Pour fermer une entrée existante dans une porte logique, vous pouvez appeler KsGateTurnInputOff. Le minipilote peut effectuer cet appel pour arrêter et fermer un pin actif, ou pour suspendre le traitement pendant une période indéterminée.

De même, appelez KsGateTurnInputOn pour ouvrir une entrée existante dans une porte spécifique.

Lorsqu’un thread est prêt à être traité, il tente de capturer le en entrée de la porte et qui contrôle le traitement de l’objet de traitement. Pour ce faire, le minipilote appelle KsGateCaptureThreshold.

Si la porte et est ouverte, AVStream désactive une entrée sur la porte et le traitement commence. Dans la mesure où la porte est maintenant fermée pendant le traitement, aucun autre thread ne peut capturer le en entrée de la porte. Un seul thread peut traiter des données à la fois.

Pour vérifier l’état d’une porte sans la modifier, le minipilote peut appeler KsGateGetStateUnsafe. Notez, toutefois, que cette fonction ne gère pas la synchronisation.

Pour supprimer une porte logique, appelez KsGateTerminateAnd ou KsGateTerminateOr. La porte que vous supprimez doit être au début d’une chaîne de porte.

Pour attacher un code confidentiel comme entrée à une porte logique, puis connecter la même porte logique comme entrée à la porte d’un filtre et d’un opérateur, appelez KsPinAttachAndGate ou KsPinAttachOrGate.

Détermination de l’état de la porte

Pour une porte et, la valeur du membre Count de la structure KSGATE est un moins le nombre d’entrées off :

Count = 1-(nombre d’entrées off )

Si cette valeur est inférieure ou égale à zéro, la porte est fermée. Si cette valeur est supérieure à zéro, la porte est ouverte.

Pour une porte ou, la valeur du membre Count de KSGATE est le nombre de sur les entrées de la porte :

Count = (nombre de sur les entrées)

Si cette valeur est égale à zéro, la porte est fermée. Si Count est supérieur à zéro, la porte est ouverte.

ET les portes ont une plage de nombres valide d’une ou de moins ; OU les portes ont une plage de nombres valide égale à zéro ou supérieure. Ne définissez pas Count sur des valeurs non valides ; AVStream ne vérifie pas qu’un minipilote a défini la porte sur un état valide.