Condividi tramite


Porte di controllo del flusso in AVStream

AVStream usa i cancelli di logica come meccanismo di flusso di controllo. Ogni gate per la logica è rappresentato da una struttura KSGATE .

AVStream inizializza ogni filtro o pin con un singolo gate AND. Un minidriver può quindi usare questo meccanismo per determinare quando tale oggetto specifico può elaborare i dati. Per recuperare il gate di controllo di elaborazione per un pin, il minidriver chiama KsPinGetAndGate. Per recuperare il gate di controllo di elaborazione per un filtro, chiamare KsFilterGetAndGate.

Per creare nuovi gate di logica, il minidriver chiama KsGateInitializeAnd o KsGateInitializeOr. È possibile usare l'output di un gate come input per un altro gate, inoltrando le transizioni di stato. A tale scopo, specificare un parametro NextOrGate o NextAndGate in queste chiamate.

Per chiudere un input esistente a un gate per la logica, è possibile chiamare KsGateTurnInputOff. Il minidriver potrebbe effettuare questa chiamata per arrestare e chiudere un pin attivo o sospendere l'elaborazione per un periodo di tempo indefinito.

Analogamente, chiamare KsGateTurnInputOn per aprire un input esistente a un gate specifico.

Quando un thread è pronto per l'elaborazione, tenta di acquisire l'oggetto sull'input del gate AND che controlla l'elaborazione per l'oggetto di elaborazione. A tale scopo, il minidriver chiama KsGateCaptureThreshold.

Se il gate AND è aperto, AVStream disattiva un input al gate e l'elaborazione inizia. Poiché il gate è ora chiuso durante l'elaborazione, nessun altro thread può acquisire l'input del gate. Un solo thread può elaborare i dati alla volta.

Per controllare lo stato di un gate senza modificarlo, il minidriver può chiamare KsGateGetStateUnsafe. Si noti tuttavia che questa funzione non gestisce la sincronizzazione.

Per eliminare un gate della logica, chiamare KsGateTerminateAnd o KsGateTerminateOr. Il cancello che si elimina deve essere all'inizio di una catena di cancelli.

Per collegare un pin come input a un gate per la logica e quindi per connettere lo stesso gate di logica dell'input all'accesso AND di un filtro, chiamare KsPinAttachAndGate o KsPinAttachOrGate.

Determinazione dello stato del gate

Per un gate AND, il valore del membro Count della struttura KSGATE è un meno il numero di input disattivati :

Conteggio = 1 - (numero di input disattivati )

Se questo valore è minore o uguale a zero, il gate viene chiuso. Se questo valore è maggiore di zero, il gate è aperto.

Per un gate OR, il valore del membro Count di KSGATE è il numero di input al gate:

Count = ( numero di input )

Se questo valore è uguale a zero, il gate viene chiuso. Se Count è maggiore di zero, il cancello è aperto.

I cancelli AND hanno un intervallo di conteggio valido di uno o meno; I cancelli OR hanno un intervallo di conteggio valido pari a zero o maggiore. Non impostare Count su valori non validi; AVStream non verifica che un minidriver abbia impostato il gate su uno stato valido.