Freigeben über


USBCAMD2 Minidriver-Betrieb

Ein USBCAMD2-Kamera-Minidriver funktioniert in der Regel wie folgt:

Um beispielsweise die anderen Rückruffunktionen des Kamera-Minitreibers mit USBCAMD2 anzugeben, gibt der Kamera-Minitreiber deren Einstiegspunkte in einer USBCAMD_DEVICE_DATA2-Struktur an. Der Minidriver ruft dann USBCAMD_InitializeNewInterface auf, um die initialisierte USBCAMD_DEVICE_DATA2-Struktur an USBCAMD2 zu übergeben. USBCAMD2 ruft dann bei Bedarf die Rückruffunktionen des Minidrivers auf.

Hinweis

Die USBCAMD_DEVICE_DATA-Struktur wird in USBCAMD2 nur aus Gründen der Abwärtskompatibilität unterstützt.

Der Minitreiber muss USBCAMD_AdapterReceivePacket aufrufen, um srBs, die er nicht verarbeitet, an USBCAMD2 zu senden.

USBCAMD-Bibliotheksrückruffunktionen beschreiben die Rückruffunktionen, die der Minidriver implementiert, und ob sie optional oder erforderlich sind.

Die folgende Liste der Verfahren veranschaulicht den allgemeinen Verarbeitungsfluss für SRBs, die an den Kamera-Minitreiber gesendet werden:

SRB_INITIALIZE_DEVICE-Handler von Minidriver

Komponente Aktion
Kamera minidriver Initialisieren Sie USBCAMD2, indem Sie USBCAMD_InitializeNewInterface aufrufen, um video- oder noch unformatierte Verarbeitungsanforderungen im Kernelmodus anzugeben, z. B. das Aktivieren von Geräteereignissen.
Kamera minidriver Rufen Sie USBCAMD_AdapterReceivePacket auf.
USBCAMD2 Abrufen von USB-Geräte- und Konfigurationsdeskriptoren.
USBCAMD2 Rufen Sie die Rückruffunktion CamConfigureEx des Minidrivers auf.
Kamera minidriver Beenden Sie die Konfiguration. Wählen Sie eine alternative Einstellung und eine maximale Übertragungsgröße aus. Füllen Sie das Array mit USBCAMD_Pipe_Config_Descriptor Strukturen aus.
USBCAMD2 Analysieren Sie das Array der USBCAMD_Pipe_Config_Descriptor-Strukturen .
USBCAMD2 Rufen Sie die CamInitialize-Rückruffunktion des Minitreibers auf.
Kamera minidriver Schließen Sie die Initialisierung ab. Legen Sie die Geräteleistung fest, und aktivieren Sie die Standardeinstellung für die Kamera.
USBCAMD2 Geben Sie die Anzahl der Streams und die Streamdeskriptorgröße für denstream.sys-Klassentreiber an.

SRB_GET_STREAM_INFO-Handler von Minidriver

Komponente Aktion
Kamera minidriver Geben Sie die HW_STREAM_INFORMATION Datenstrominformationsstruktur für den stream.sys-Klassentreiber an.
Kamera minidriver Geben Sie den Zeiger auf das Array von Geräteeigenschaftensätzen in stream.sysHW_STREAM_HEADER-Struktur des Klassentreibers ein.
Kamera minidriver Rufen Sie USBCAMD_AdapterReceivePacket auf.
USBCAMD2 Geben Sie die Anzahl der Pins im Streamheader ein.
USBCAMD2 Machen Sie ggf. die Ereignistabelle des Geräts verfügbar.
USBCAMD2 Korrigieren von Eintragswerten in der Datenstrominformationstabelle. Legen Sie den Kategorienamen fest (aufnahme oder noch).
USBCAMD2 Geben Sie den Zeiger auf das Datenstromeigenschaftenarray ein.

SRB_INITIALIZATION_COMPLETE-Handler des Minidrivers

Komponente Aktion
Kamera minidriver Erwerben Sie GUID_USBCAMD_INTERFACE für USBCAMD2 mithilfe von IRP_MJ_PNP und IRP_MN_QUERY_INTERFACE.

SRB_GET_DEVICE_PROPERTY-Handler von Minidriver

Komponente Aktion
Kamera minidriver Ruft die Eigenschaften ab, die der Kamera-Minitreiber verarbeitet, z. B. PROPSETID_VIDCAP_VIDEOPROCAMP, PROPSETID_VIDCAP_CAMERACONTROL und PROPSETID_VIDCAP_VIDEOCONTROL sowie alle anderen benutzerdefinierten Eigenschaftensätze.

SRB_SET_DEVICE_PROPERTY-Handler von Minidriver

Komponente Aktion
Kamera minidriver Legen Sie die Eigenschaften fest, die der Kamera-Minitreiber verarbeitet, indem Sie die Parameter von PROPSETID_VIDCAP_VIDEOPROCAMP, PROPSETID_VIDCAP_CAMERACONTROL und PROPSETID_VIDCAP_VIDEOCONTROL sowie alle anderen benutzerdefinierten Eigenschaftensätze abrufen.

SRB_GET_DATA_INTERSECTION-Handler des Minidrivers

Komponente Aktion
Kamera minidriver Gibt eine KSDATAFORMAT-Struktur aus einer KSDATARANGE-Struktur zurück.
Kamera minidriver Überprüfen Sie, ob die angeforderte Bildfrequenz (VideoInfoHeader.AvgTimePerFrame) innerhalb der oberen und unteren Grenzwerte für das angeforderte Videoformat liegt. Wenn die Grenzwerte überschritten werden, sollte der Minidriver die folgenden Werte in pSrb-CommandData.IntersectInfo-Datarange>> korrigieren: VideoInfoHeader.AvgTimePerFrame, VideoInfoHeader.dwBitRate.

SRB_OPEN_STREAM-Handler von Minidriver

Komponente Aktion
Kamera minidriver Überprüfen Sie das Videoformat.
Kamera minidriver Rufen Sie USBCAMD_AdapterReceivePacket auf.
USBCAMD2 Speichern Sie das vom Kamera-Minidriver akzeptierte Videoformat.
USBCAMD2 Rufen Sie die Rückruffunktion CamAllocateBandwidthEx des Minidrivers auf, um Bandbreite basierend auf Videoformatdaten zuzuweisen und die maximale Puffergröße für das Videoformat zu erhalten.
Kamera minidriver Berechnen Sie die maximale Paketgröße des isochronen Kanals, die die angeforderte Framerate und Ausgabefenstergröße erfüllt.
Kamera minidriver Wählen Sie die nächstgelegene alternative Einstellung aus, indem Sie USBCAMD_SelectAlternateInterface aufrufen. Der Minidriver sollte USBCAMD2 mit der maximal möglichen Framegröße bereitstellen, die von der Kamera erzeugt werden kann.
Kamera minidriver Legen Sie die Hardwareskalierung auf der Kamera fest. Legen Sie die Kamerasteuerelemente auf die gespeicherten Werte in der Registrierung oder auf die Standardeinstellung fest, wenn sie zum ersten Mal verwendet werden.
Kamera minidriver Stellen Sie sicher, dass die Bildfrequenz (VideoInfoHeader.AvgTimePerFrame) innerhalb der Grenzwerte für das Videoformat liegt, und korrigieren Sie sie, wenn dies nicht der Fall ist.
USBCAMD2 Rufen Sie die Rückruffunktion CamStartCaptureEx des Minidrivers auf.
Kamera minidriver Legen Sie die Hardware auf den Erfassungsmodus fest.
USBCAMD2 Initialisieren Sie isochrone oder Massenübertragungen.

SRB_CLOSE_STREAM handler von Minidriver

Komponente Aktion
Kamera minidriver Rufen Sie USBCAMD_AdapterReceivePacket auf.
USBCAMD2 Abbrechen ausstehender IRPs, die an USBCAMD2 übermittelt werden. Geben Sie alle ausstehenden Daten-SRBs an den stream.sys Klassentreiber zurück.
USBCAMD2 Rufen Sie die Rückruffunktion CamStopCaptureEx des Minidrivers auf.
Kamera minidriver Senden Sie einen Stop-Capture-Befehl an die Kamera.
USBCAMD2 Rufen Sie die Rückruffunktion CamFreeBandwidthEx des Minidrivers auf, um ggf. isochrone Busbandbreite frei zu machen.
Kamera minidriver Wählen Sie eine alternative Einstellung im Leerlauf aus.
USBCAMD2 Kostenlose Ressourcen, die USB-Pipes zugeordnet sind.

Minidriver-SRB_UNINITIALIZE_DEVICE-Handler

Komponente Aktion
Kamera minidriver Rufen Sie USBCAMD_AdapterReceivePacket auf.
USBCAMD2 Wenn Datenströme noch geöffnet sind, schließen Sie sie, indem Sie die Rückruffunktionen CamStopCaptureEx und CamFreeBandwidthEx des Minidrivers für jeden Stream aufrufen.
USBCAMD2 Rufen Sie die Rückruffunktion CamUnInitialize des Minitreibers auf.
Kamera minidriver Bereinigen und Freigeben von Ressourcen.

SRB_SURPRISE_REMOVAL-Handler von Minidriver

Komponente Aktion
Kamera minidriver Rufen Sie USBCAMD_AdapterReceivePacket auf.
USBCAMD2 Brechen Sie ausstehende Daten-SRBs ab, und geben Sie die SRBs mit STATUS_CANCELLED zurück.
USBCAMD2 Rufen Sie die Rückruffunktionen CamStopCaptureEx und CamFreeBandwidthEx des Minidrivers für alle geöffneten Streams auf.
USBCAMD2 Gibt STATUS_CANCELLED für alle Lese-/Schreib-SRBs zurück, die nach SRB_SURPRISE_REMOVAL ausgefallen sind.

SRB_SET_DATA_FORMAT-Handler von Minidriver

Komponente Aktion
Kamera minidriver Überprüfen Sie das neue Videoformat.
Kamera minidriver Rufen Sie USBCAMD_SetVideoFormat auf.
USBCAMD2 Speichern Sie das neue Format mit der zugeordneten Streamerweiterung.

Minidriver-SRB_CHANGE_POWER_STATE vom Ein- zum Ausschalten des Handlers

Komponente Aktion
Kamera minidriver Rufen Sie USBCAMD_AdapterReceivePacket auf.
USBCAMD2 Beenden Sie das Streaming auf isochroner Pipe, falls zutreffend, oder brechen Sie ausstehende Massen- oder Unterbrechungsübertragungen ab.
USBCAMD2 Rufen Sie die Rückruffunktion CamStopCaptureEx des Minidrivers auf.
Kamera minidriver Senden sie den Befehl zum Beenden der Erfassung an die Hardware.

Minidriver-SRB_CHANGE_POWER_STATE von Power OFF zum Power ON-Handler

Komponente Aktion
Kamera minidriver Rufen Sie USBCAMD_AdapterReceivePacket auf.
USBCAMD2 Starten Sie das Streaming ggf. über isochrone Pipe neu, oder übermitteln Sie die Massen- oder Interruptübertragung erneut an die USB-Klasse.
Kamera minidriver Wiederherstellen der Kameraeinstellungen und des Stromverbrauchs der Kamera auf normale Werte.
USBCAMD2 Rufen Sie die Rückruffunktion CamStopCaptureEx des Minidrivers auf.
USBCAMD2 Rufen Sie die Rückruffunktion CamStartCaptureEx des Minidrivers auf.