Freigeben über


USBCAMD2 Minidriver-Betrieb

Ein USBCAMD2 Kamera-Minidriver funktioniert im Allgemeinen wie folgt:

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.