Introduzione ai puntatori di flusso
Nel modello di classe di flusso precedente, il minidriver è responsabile della gestione delle proprie code SRB (Data Stream Request Block). AVStream fornisce questa funzionalità tramite l'astrazione del puntatore di flusso. Un puntatore di flusso è un riferimento a un frame di dati AVStream specifico.
I minidriver che usano l'elaborazione incentrata sui pin (la maggior parte dei driver hardware), usano puntatori di flusso per gestire le code dei pin. Ogni pin ha una coda indipendente di buffer di dati. Quando un pacchetto di dati arriva al pin (richiesta di lettura o scrittura), AVStream aggiunge il pacchetto alla coda e potrebbe chiamare l'invio del processo del pin.
I minidriver che usano l'elaborazione incentrata sui filtri non devono usare direttamente i puntatori di flusso. Per altre informazioni, vedere Elaborazione incentrata sui filtri .
Per impostazione predefinita, ogni coda ha un puntatore al flusso perimetrale iniziale. Facoltativamente, può avere un puntatore al flusso perimetrale finale se viene specificato il flag di arco finale. Il minidriver può creare nuovi puntatori di flusso chiamando KsStreamPointerClone.
È possibile spostare un puntatore di flusso in una sola direzione: in un frame più recente. Questa operazione viene chiamata avanzamento del puntatore del flusso.
Avanzamento di un puntatore di flusso
Quando si avanza un puntatore al flusso, spostarlo in un frame più recente o spostarlo in un numero di byte all'interno del frame corrente. Ad esempio, il minidriver può avanzare un puntatore di flusso dall'arrivo del primo fotogramma all'arrivo del secondo fotogramma.
Per avanzare un puntatore di flusso, un filtro incentrato sui pin può chiamare KsStreamPointerAdvance o KsStreamPointerUnlock con il parametro Eject impostato su TRUE.
Conteggi dei riferimenti ai frame
I fotogrammi con puntatori di flusso che puntano a essi vengono conteggiati, come sono fotogrammi che si trovano nella finestra tra i bordi iniziali e finali.
Al termine di un minidriver con un puntatore di flusso, può facoltativamente chiamare KsStreamPointerSetStatusCode per specificare un codice di errore con cui completare il pacchetto di richiesta di I/O specificato. Il minidriver deve quindi chiamare KsStreamPointerDelete. AVStream decrementa quindi il conteggio dei riferimenti nel frame a cui fa riferimento il puntatore di flusso eliminato in precedenza. Non è possibile eliminare i puntatori al flusso perimetrale iniziale e finale.