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 im Allgemeinen wie folgt:
Der Kamera-Minidriver ruft USBCAMD_DriverEntry aus seiner DriverEntry-Routine auf. Wenn der Minidriver USBCAMD_DriverEntry aufruft, wird er an USBCAMD2 die AdapterReceivePacket-Rückruffunktion des Minidrivers übergeben. USBCAMD2 registriert dann den Minidriver beim stream.sys Class-Treiber.
Der Kamera-Minidriver kann dann verschiedene Datenstromanforderungsblöcke (SRBs) in seiner AdapterReceivePacket-Rückruffunktion empfangen, die verarbeitet werden können, einschließlich:
Der Kamera-Minidriver bestimmt, wie er jeden SRB verarbeiten muss. Der Minidriver kann Routinen in der USBCAMD2 Minidriver-Bibliothek 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-Minidrivers mit USBCAMD2 anzugeben, gibt der Kamera-Minidriver ihre 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 nur aus Gründen der Abwärtskompatibilität in USBCAMD2 unterstützt.
Der Minidriver muss USBCAMD_AdapterReceivePacket aufrufen, um alle SRBs, die er nicht verarbeitet, an USBCAMD2 zur Verarbeitung zu senden.
USBCAMD Library Callback Functions 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-Minidriver gesendet werden:
SRB_INITIALIZE_DEVICE-Handler von Minidriver
| Komponente | Maßnahme |
|---|---|
| Kamera-Mini-Treiber | Initialisieren Sie USBCAMD2, indem Sie USBCAMD_InitializeNewInterface aufrufen, wobei Video- oder Rohverarbeitungsanforderungen im Kernelmodus angegeben werden, z. B. das Aktivieren von Geräteereignissen. |
| Kamera-Minitreiber | Rufen Sie USBCAMD_AdapterReceivePacket auf. |
| USBCAMD2 | Erwerben Sie USB-Geräte- und Konfigurationsdeskriptoren. |
| USBCAMD2 | Rufen Sie die CamConfigureEx-Rückruffunktion des Minidrivers auf. |
| Kamera-Minitreiber | Schließen Sie die Konfiguration ab. Wählen Sie eine alternative Einstellung und maximale Übertragungsgröße aus. Füllen Sie das Array von USBCAMD_Pipe_Config_Descriptor Strukturen aus. |
| USBCAMD2 | Analysieren Sie das Array von USBCAMD_Pipe_Config_Descriptor Strukturen. |
| USBCAMD2 | Rufen Sie die CamInitialize-Rückruffunktion des Minidrivers auf. |
| Kamera-Minidriver | Schließen Sie die Initialisierung ab. Legen Sie die Geräteleistung fest, und aktivieren Sie die Standardeinstellung auf der Kamera. |
| USBCAMD2 | Stellen Sie die Anzahl der Datenströme und die Datenstromdeskriptorgröße für den stream.sys Klassentreiber bereit. |
SRB_GET_STREAM_INFO-Handler von Minidriver
| Komponente | Maßnahme |
|---|---|
| Kamera-Mini-Treiber | Stellen Sie die HW_STREAM_INFORMATION Datenstrominformationsstruktur für den stream.sys Klassentreiber bereit. |
| Kamera Minidriver | Fügen Sie den Zeiger auf das Array von Geräteeigenschaftensätzen in der Struktur stream.sys des Klassentreibers des HW_STREAM_HEADER ein. |
| Kamera-Minidriver | Rufen Sie USBCAMD_AdapterReceivePacket auf. |
| USBCAMD2 | Geben Sie die Anzahl der Pins im Datenstromheader ein. |
| USBCAMD2 | Machen Sie ggf. die Geräteereignistabelle verfügbar. |
| USBCAMD2 | Korrigieren von Einträgen in der Datenstrominformationstabelle. Festlegen des Kategorienamens (Aufnahme oder still). |
| USBCAMD2 | Setzen Sie den Zeiger auf das Array der Stream-Eigenschaften. |
Der SRB_INITIALIZATION_COMPLETE-Handler des Minidriver
| Komponente | Maßnahme |
|---|---|
| Kamera-Mini-Treiber | Erwerben Sie GUID_USBCAMD_INTERFACE für USBCAMD2 mithilfe von IRP_MJ_PNP und IRP_MN_QUERY_INTERFACE. |
SRB_GET_DEVICE_PROPERTY-Handler des Minidriver
| Komponente | Maßnahme |
|---|---|
| Kamera-Minitreiber | Rufen Sie die Eigenschaften ab, die der Kamera-Minidriver behandelt, 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 | Maßnahme |
|---|---|
| Kamera-Minidriver | Legen Sie die Eigenschaften fest, die der Kamera-Minidriver verwaltet, indem Sie die Parameter der PROPSETID_VIDCAP_VIDEOPROCAMP, PROPSETID_VIDCAP_CAMERACONTROL und PROPSETID_VIDCAP_VIDEOCONTROL sowie alle anderen benutzerdefinierten Eigenschaftensätze abrufen. |
SRB_GET_DATA_INTERSECTION-Handler von Minidriver
| Komponente | Maßnahme |
|---|---|
| Kamera-Minitreiber | Gibt eine KSDATAFORMAT-Struktur aus einer KSDATARANGE-Struktur zurück. |
| Kamera-Minidriver | Überprüfen Sie, ob die angeforderte Framerate (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. |
Der SRB_OPEN_STREAM-Handler des Minidriver
| Komponente | Maßnahme |
|---|---|
| Kamera-Minidriver | Überprüfen Sie das Videoformat. |
| Kamera-Mini-Treiber | Rufen Sie USBCAMD_AdapterReceivePacket auf. |
| USBCAMD2 | Speichern Sie das vom Kamera-Minidriver akzeptierte Videoformat. |
| USBCAMD2 | Rufen Sie die CamAllocateBandwidthEx-Rückruffunktion des Minidrivers auf, um Bandbreite basierend auf Videoformatdaten zuzuweisen und die maximale Puffergröße für das Videoformat abzurufen. |
| Kamera-Minitreiber | Berechnen Sie die maximale Paketgröße des isochronen Kanals, die die angeforderte Framerate und Ausgabefenstergröße erfüllt. |
| Kamera-Mini-Treiber | Wählen Sie die nächstgelegene alternative Einstellung aus, indem Sie USBCAMD_SelectAlternateInterface aufrufen. Der Minidriver sollte USBCAMD2 die größtmögliche Framegröße zur Verfügung stellen, die von der Kamera produziert werden kann. |
| Kamera Minidriver | Legen Sie die Hardwareskalierung auf der Kamera fest. Stellen Sie die Kamerasteuerelemente auf die in der Registrierung gespeicherten Werte oder auf die Standardeinstellung ein, falls es das erste Mal ist. |
| Kamera-Minidriver | Stellen Sie sicher, dass die Framerate (VideoInfoHeader.AvgTimePerFrame) in die Grenzwerte für das Videoformat fällt, und korrigieren Sie sie, wenn dies nicht der Fall ist. |
| USBCAMD2 | Rufen Sie die CamStartCaptureEx-Rückruffunktion des Minidrivers auf. |
| Kamera-Mini-Treiber | Legen Sie die Hardware für den Aufnahmemodus fest. |
| USBCAMD2 | Initialisieren Sie isochrone oder Massenübertragungen. |
SRB_CLOSE_STREAM-Handler von Minidriver
| Komponente | Maßnahme |
|---|---|
| Kamera-Minidriver | Rufen Sie USBCAMD_AdapterReceivePacket auf. |
| USBCAMD2 | Abbrechen ausstehender IRPs, die an USBCAMD2 übermittelt werden. Gibt alle ausstehenden Daten-SRBs an den stream.sys Klassentreiber zurück. |
| USBCAMD2 | Rufen Sie die CamStopCaptureEx-Rückruffunktion des Minidrivers auf. |
| Kamera-Minidriver | Senden Sie einen Stoppaufnahmebefehl an die Kamera. |
| USBCAMD2 | Rufen Sie die CamFreeBandwidthEx-Rückruffunktion des Minidrivers auf, um ggf. isochrone Busbandbandbreite frei zu geben. |
| Kamera-Minidriver | Wählen Sie eine alternative Einstellung im Leerlauf aus. |
| USBCAMD2 | Kostenlose Ressourcen, die mit USB-Rohren verbunden sind. |
SRB_UNINITIALIZE_DEVICE-Handler von Minidriver
| Komponente | Maßnahme |
|---|---|
| Kamera-Minidriver | Rufen Sie USBCAMD_AdapterReceivePacket auf. |
| USBCAMD2 | Wenn datenströme weiterhin geöffnet sind, schließen Sie sie, indem Sie die CamStopCaptureEx - und CamFreeBandwidthEx-Rückruffunktionen des Minidrivers für jeden Datenstrom aufrufen. |
| USBCAMD2 | Rufen Sie die CamUnInitialize-Rückruffunktion des Minidrivers auf. |
| Kamera-Minidriver | Bereinigen und Freigeben von Ressourcen. |
SRB_SURPRISE_REMOVAL-Handler von Minidriver
| Komponente | Maßnahme |
|---|---|
| Kamera-Minidriver | Rufen Sie USBCAMD_AdapterReceivePacket auf. |
| USBCAMD2 | Abbrechen ausstehender Daten-SRBs und Zurückgeben der SRBs mit STATUS_CANCELLED. |
| USBCAMD2 | Rufen Sie die CamStopCaptureEx - und CamFreeBandwidthEx-Rückruffunktionen des Minidrivers für alle geöffneten Datenströme auf. |
| USBCAMD2 | Gibt STATUS_CANCELLED für alle SRBs zurück, die nach SRB_SURPRISE_REMOVAL eintreffen. |
Minidrivers SRB_SET_DATA_FORMAT-Handler
| Komponente | Maßnahme |
|---|---|
| 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. |
Die SRB_CHANGE_POWER_STATE von Minidriver von Power ON zu Power OFF-Handler
| Komponente | Maßnahme |
|---|---|
| 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 CamStopCaptureEx-Rückruffunktion des Minidrivers auf. |
| Kamera-Minidriver | Befehl zum Beenden der Aufnahme an die Hardware senden. |
Der SRB_CHANGE_POWER_STATE-Handler des Minidriver beim Übergang von Power OFF zu Power ON
| Komponente | Maßnahme |
|---|---|
| Kamera-Minidriver | Rufen Sie USBCAMD_AdapterReceivePacket auf. |
| USBCAMD2 | Starten Sie das Streaming im isochonen Datenstrom neu, falls zutreffend, oder übermitteln Sie die Massen- oder Interrupt-Übertragung erneut an die USB-Schnittstelle. |
| Kamera-Minidriver | Stellen Sie Kameraeinstellungen und Kameraenergieverbrauch auf normale Ebenen wieder her. |
| USBCAMD2 | Rufen Sie die CamStopCaptureEx-Rückruffunktion des Minidrivers auf. |
| USBCAMD2 | Rufen Sie die CamStartCaptureEx-Rückruffunktion des Minidrivers auf. |