AVStream Allocators
Le pilote de classe AVStream utilise un allocateur pour allouer des mémoires tampons de données en unités appelées frames. Un frame est un bloc de mémoire continue, dont la taille est spécifiée par le fournisseur via le membre AllocatorFraming de KSPIN_DESCRIPTOR_EX.
Les minidrivers accèdent à ces mémoires tampons via l’API Pointeurs de flux ; appelez KsPinGetLeadingEdgeStreamPointer pour acquérir un pointeur dans le flux.
Les clients AVStream peuvent obtenir des informations sur les exigences de cadrage d’une broche à l’aide de la propriété en lecture seule KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX. Cette propriété retourne une structure de type KSALLOCATOR_FRAMING_EX qui décrivent les exigences de cadrage pour l’épingle.
Lorsque les données ne sont plus utilisées, AVStream utilise l’allocateur pour libérer la mémoire tampon.
AVStream fournit un allocateur par défaut. L’allocateur par défaut alloue de la mémoire du pool en fonction des exigences d’allocation que le minidriver fournit dans le membre AllocatorFraming de la structure KSPIN_DESCRIPTOR_EX .
Un fournisseur avec des exigences d’allocation spécifiques à l’appareil peut écrire un minidriver qui inclut ses propres routines d’allocation. Par exemple, vous pouvez fournir un allocateur si votre pilote alloue de la mémoire à partir d’une mémoire tampon DMA commune.
Pour fournir un allocateur, fournissez une structure KSALLOCATOR_DISPATCH qui contient des pointeurs vers les routines de rappel fournies par le fournisseur suivantes :
Fournissez un pointeur vers cette structure de répartition d’allocator dans le membre Allocator de la structure KSPIN_DISPATCH décrivant la broche pour laquelle cet allocateur instanciera les trames.
Fournissez un pointeur vers cette structure de distribution de broche dans le membre Dispatch de la structure KSPIN_DESCRIPTOR_EX correspondante. Pour en savoir plus sur les structures de répartition dans AVStream, consultez Tables de répartition AVStream.
Au moment de l’exécution, le gestionnaire de graphiques (par exemple, le module Proxy de streaming du noyau ) gère la sélection de l’allocateur. Il n’est pas garanti qu’un allocateur fourni par le fournisseur soit sélectionné par le gestionnaire de graphiques.
Un allocateur en mode noyau n’est choisi que si la connexion est en mode noyau. En outre, votre allocateur peut être rejeté en cas de non-correspondance entre les exigences d’allocation et les capacités de votre allocateur. Si votre allocateur n’est pas sélectionné, votre routine de rappel AVStrMiniInitializeAllocator n’est jamais appelée.
Consultez également Services DMA AVStream et Pointeurs de flux.