Partager via


Portes de contrôle de flux dans AVStream

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

AVStream initialise chaque filtre ou broche avec une seule porte AND. Un minidriver peut ensuite utiliser ce mécanisme pour déterminer quand cet objet spécifique peut traiter des données. Pour récupérer la porte de contrôle de traitement d’une broche, le minidriver 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 minidriver appelle KsGateInitializeAnd ou KsGateInitializeOr. Vous pouvez utiliser la sortie d’une porte comme entrée vers une autre porte, transférant ainsi les transitions d’état. Pour ce faire, fournissez un paramètre NextOrGate ou NextAndGate dans ces appels.

Pour fermer une entrée existante à une porte logique, vous pouvez appeler KsGateTurnInputOff. Le minidriver peut effectuer cet appel pour arrêter et fermer une broche active, ou pour interrompre le traitement pendant une période indéfinie.

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

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

Si la porte AND est ouverte, AVStream désactive une entrée à la porte et le traitement commence. Étant donné que la porte est maintenant fermée pendant le traitement, aucun autre thread ne peut capturer l’entrée de la porte. Un seul thread peut traiter des données à la fois.

Pour case activée l’status d’une porte sans la modifier, le minidriver 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 se trouver au début d’une chaîne de porte.

Pour attacher une broche en tant qu’entrée à une porte logique, puis pour connecter la même porte logique que l’entrée à la porte AND d’un filtre, appelez KsPinAttachAndGate ou KsPinAttachOrGate.

Détermination de l’état de la porte

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

Nombre = 1 - (nombre d’entrées désactivées )

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 OR, la valeur du membre Count de KSGATE est le nombre d’entrées sur 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.

Les portes AND ont une plage de nombres valide d’un ou de moins ; Les portes OR ont une plage de nombres valide de zéro ou supérieure. Ne définissez pas Count sur des valeurs non valides ; AVStream ne vérifie pas qu’un minidriver a défini la porte sur un état valide.