Condividi tramite


Operazione minidriver USBCAMD2

Un minidriver della fotocamera USBCAMD2 funziona in genere come segue:

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.

Le funzioni di callback della libreria USBCAMD descrivono le funzioni di callback implementate dal minidriver e se sono facoltative o necessarie.

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.
Minidriver fotocamera Chiamare USBCAMD_AdapterReceivePacket.
USBCAMD2 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 .
Minidriver fotocamera Chiamare USBCAMD_AdapterReceivePacket.
USBCAMD2 Immettere il numero di pin nell'intestazione del flusso.
USBCAMD2 Esporre la tabella eventi del dispositivo, se presente.
USBCAMD2 Correggere i valori delle voci nella tabella delle informazioni sul flusso. Impostare il nome della categoria (acquisizione o ancora).
USBCAMD2 Compilare il puntatore alla matrice di proprietà del flusso.

Gestore SRB_INITIALIZATION_COMPLETE del minidriver

Componente Azione
Minidriver fotocamera Acquisire GUID_USBCAMD_INTERFACE per USBCAMD2 usando IRP_MJ_PNP e IRP_MN_QUERY_INTERFACE.

Gestore SRB_GET_DEVICE_PROPERTY del minidriver

Componente Azione
Minidriver fotocamera Ottenere le proprietà gestite dal minidriver della fotocamera, ad esempio PROPSETID_VIDCAP_VIDEOPROCAMP, PROPSETID_VIDCAP_CAMERACONTROL e PROPSETID_VIDCAP_VIDEOCONTROL, nonché qualsiasi altro set di proprietà personalizzato.

Gestore SRB_SET_DEVICE_PROPERTY del minidriver

Componente Azione
Minidriver fotocamera Impostare le proprietà gestite dal minidriver della fotocamera acquisendo i parametri di PROPSETID_VIDCAP_VIDEOPROCAMP, PROPSETID_VIDCAP_CAMERACONTROL e PROPSETID_VIDCAP_VIDEOCONTROL e qualsiasi altro set di proprietà personalizzate.

Gestore SRB_GET_DATA_INTERSECTION del minidriver

Componente Azione
Minidriver fotocamera Restituisce una struttura KSDATAFORMAT da una struttura KSDATARANGE .
Minidriver fotocamera 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.

Gestore SRB_OPEN_STREAM del minidriver

Componente Azione
Minidriver fotocamera Verificare il formato video.
Minidriver fotocamera Chiamare USBCAMD_AdapterReceivePacket.
USBCAMD2 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.
USBCAMD2 Chiamare la funzione di callback CamStartCaptureEx del minidriver.
Minidriver fotocamera Impostare l'hardware per la modalità di acquisizione.
USBCAMD2 Inizializzare il trasferimento in blocco o isochronous.

Gestore SRB_CLOSE_STREAM del minidriver

Componente Azione
Minidriver fotocamera Chiamare USBCAMD_AdapterReceivePacket.
USBCAMD2 Annullare i runtime di integrazione in sospeso inviati a USBCAMD2. Restituisce eventuali SBS di dati in sospeso al driver di classestream.sys .
USBCAMD2 Chiamare la funzione di callback CamStopCaptureEx del minidriver.
Minidriver fotocamera Inviare un comando stop-capture alla fotocamera.
USBCAMD2 Chiamare la funzione di callback CamFreeBandwidthEx del minidriver per liberare la larghezza di banda del bus isocrona, se applicabile.
Minidriver fotocamera Selezionare un'impostazione alternativa inattiva.
USBCAMD2 Risorse gratuite associate alle pipe USB.

Gestore SRB_UNINITIALIZE_DEVICE del minidriver

Componente Azione
Minidriver fotocamera Chiamare USBCAMD_AdapterReceivePacket.
USBCAMD2 Se sono ancora aperti flussi, chiuderli chiamando le funzioni di callback camStopCaptureEx e CamFreeBandwidthEx del minidriver per ogni flusso.
USBCAMD2 Chiamare la funzione di callback CamUnInitialize del minidriver.
Minidriver fotocamera Pulire e liberare risorse.

Gestore SRB_SURPRISE_REMOVAL del minidriver

Componente Azione
Minidriver fotocamera Chiamare USBCAMD_AdapterReceivePacket.
USBCAMD2 Annullare i srb di dati in sospeso e restituire i srb con STATUS_CANCELLED.
USBCAMD2 Chiamare le funzioni di callback CamStopCaptureEx e CamFreeBandwidthEx di minidriver in tutti i flussi aperti.
USBCAMD2 Restituisce STATUS_CANCELLED su eventuali SRB di lettura/scrittura che vengono disattivati dopo SRB_SURPRISE_REMOVAL.

Gestore SRB_SET_DATA_FORMAT del minidriver

Componente Azione
Minidriver fotocamera Verificare il nuovo formato video.
Minidriver fotocamera Chiamare USBCAMD_SetVideoFormat.
USBCAMD2 Salvare il nuovo formato con l'estensione del flusso associata.

SRB_CHANGE_POWER_STATE del minidriver da Power ON al gestore Power OFF

Componente Azione
Minidriver fotocamera Chiamare USBCAMD_AdapterReceivePacket.
USBCAMD2 Arrestare lo streaming nella pipe isocrona, se applicabile, oppure annullare trasferimenti bulk o interrupt in sospeso.
USBCAMD2 Chiamare la funzione di callback CamStopCaptureEx del minidriver.
Minidriver fotocamera Inviare il comando arresta acquisizione all'hardware.

SRB_CHANGE_POWER_STATE del minidriver da Power OFF al gestore di alimentazione

Componente Azione
Minidriver fotocamera Chiamare USBCAMD_AdapterReceivePacket.
USBCAMD2 Riavviare lo streaming nella pipe isochronous, se applicabile, oppure inviare di nuovo il trasferimento bulk o interrupt alla classe USB.
Minidriver fotocamera Ripristinare le impostazioni della fotocamera e il consumo di energia della fotocamera ai livelli normali.
USBCAMD2 Chiamare la funzione di callback CamStopCaptureEx del minidriver.
USBCAMD2 Chiamare la funzione di callback CamStartCaptureEx del minidriver.