Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein USBCAMD2-Kamera-Minidriver funktioniert in der Regel wie folgt:
Der Kamera-Minidriver ruft USBCAMD_DriverEntry aus seiner DriverEntry-Routine auf. Wenn der Minitreiber USBCAMD_DriverEntry aufruft, übergibt er an USBCAMD2 die Rückruffunktion AdapterReceivePacket des Minitreibers. USBCAMD2 registriert dann den Minidriver beim stream.sys Klassentreiber.
Der Kamera-Minidriver kann dann verschiedene Stream Request-Blöcke (SRBs) in seiner AdapterReceivePacket-Rückruffunktion empfangen, um sie zu verarbeiten, einschließlich:
Der Kamera-Minitreiber bestimmt, wie die einzelnen SRB verarbeitet werden müssen. Der Minidriver kann Routinen in der USBCAMD2-Minitreiberbibliothek aufrufen, um die Verarbeitung von SRBs zu unterstützen. Diese Routinen beginnen in der Regel mit dem präfix USBCAMD_ .
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. |