Allocatori AVStream
Il driver di classe AVStream usa un allocatore per allocare buffer di dati in unità denominate frame. Un frame è un blocco di memoria continua, la cui dimensione è specificata dal fornitore tramite il membro AllocatorFraming di KSPIN_DESCRIPTOR_EX.
I minidriver accedono a questi buffer tramite l'API Puntatori di flusso ; chiamare KsPinGetLeadingEdgeStreamPointer per acquisire un puntatore nel flusso.
I client AVStream possono ottenere informazioni sui requisiti di frame di un pin usando la proprietà di sola lettura KSPROPERTY_CONNECTION_ALLOCATORFRAMING_EX. Questa proprietà restituisce una struttura di tipo KSALLOCATOR_FRAMING_EX che descrivono i requisiti di frame per il pin.
Quando i dati non sono più in uso, AVStream usa l'allocatore per liberare il buffer.
AVStream fornisce un allocatore predefinito. L'allocatore predefinito alloca la memoria del pool in base ai requisiti dell'allocatore forniti dal minidriver nel membro AllocatorFraming della struttura KSPIN_DESCRIPTOR_EX .
Un fornitore con requisiti di allocazione specifici del dispositivo può scrivere un minidriver che include le proprie routine di allocazione. Ad esempio, è possibile fornire un allocatore se il driver alloca memoria da un buffer DMA comune.
Per fornire un allocatore, fornire una struttura KSALLOCATOR_DISPATCH che contiene puntatori alle routine di callback fornite dal fornitore seguenti:
Fornire un puntatore a questa struttura di invio allocatore nel membro Allocator della struttura KSPIN_DISPATCH che descrive il pin per il quale questo allocatore creerà un'istanza dei fotogrammi.
Specificare un puntatore a questa struttura di invio pin nel membro Dispatch della struttura di KSPIN_DESCRIPTOR_EX corrispondente. Per altre informazioni sulle strutture di invio in AVStream, vedere Tabelle dispatch AVStream.
In fase di esecuzione, graph manager (ad esempio, il modulo Kernel Streaming Proxy ) gestisce la selezione dell'allocatore. Non è garantito che un allocatore fornito dal fornitore sia selezionato dal gestore del grafo.
Un allocatore in modalità kernel viene scelto solo se la connessione è in modalità kernel. Inoltre, l'allocatore potrebbe essere rifiutato se si verifica una mancata corrispondenza nei requisiti dell'allocatore e nelle funzionalità dell'allocatore. Se l'allocatore non è selezionato, la routine di callback AVStrMiniInitializeAllocator non viene mai chiamata.
Vedere anche Servizi DMA AVStream e puntatori di flusso.