Freigeben über


Ersatzbild für die Sichtschutzblende

In diesem Artikel wird erläutert, wie Sie für eine Kamera, die Statusmeldungen zu Blenden unterstützt, die Bildersetzung aktivieren. Außerdem wird beschrieben, wie ein benutzerdefiniertes Ersatzimage bereitgestellt wird.

Kameratreiber, die vor der Implementierung dieses Features über Sichtschutzblenden/Schalter verfügten, lieferten vom Kamerasensor generierte Beispiele oder müssen eine proprietäre Funktionalität implementieren, um den Blendenstatus zu erkennen und das Beispiel selbst zu ersetzen. Dank dieses Features kann der Kameratreiber das Bild im Beispiel durch eine vom Betriebssystem bereitgestellte Lösung oder ein benutzerdefiniertes Bild ersetzen lassen.

Ab Windows 11, Version 21H2, erfordert das Windows-Hardware-Kompatibilitätsprogramm (WHCP) Kameras, die mit Kamera-Sichtschutzblenden und -Notausschaltern ausgestattet sind, um den Blendenstatus zu melden. Dank dieser Anforderung können die Anwendungen und das Betriebssystem den aktuellen Blendenstatus ermitteln. Außerdem dient sie dazu, Benutzern hilfreiche Anleitungen zum Ändern des Blendenstatus bereitzustellen. OEM-Partner verwenden diesen Mechanismus, um Funktionen in ihre Treiber zu integrieren, die es ermöglichen, das von der Kamera ausgegebene Bild durch etwas zu ersetzen, das für die Benutzer aufschlussreich ist. Dieses Feature ermöglicht es einem OEM, dieselbe Funktionalität zu nutzen, ohne dass er in einem Geräte-MFT proprietären Code schreiben muss.

Anforderungen

Dieses Feature wird nur von Kameras implementiert, die mit Kamera-Sichtschutzblenden und -Notausschaltern ausgestattet sind. Im Artikel Benachrichtigung über Sichtschutzblende/Schalter finden Sie detaillierte Informationen zur Implementierung von Sichtschutzblenden.

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

Implementierungsübersicht

Die Bildersetzung findet statt, wenn ein Gerät die Benachrichtigung sendet, dass die Blende des Geräts geschlossen ist. Wenn die Blende geschlossen und die Bildersetzung aktiviert ist, lädt die Kamerapipeline das Ersatzimage. Dabei handelt es sich entweder um ein benutzerdefiniertes, vom Kameratreiber bereitgestelltes Image, oder um ein Ersatzbild des Posteingangs, wie hier dargestellt.

Ersatzbild des Posteingangs.

Beim Laden leitet die Pipeline das Bild in einen Ausgabepuffer weiter, dessen Auflösung und Medientyp dem aktuell ausgewählten Medientyp des Kameratreibers entspricht. Bei unterschiedlichen Auflösungen wird das Image hoch- oder herunterskaliert, ohne das vorhandene Seitenverhältnis zu überschreiten.

Ab diesem Punkt, und bis der Status der Blende auf „offen“ festgelegt wird, werden alle Metadaten und Beispielattribute der vom Kameratreiber bereitgestellten Beispiele in ein neues Beispiel kopiert und ihr Medienspeicher wird verworfen. Es wird stattdessen ein neuer Medienspeicher aus dem übersetztem Verschlussbild kopiert und verwendet. Dieses neue Beispiel wird über die Pipeline gesendet, so, als handle es sich dabei um das ursprüngliche Beispiel.

Medienspeicher – Blendenimage.

Implementierungsleitfaden

Um die Bildersetzung zu aktivieren, muss zum Schnittstellenknoten der Kamera der folgende Registrierungseintrag hinzugefügt werden, wobei der Wert auf 1 festgelegt ist.

Registerschlüssel-Typ Registerschlüssel-Name Registerschlüssel-Wert
REG_DWORD EnableImageReplacement 0x1

Im Folgenden ist dargestellt, wie dieser zu einer Treiber-INF hinzugefügt werden kann.

...

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

...

[Strings]
REG_DWORD=0x00010001

Für den MS-OS Descriptor kann dieser als folgender Name hinzugefügt werden:

UVC-EnableImageReplacement

Benutzerdefiniertes Image

Für die Ersetzung benutzerdefinierter Images muss der Treiber folgende Anforderungen erfüllen:

  1. Mindestens eine Bilddatei im BMP-Format vom Typ ARGB32 mit einer Größe von 1000 x 1000 Pixel. In diesem Beispiel wird „TestImage.bmp“ verwendet.

  2. Eine Ressourcen-DLL, in der die Bilddatei als Ressource enthalten ist. In diesem Beispiel wird „SampleSocMFT.dll“ verwendet.

Die bereitgestellten Bilddateien des Treibers müssen ein ARGB32-Bild mit 1000 x 1000 Pixeln sein. Dieses ersetzt das Bild, das in der Übersicht der Implementierung angezeigt wird. Alle anderen Änderungen am Beispiel treten wie beschrieben auf. Nur das zu ersetzende Bild ist treiberspezifisch. Die Ressourcen-DLL muss Teil des Treiberpakets sein und sie muss signiert sein. Für die meisten Geräte bedeutet dies, dass sie in der Treibergerät-MFT platziert wird.

Um die Bilddatei zur Ressourcen-DLL hinzuzufügen, ändern Sie die Ressourcendatei *.rc des Projekts z. B. wie im Folgenden dargestellt.

#ifdef ID_REPLACEMENT_IMAGE
#define ID_REPLACEMENT_IMAGE    200
#endif

ID_REPLACEMENT_IMAGE     RCDATA    "TestImage.bmp"

Ändern Sie als Nächstes die Treiber-INF. Wenn die verwendete Ressourcen-DLL neu ist, muss sie Teil der CopyFiles-Anweisung sein. Abschließend müssen drei zusätzliche AddReg-Anweisungen 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 der ID_REPLACEMENT_IMAGE-Bezeichner der Ressource müssen abgeglichen werden. Diese Werte können so angepasst werden, dass eine einzelne Ressourcen-DLL mehrere Ressourcen-IDs und mehrere Images enthalten kann, und eine INF lokalisiert werden kann, um die richtige Ressourcen-ID auszuwählen.

Benutzerdefinierter Bildrahmen

Für benutzerdefinierte Bilder, die bei Auftreten von Letterboxing keinen schwarzen Rahmen haben sollen, kann über die Registrierung, die die Farbe des Rahmens für das Ersatzbeispiel anpasst, eine MFARGB-Struktur festgelegt werden.

Registerschlüssel-Typ Registerschlüssel-Name Registerschlüssel-Wert
REG_BINARY CameraImageBackgroundColor 0x1

Im Folgenden ist dargestellt, wie dieser zu einer Treiber-INF hinzugefügt werden kann:

...

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

[Strings]
REG_BINARY=0x00000001