Condividi tramite


Scrittura di minidriver AVStream per l'hardware

Nei AVStrMiniDeviceStart forniti dal venditore, i minidriver AVStream che supportano l'hardware devono prima analizzare l'elenco delle risorse e quindi chiamare IoConnectInterrupt per registrare una routine di servizio dell'interrupt (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ù applicazioni potrebbero creare un grafico di filtro contemporaneamente usando il dispositivo, è necessario prestare attenzione per evitare interferenze tra i grafici. In particolare, se si crea un grafico in un'applicazione usando il dispositivo, non è necessario interferire con un'applicazione che usa il dispositivo in uno stato non di arresto.

È possibile evitare interferenze caricando microcodice dopo la transizione del grafico in KSSTATE_ACQUIRE. In questo modo verrà protetto un grafico attualmente in esecuzione perché un nuovo grafico non passerà a KSSTATE_ACQUIRE mentre è attualmente in esecuzione un altro grafico. Per ricevere la 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, è consigliabile caricare il microcodice prima che il grafico raggiunga KSSTATE_ACQUIRE. In questo caso, prendere in considerazione il caricamento di microcodice in un thread in background con priorità bassa durante l'avvio. Questa soluzione non interferisce con altre applicazioni, riduce l'ora di avvio del grafico e non dovrebbe aumentare il tempo di avvio se eseguito in modo asincrono.

Dopo l'avvio, tuttavia, non ricaricare il microcodice o modificare i registri hardware finché il grafico non raggiunge KSSTATE_ACQUIRE.

Per vedere come la connessione di un nuovo grafico può interferire con un grafico in esecuzione, prendere in considerazione 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 microcodice per la codifica al momento della connessione pin. Il grafico dei filtri comincia e l'hardware comincia la codifica.

Mentre l'hardware è in fase di codifica, un'altra applicazione inserisce un filtro di decodifica in un grafo di filtri. Quando i pin di decodifica sono connessi, prima che i pin cambino lo 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.