Présentation des pointeurs de flux
Dans l’ancien modèle de classe de flux, le minidriver est responsable de la gestion de ses propres files d’attente de blocs de demandes de flux de données (SRB). AVStream fournit cette fonctionnalité via l’abstraction de pointeur de flux. Un pointeur de flux est une référence à une trame de données AVStream spécifique.
Les minidrivers qui utilisent un traitement centré sur les broches (la plupart des pilotes matériels) utilisent des pointeurs de flux pour gérer les files d’attente de broches. Chaque broche a une file d’attente indépendante de mémoires tampons de données. Lorsqu’un paquet de données arrive à la broche (demande de lecture ou d’écriture), AVStream ajoute le paquet à la file d’attente et peut appeler la répartition du processus de la broche.
Les mini-disques qui utilisent un traitement centré sur les filtres ne doivent pas utiliser directement les pointeurs de flux. Pour plus d’informations, consultez Traitement centré sur les filtres .
Par défaut, chaque file d’attente a un pointeur de flux de bord de pointe. Éventuellement, il peut avoir un pointeur de flux de bord de fin si l’indicateur de bord de fin est spécifié. Le minidriver peut créer de nouveaux pointeurs de flux en appelant KsStreamPointerClone.
Vous pouvez déplacer un pointeur de flux dans une seule direction : vers un cadre plus récent. C’est ce qu’on appelle l’avancement du pointeur de flux.
Progression d’un pointeur de flux
Lorsque vous avancez un pointeur de flux, vous le déplacez vers une image plus récente ou vous l’avancez sur un certain nombre d’octets dans son image actuelle. Par instance, le minidriver peut faire avancer un pointeur de flux de la première arrivée du cadre à la deuxième arrivée du cadre.
Pour faire avancer un pointeur de flux, un filtre centré sur les broches peut appeler KsStreamPointerAdvance ou KsStreamPointerUnlock avec le paramètre Eject défini sur TRUE.
Nombre de références d’images
Les images avec des pointeurs de flux pointant vers eux sont comptabilisées en référence, tout comme les images qui se trouvent dans la fenêtre entre les bords de début et de fin.
Lorsqu’un minidriver a terminé avec un pointeur de flux, il peut éventuellement appeler KsStreamPointerSetStatusCode pour spécifier un code d’erreur avec lequel effectuer le paquet de demande d’E/S (IRP) donné. Le minidriver doit ensuite appeler KsStreamPointerDelete. AVStream décrémente ensuite le nombre de références sur l’image précédemment référencée par le pointeur de flux supprimé. Les pointeurs de flux de bord avant et de fin ne peuvent pas être supprimés.