Condividi tramite


Scrittura di minidriver AVStream per hardware

Nei minidriver AVStrMiniDeviceStart forniti dal fornitore, i minidriver AVStream che supportano l'hardware devono prima analizzare l'elenco di risorse e quindi chiamare IoConnectInterrupt per registrare una routine del servizio di interruzione (ISR).

Sono necessari passaggi aggiuntivi se il driver supporta l'accesso diretto alla memoria (DMA). Se il driver implementa DMA, vedere AVStream DMA Services.

Se più di un'applicazione potrebbe creare un grafico di filtro contemporaneamente usando il dispositivo, è necessario prestare attenzione a evitare l'interferenza tra i grafici. In particolare, se si costruisce un grafico in un'applicazione usando il dispositivo, non è necessario interferire con un'applicazione che usa il dispositivo in uno stato non stop.

È possibile evitare l'interferenza caricando microcode dopo la transizione del grafico in KSSTATE_ACQUIRE. Questo proteggerà un grafico attualmente in esecuzione perché un nuovo grafico non passerà a KSSTATE_ACQUIRE mentre un altro grafico è attualmente in esecuzione. Per ricevere una notifica delle modifiche dello stato del pin, specificare una routine di callback AVStrMiniPinSetDeviceState nella struttura KSPIN_DISPATCH .

Per ridurre al minimo il tempo di avvio del grafico, tuttavia, è possibile caricare microcodice prima che il grafico raggiunga KSSTATE_ACQUIRE. In questo caso, prendere in considerazione il caricamento di microcode in un thread in background con priorità bassa durante l'avvio. Questa soluzione non interferisce con altre applicazioni, riduce l'ora di inizio del grafo e non deve aumentare il tempo di avvio se eseguito in modo asincrono.

Dopo l'avvio, tuttavia, non ricaricare i registri hardware o modificare i registri hardware fino a quando il grafico raggiunge KSSTATE_ACQUIRE.

Per vedere come la connessione di un nuovo grafico può interferire con un grafico in esecuzione, considerare un dispositivo di acquisizione video che supporta la codifica e la decodifica, ma esegue solo una di queste attività alla volta. Il minidriver espone un filtro di codifica e un filtro di decodifica.

Un'applicazione compila un grafico di filtro contenente il filtro di codifica. Il minidriver carica il microcode per la codifica al momento della connessione del pin. Il grafico del filtro inizia e l'hardware inizia la codifica.

Mentre l'hardware sta codificando, un'altra applicazione inserisce un filtro decodifica in un grafico di filtro. Quando i pin di decodifica sono connessi, prima che i pin cambino stato in KSSTATE_ACQUIRE, il minidriver tenta di configurare l'hardware per la decodifica. Questa riconfigurazione interferisce con il grafico con codifica attualmente attiva e può causare un'instabilità del driver.