Dela via


AVStream-allokerare

AVStream-klassdrivrutinen använder en Allokerare för att allokera databuffertar i enheter som kallas ramar. En ram är ett segment av kontinuerligt minne, vars storlek anges av leverantören via AllocatorFraming-medlemmen i KSPIN_DESCRIPTOR_EX.

Minidrivrutiner får åtkomst till dessa buffertar via API:et Stream Pointers; Anropa KsPinGetLeadingEdgeStreamPointer för att hämta en pekare till strömmen.

AVStream-klienter kan hämta information om inramningskraven för en pin-kod med hjälp av den skrivskyddade egenskapen KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX. Den här egenskapen returnerar en struktur av typen KSALLOCATOR_FRAMING_EX som beskriver inramningskraven för pin-koden.

När data inte längre används använder AVStream allokeraren för att frigöra bufferten.

AVStream tillhandahåller en standardallokerare. Standardallokeraren allokerar poolminne baserat på de allokeringskrav som minidrivrutinen tillhandahåller i AllocatorFraming-medlemmen av KSPIN_DESCRIPTOR_EX strukturen.

En leverantör med enhetsspecifika allokeringskrav kan skriva en minidrivrutin som inkluderar egna allokeringsrutiner. Du kan till exempel ange en allokerare om drivrutinen allokerar minne från en gemensam DMA-buffert.

Ange en allokerare genom att ange en KSALLOCATOR_DISPATCH struktur som innehåller pekare till följande återanropsrutiner som tillhandahålls av leverantören:

Ange en pekare till den här allokeringsstrukturen i Allocator-medlemmen i KSPIN_DISPATCH-strukturen, som beskriver pinnen för vilken den här allokeraren instansierar ramar.

Ange en pekare till den här pin-dispatchstrukturen i Dispatch-medlemmen i den motsvarande KSPIN_DESCRIPTOR_EX strukturen. Mer information om leveransstrukturer i AVStream finns i AVStream Dispatch-tabeller.

Vid körning hanterar grafhanteraren (till exempel Kernel Streaming Proxy-modulen) valet av allokerare. En allokerare som tillhandahålls av leverantören är inte garanterad att väljas av grafhanteraren.

En kärnläge-allokerare väljs endast om anslutningen är i kärnläge. Dessutom kan din tilldelare avvisas om det finns ett matchningsfel i tilldelningskraven och tilldelarens kapaciteter. Om allokeraren inte har valts anropas aldrig din avStrMiniInitializeAllocator-återanropsrutin .

Se även AVStream DMA Services och Stream Pointers.