Image de remplacement de l’obturateur de confidentialité
Cet article explique comment activer le remplacement d'images pour une caméra qui prend en charge le signalement de l'état de l'obturateur. Il explique également comment fournir une image de rechange personnalisée.
Les pilotes de caméra qui avaient des obturateurs/interrupteurs confidentiels avant la mise en œuvre de cette fonctionnalité fournissaient des échantillons du capteur de la caméra ou devaient mettre en œuvre une fonctionnalité propriétaire pour détecter l'état de l'obturateur et remplacer l'échantillon lui-même. Cette fonctionnalité permet au pilote de la caméra de s'appuyer sur le système d'exploitation pour remplacer l'image de l'échantillon par une solution fournie par le système d'exploitation ou par une image personnalisée fournie par le pilote de la caméra.
À partir de Windows 11, version 21H2, le Programme de compatibilité matérielle de Windows (WHCP) exige que les caméras équipées d'obturateurs de confidentialité ou d'interrupteurs de coupure signalent l'état de l'obturateur de la caméra. Cette exigence permet au système d'exploitation et aux applications de connaître l'état actuel de l'obturateur et est utilisée pour fournir des conseils utiles à l'utilisateur sur la façon de modifier l'état de l'obturateur. Les partenaires OEM utilisent ce mécanisme pour intégrer une fonctionnalité dans leurs pilotes afin de remplacer l'image provenant de la caméra par quelque chose d'informatif pour les utilisateurs. Cette fonction permet à un OEM d'utiliser cette même fonctionnalité sans avoir à écrire un code propriétaire à l'intérieur d'un DeviceMFT.
Spécifications
Cette fonctionnalité est uniquement mise en œuvre par les caméras dotées d'obturateurs ou d'interrupteurs de confidentialité. Les détails de la mise en œuvre des obturateurs de confidentialité sont décrits dans l'article Notification des obturateurs/interrupteurs de confidentialité.
Les appareils qui souhaitent prendre en charge une image personnalisée pour le remplacement d'image doivent également fournir un binaire signé, faisant partie de leur pilote, qui contient leur image de remplacement.
Vue d’ensemble de l’implémentation
Le remplacement de l'image se produit lorsqu'un appareil envoie une notification indiquant que l'obturateur de l'appareil est fermé. Si l'obturateur est fermé et que le remplacement d'image est activé, le pipeline de la caméra charge l'image de remplacement, soit à partir d'une image personnalisée fournie par le pilote de la caméra, soit à l'aide de l'image de remplacement de la boîte de réception illustrée ici.
Une fois chargé, le pipeline traduit l'image dans un tampon de sortie qui correspond à la même résolution et au même type de support que le type de support actuellement sélectionné dans le pilote de la caméra. Si les résolutions diffèrent, l'image est mise à l'échelle ou réduite, mais n'est pas étirée en dehors de ses proportions existantes.
À partir de ce moment, et jusqu'à ce que l'obturateur soit ouvert, tous les échantillons fournis par le pilote de l'appareil photo voient leurs métadonnées et leurs attributs d'échantillon copiés dans un nouvel échantillon et leur mediabuffer est supprimé. Un nouveau mediabuffer est copié à partir de l'image traduite de l'obturateur et utilisé à la place. Ce nouvel échantillon sera ensuite envoyé dans le pipeline comme s'il s'agissait de l'échantillon original.
Guide d’implémentation
Pour activer le remplacement d'image, l'entrée de registre suivante doit être ajoutée au nœud d'interface de l'appareil, avec une valeur fixée à 1.
Type de la clé de registre | Nom de la clé de registre | Valeur de la clé de registre |
---|---|---|
REG_DWORD | EnableImageReplacement | 0x1 |
Pour un pilote INF, cette entrée peut être ajoutée comme indiqué ici.
...
[Device.AddReg]
HKR,,EnableImageReplacement,%REG_DWORD%,1
...
[Strings]
REG_DWORD=0x00010001
Pour le descripteur MS-OS, vous pouvez ajouter le nom suivant :
UVC-EnableImageReplacement
Image personnalisée
Pour le remplacement d'images personnalisées, le pilote doit fournir les éléments suivants :
Un ou plusieurs fichiers d'image de format BMP type ARGB32 avec une taille de 1000 x 1000 pixels. Dans cet exemple, il s'agit de « TestImage.bmp ».
Une DLL de ressource, avec le fichier image contenu en tant que ressource. Dans cet exemple, il s'agit de SampleSocMFT.dll.
Les fichiers image fournis par le pilote doivent être des images ARGB32 de 1000 x 1000 pixels. Cela remplace l'image présentée dans l'aperçu de la mise en œuvre. Toutes les autres modifications apportées à l'exemple se déroulent comme décrit, seule l'image remplacée est propre au pilote. La DLL de ressource doit faire partie du paquetage du pilote et doit être signée. Pour la plupart des appareils, cela signifie qu'elle doit être placée dans le Driver DeviceMFT.
Pour ajouter le fichier image à la DLL de ressource, modifiez le fichier de ressource *.rc du projet avec l'exemple suivant.
#ifdef ID_REPLACEMENT_IMAGE
#define ID_REPLACEMENT_IMAGE 200
#endif
ID_REPLACEMENT_IMAGE RCDATA "TestImage.bmp"
L'étape suivante consiste à modifier le fichier INF du pilote. Si la DLL de ressource utilisée est nouvelle, elle doit faire partie de la directive CopyFiles. Enfin, trois directives AddReg supplémentaires doivent être ajoutées.
[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
...
L'INF ResourceID et l'identifiant ID_REPLACEMENT_IMAGE de la ressource doivent correspondre. Ces valeurs peuvent être ajustées de manière à ce qu'une seule DLL de ressource puisse contenir plusieurs ID de ressource et plusieurs images, et qu'un INF puisse être localisé pour sélectionner l'ID de ressource correct.
Bordure d'image personnalisée
Pour les images personnalisées où les bordures noires ne sont pas souhaitables lors du letterboxing, il est possible de spécifier une structure MFARGB dans le registre qui personnalise la couleur des bordures de l'échantillon de rechange.
Type de la clé de registre | Nom de la clé de registre | Valeur de la clé de registre |
---|---|---|
REG_BINARY | CameraImageBackgroundColor | 0x1 |
Pour un INF de pilote, il peut être ajouté comme indiqué ici :
...
[Device.AddReg]
HKR,,CameraImageBackgroundColor,%REG_ BINARY%,00,00,00,FF
[Strings]
REG_BINARY=0x00000001