Freigeben über


Ersatzbild für Sichtschutzblende

In diesem Artikel wird erläutert, wie Sie den Bildaustausch für eine Kamera aktivieren, die das Melden des Verschlussstatus unterstützt. Außerdem wird beschrieben, wie ein benutzerdefiniertes Ersatzimage bereitgestellt wird.

Kameratreiber, die vor dieser Feature-Implementierung Privatsphäreabdeckungen/-schalter hatten, lieferten entweder Proben vom Kamerasensor oder müssen eine proprietäre Funktionalität implementieren, um den Verschlusszustand zu erkennen und die Probe selbst zu ersetzen. Dieses Feature ermöglicht es dem Kameratreiber, sich auf das Betriebssystem zu verlassen, um das Bild im Muster durch entweder eine vom Betriebssystem bereitgestellte Lösung oder ein individuell bereitgestelltes Bild vom Kameratreiber ersetzen zu lassen.

Ab Windows 11, Version 21H2, erfordert das Windows-Hardwarekompatibilitätsprogramm (WHCP) Kameras, die mit Datenschutzverschlüssen oder Kippschaltern ausgestattet sind, den Zustand des Kameraverschlusses zu melden. Diese Anforderung ermöglicht es dem Betriebssystem und den Anwendungen, den aktuellen Zustand des Verschlusses zu kennen und wird verwendet, um hilfreiche Benutzeranleitungen zum Ändern des Zustands des Verschlusses bereitzustellen. OEM-Partner verwenden diesen Mechanismus, um Funktionen in ihre Treiber zu integrieren, um das Bild von der Kamera durch etwas zu ersetzen, das für die Benutzer informativ ist. Dieses Feature ermöglicht es einem OEM, diese Funktionalität zu nutzen, ohne proprietären Code in einem DeviceMFT schreiben zu müssen.

Anforderungen

Dieses Feature wird nur von Kameras implementiert, die über einen Verschluss oder Ausschalter verfügen. Implementierungsdetails für Datenschutzabdeckungen werden im Artikel „Privacy shutter/switch notification“ beschrieben.

Geräte, die ein benutzerdefiniertes Image für die Bildersetzung unterstützen möchten, müssen auch eine signierte Binärdatei bereitstellen, einen Teil ihres Treiberpakets, das ihr Ersatzimage enthält.

Da die Bild-Ersetzung den vorhandenen Ausgabepuffer überschreibt, gibt das Gerät unkomprimierte Frames aus. Bei komprimierten Frames wie MJPEG und JPEG erfolgt kein Austausch von Bildern, und es wird stattdessen das Originalbild vom Treiber bereitgestellt.

Übersicht zur Umsetzung

Die Bildaktualisierung tritt auf, wenn ein Gerät die Benachrichtigung sendet, dass der Verschluss geschlossen ist. Wenn der Verschlusszustand geschlossen ist und die Bildersetzung aktiviert ist, lädt die Kamerapipeline das Ersatzbild, entweder aus einem benutzerdefinierten Bild, das vom Kameratreiber bereitgestellt wird, oder mithilfe des hier gezeigten Ersatzbilds für den Posteingang.

Ersatzbild für den Posteingang.

Beim Laden übersetzt die Pipeline das Bild in einen Ausgabepuffer, der mit der gleichen Auflösung und demselben Medientyp des aktuell ausgewählten Medientyps des Kameratreibers übereinstimmt. Wenn sich die Auflösungen unterscheiden, wird das Bild nach oben oder unten skaliert, aber nicht außerhalb des vorhandenen Seitenverhältnisses gestreckt.

Von diesem Punkt an, bis der Verschlusszustand auf offen geändert wird, werden alle vom Kameratreiber gelieferten Muster in ein neues Muster kopiert, wobei ihre Metadaten und Sample-Attribute übertragen und ihre Mediabuffer verworfen werden. Ein neuer Mediabuffer wird aus dem übersetzten Shutter-Bild kopiert und anstelle dessen verwendet. Dieses neue Beispiel wird dann über die Pipeline gesendet, als wäre es das ursprüngliche Beispiel.

Mediabuffer-Shutter-Bild.

Implementierungsanleitung

Um die Ersetzung von Bildern zu ermöglichen, muss der folgende Registrierungseintrag dem Schnittstellenknoten des Geräts der Kamera hinzugefügt werden, wobei der Wert auf 1 festgelegt ist.

RegKey-Typ Regkey-Name Regkey-Wert
REG_DWORD EnableImageReplacement 0x1

Dies kann für eine Treiber-INF wie hier gezeigt hinzugefügt werden.

...

[Device.AddReg]
HKR,,EnableImageReplacement,%REG_DWORD%,1

...

[Strings]
REG_DWORD=0x00010001

Für den MS-OS Deskriptor kann dies als folgender Name hinzugefügt werden:

UVC-EnableImageReplacement

Benutzerdefiniertes Image

Für die ersetzung von benutzerdefinierten Images muss der Treiber Folgendes bereitstellen:

  1. Mindestens eine Bilddatei des Formats BMP vom Typ ARGB32 mit einer Größe von 1000 x 1000 Pixel. In diesem Beispiel ist es "TestImage.bmp".

  2. Eine Ressourcen-DLL mit der Bilddatei, die als Ressource enthalten ist. In diesem Beispiel ist es SampleSocMFT.dll.

Die bereitgestellten Bilddateien des Treibers müssen ein ARGB32-Bild von 1000 x 1000 Pixeln sein. Dadurch wird das Bild ersetzt, das in der Implementierungsübersicht angezeigt wird. Alle anderen Änderungen am Beispiel treten wie beschrieben auf, nur das zu ersetzende Bild ist für den Treiber angepasst. Die Ressourcen-DLL muss Teil des Treiberpakets sein und muss signiert sein. Für die meisten Geräte bedeutet dies, sie im Driver DeviceMFT zu platzieren.

Um die Bilddatei der Ressourcen-DLL hinzuzufügen, ändern Sie die Ressourcendatei *.rc des Projekts mit dem folgenden Beispiel.

#ifdef ID_REPLACEMENT_IMAGE
#define ID_REPLACEMENT_IMAGE    200
#endif

ID_REPLACEMENT_IMAGE     RCDATA    "TestImage.bmp"

Der nächste Schritt besteht darin, den Treiber INF zu ändern. Wenn die verwendete Ressourcen-DLL neu ist, muss sie Teil der CopyFiles-Direktive sein. Schließlich müssen drei zusätzliche AddReg-Direktiven hinzugefügt werden.

[SourceDisksFiles]
AvsCameraSim.sys=1
SampleSocMFT.dll=1

[DestinationDir]
AvsCameraSim.CopySys=13
AvsCameraSim.CopyDMFT=13

[AvsCameraSim.CopySys]
AvsCameraSim.sys

[AvsCameraSim.CopyDMFT]
SampleSocMFT.dll

[AvsCameraSim]
Include=ks.inf, kscaptur.inf
Needs=KS.registration, KSCaptur.Registration.NT
CopyFiles=AvsCameraSim.CopySys, AvsCameraSim.CopyDMFT
AddReg=AvsCameraSim.AddReg

[AvsCameraSim.AddReg]
HKR,,CameraImageResource,,%13%\%DMFT.NAME%
HKR,,CameraImageResourceID,%REG_DWORD%,%ResourceID%
HKR,,EnableImageReplacement,%REG_DWORD%,1

[Strings]
DMFT.Name="SampleSocMFT.dll"
REG_DWORD=0x00010001

;localizable
ResourceID=200

...

Die INF ResourceID- und ID_REPLACEMENT_IMAGE-Kennung für die Ressource müssen übereinstimmen. Diese Werte können so angepasst werden, dass eine einzelne Ressourcen-DLL mehrere Ressourcen-IDs und mehrere Bilder enthalten kann, und ein INF kann lokalisiert werden, um die richtige Ressourcen-ID auszuwählen.

Benutzerdefinierter Bildrahmen

Bei benutzerdefinierten Bildern, die keinen schwarzen Rahmen wünschen, wenn letterboxing auftritt, können sie eine MFARGB-Struktur über die Registrierung angeben, die die Rahmenfarbe des Ersatzbeispiels angepasst.

RegKey-Typ Regkey-Name Regkey-Wert
REG_BINARY KameraBildHintergrundFarbe 0x1

Für eine Treiber-INF-Datei kann sie wie hier gezeigt hinzugefügt werden:

...

[Device.AddReg]
HKR,,CameraImageBackgroundColor,%REG_ BINARY%,00,00,00,FF

[Strings]
REG_BINARY=0x00000001