Un minidriver della fotocamera USBCAMD2 funziona in genere come segue:
Il minidriver della fotocamera chiama USBCAMD_DriverEntry dalla routine DriverEntry . Quando il minidriver chiama USBCAMD_DriverEntry, passa a USBCAMD2 la funzione di callback AdapterReceivePacket del minidriver. USBCAMD2 registra quindi il minidriver con il driver di classestream.sys .
Il minidriver della fotocamera può quindi ricevere vari blocchi di richiesta di flusso (SRB) nella relativa funzione di callback AdapterReceivePacket da gestire, tra cui:
Il minidriver della fotocamera determina come deve elaborare ogni SRB. Il minidriver può chiamare routine nella libreria minidriver USBCAMD2 per facilitare l'elaborazione di SRB. Queste routine iniziano in genere con il prefisso USBCAMD_ .
Ad esempio, per specificare le altre funzioni di callback della fotocamera con USBCAMD2, il minidriver della fotocamera specifica i punti di ingresso in una struttura USBCAMD_DEVICE_DATA2 . Il minidriver chiama quindi USBCAMD_InitializeNewInterface per passare la struttura USBCAMD_DEVICE_DATA2 inizializzata a USBCAMD2. USBCAMD2 chiama quindi le funzioni di callback del minidriver quando necessario.
Nota
La struttura USBCAMD_DEVICE_DATA è supportata in USBCAMD2 solo ai fini della compatibilità con le versioni precedenti.
Il minidriver deve chiamare USBCAMD_AdapterReceivePacket per inviare eventuali SRB che non gestisce a USBCAMD2 per l'elaborazione.
L'elenco seguente di procedure illustra il flusso generale di elaborazione per i srb inviati al minidriver della fotocamera:
Gestore SRB_INITIALIZE_DEVICE del minidriver
Componente
Azione
Minidriver fotocamera
Inizializzare USBCAMD2 chiamando USBCAMD_InitializeNewInterface, indicando i requisiti di elaborazione video o ancora non elaborati in modalità kernel, ad esempio abilitando gli eventi del dispositivo.
Acquisire descrittori di configurazione e dispositivo USB.
USBCAMD2
Chiamare la funzione di callback CamConfigureEx del minidriver.
Minidriver fotocamera
Completare la configurazione. Scegliere un'impostazione alternativa e la dimensione massima del trasferimento. Compilare la matrice di strutture USBCAMD_Pipe_Config_Descriptor .
USBCAMD2
Analizzare la matrice di strutture USBCAMD_Pipe_Config_Descriptor .
USBCAMD2
Chiamare la funzione di callback CamInitialize del minidriver.
Minidriver fotocamera
Completare l'inizializzazione. Impostare l'alimentazione del dispositivo e attivare l'impostazione predefinita nella fotocamera.
USBCAMD2
Specificare il numero di flussi e le dimensioni del descrittore di flusso al driver di classestream.sys .
Gestore SRB_GET_STREAM_INFO del minidriver
Componente
Azione
Minidriver fotocamera
Specificare la struttura delle informazioni sul flusso di HW_STREAM_INFORMATION al driver di classe stream.sys .
Minidriver fotocamera
Compilare il puntatore alla matrice di set di proprietà del dispositivo nella struttura HW_STREAM_HEADER del driver di classe stream.sys .
Verificare che la frequenza dei fotogrammi richiesta (VideoInfoHeader.AvgTimePerFrame) sia compresa nei limiti superiori e inferiori per il formato video richiesto. Se supera i limiti, il minidriver deve correggere i valori seguenti in pSrb-CommandData.IntersectInfo-Datarange>>: VideoInfoHeader.AvgTimePerFrame, VideoInfoHeader.dwBitRate.
Salvare il formato video accettato dal minidriver della fotocamera.
USBCAMD2
Chiamare la funzione di callback CamAllocateBandwidthEx del minidriver per allocare la larghezza di banda in base ai dati in formato video e ottenere le dimensioni massime del buffer per il formato video.
Minidriver fotocamera
Calcolare la dimensione massima del pacchetto del canale isocrona che soddisfa la frequenza dei fotogrammi richiesta e le dimensioni delle finestre di output.
Minidriver fotocamera
Scegliere l'impostazione alternativa più vicina chiamando USBCAMD_SelectAlternateInterface. Il minidriver deve fornire USBCAMD2 con la dimensione massima possibile del fotogramma che può essere prodotta dalla fotocamera.
Minidriver fotocamera
Impostare il ridimensionamento hardware sulla fotocamera. Impostare i controlli della fotocamera sui valori archiviati nel Registro di sistema o sull'impostazione predefinita se la prima volta.
Minidriver fotocamera
Assicurarsi che la frequenza dei fotogrammi (VideoInfoHeader.AvgTimePerFrame) rientra nei limiti per il formato video e correggerla in caso contrario.