Condividi tramite


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à attraverso l'astrazione del puntatore di flusso. Un puntatore di flusso è un riferimento a un frame di dati AVStream specifico.

I minidriver che usano elaborazione pin-centrica (la maggior parte dei driver hardware), usano i puntatori ai flussi per gestire le code di pin. Ogni pin ha una coda indipendente di buffer di dati. Quando un pacchetto di dati arriva al pin (una richiesta di lettura o scrittura), AVStream aggiunge il pacchetto alla coda e potrebbe chiamare il processo di gestione del pin.

I minidriver che usano l'elaborazione basata su filtri non dovrebbero usare direttamente i puntatori di flusso. Per ulteriori informazioni, vedere l'elaborazione incentrata sul filtro .

Per impostazione predefinita, ogni coda ha un puntatore di flusso perimetrale iniziale. Facoltativamente, può avere un puntatore di flusso del bordo di uscita se è specificato il flag di bordo di uscita. Il minidriver può creare nuovi puntatori di flusso chiamando KsStreamPointerClone.

È possibile spostare un puntatore di flusso in una sola direzione: verso un frame più recente. Questa operazione viene chiamata avanzamento del puntatore di flusso.

Avanzamento di un puntatore di flusso

Quando si avanza un puntatore di flusso, lo si sposta a un frame successivo o si avanza di un certo 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 far 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 frame con puntatori di flusso che puntano a essi sono conteggiati, così come i frame che si trovano nella finestra tra il bordo iniziale e quello finale.

Quando un minidriver ha finito di utilizzare un puntatore di flusso, può facoltativamente chiamare KsStreamPointerSetStatusCode per specificare un codice di errore con cui completare il dato pacchetto di richiesta I/O. Il minidriver deve quindi chiamare KsStreamPointerDelete. AVStream decrementa quindi il conteggio dei riferimenti sul frame a cui fa riferimento il puntatore di flusso eliminato in precedenza. Non è possibile eliminare i puntatori di flusso perimetrali iniziali e finali.