Traitement centré sur les broches

Lors de l’écriture d’un minidriver AVStream, vous fournissez des filtres qui utilisent l’un des deux paradigmes de traitement : traitement centré sur les broches ou traitement centré sur les filtres.

Le traitement centré sur les broches signifie qu’AVStream appelle la routine de répartition du processus d’épingle du minidriver lorsque de nouvelles images arrivent dans la file d’attente de broches.

Le traitement centré sur les filtres signifie qu’AVStream appelle la routine de répartition du processus de filtrage du minidriver quand des trames de données sont disponibles sur chaque broche instanciée. Notez que ces définitions spécifient le comportement par défaut ; les minidrivers peuvent modifier le comportement par défaut en définissant des indicateurs dans la structure KSPIN_DESCRIPTOR_EX .

En général, les filtres logiciels utilisent un traitement centré sur les filtres et les filtres matériels utilisent un traitement centré sur les broches. Par instance, le matériel qui transforme ou restitue des données peut acheminer les données sur un filtre centré sur les broches. Il existe de rares cas dans lesquels ces rôles peuvent être inversés.

Pour fournir un filtre centré sur les broches, le minidriver fournit un pointeur vers une routine de rappel AVStrMiniPinProcess dans chaque structure KSPIN_DISPATCH ; ne fournissent pas de répartiteur de traitement dans la structure KSFILTER_DISPATCH .

Si le minidriver ne modifie pas les paramètres d’indicateur dans la structure KSPIN_DESCRIPTOR_EX, AVStream appelle la routine de rappel AVStrMiniPinProcess fournie par le fournisseur dans trois situations :

  • La broche passe à l’état de traitement minimal. Les images doivent déjà exister dans la file d’attente, et la broche doit passer de moins de l’état de traitement minimal à l’état de traitement minimal.

  • De nouveaux cadres arrivent. La broche doit être dans au moins l’état de traitement minimal et il ne doit pas y avoir d’images au niveau ou devant le bord d’entrée.

  • Minidriver appelle explicitement KsPinAttemptProcessing.

Par défaut, la pause est l’état de traitement minimal.

De plus, AVStream n’appelle pas la répartition du processus d’épingle si la porte AND de la broche est fermée. Si vous utilisez les routines KSGATEXxx pour ajouter des entrées off supplémentaires à la porte AND de la broche, pour instance, la répartition de votre processus n’est pas appelée.

Quand AVStream appelle AVStrMiniPinProcess, il fournit un pointeur vers l’objet pin qui a des données disponibles. La répartition de traitement du minidriver peut ensuite acquérir un pointeur de bord de pointe en appelant KsPinGetLeadingEdgeStreamPointer. Les minidrivers manipulent ensuite les données de flux à l’aide de l’API de pointeur de flux .

Les mini-disques qui utilisent un traitement centré sur les broches peuvent être modifiés quand AVStream appelle la répartition AVStrMiniPinProcess en définissant des indicateurs dans la structure KSPIN_DESCRIPTOR_EX appropriée. Les descriptions des indicateurs sur la page de référence KSPIN_DESCRIPTOR_EX sont particulièrement pertinentes pour les fournisseurs qui implémentent des filtres centrés sur les broches.

Les tentatives de traitement peuvent échouer si le minidriver contient le mutex de traitement via KsPinAcquireProcessingMutex. Des problèmes peuvent également survenir si le minidriver manipule directement une porte à l’aide des appels KSGATE* .

L’exemple de pilote de matériel simulé AVStream (AVSHwS) dans les exemples du Kit de pilotes Windows est un pilote de capture centré sur les broches pour un élément de matériel simulé. L’exemple Avshws montre comment implémenter DMA via AVStream.