Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article explique comment activer le remplacement d’image pour une caméra prenant en charge les rapports d’état d’obturation. Il décrit également comment fournir une image de remplacement personnalisée.
Les pilotes de caméra qui avaient des obturateurs/commutateurs de confidentialité avant cette implémentation de fonctionnalité ont fourni des échantillons du capteur de caméra ou doivent implémenter une fonctionnalité propriétaire pour détecter l’état de l’obturation et remplacer l’échantillon lui-même. Cette fonctionnalité permet au pilote de caméra de s’appuyer sur le système d’exploitation pour remplacer l’image dans l’exemple par une solution fournie par le système d’exploitation ou une image personnalisée fournie par le pilote caméra.
À compter de Windows 11, version 21H2, le programme de compatibilité matérielle Windows (WHCP) nécessite des caméras qui sont fournies avec des volets de confidentialité ou des interrupteurs de désactivation pour signaler l’état du volet de l’appareil photo. Cette exigence permet au système d’exploitation et aux applications de connaître l’état actuel de l’obturateur et est utilisé pour fournir des conseils utiles sur la façon de modifier l’état de l’obturateur. Les partenaires OEM utilisent ce mécanisme pour créer des fonctionnalités dans leurs pilotes afin de remplacer l’image provenant de la caméra par quelque chose d’informatif pour les utilisateurs. Cette fonctionnalité permet à un OEM d’utiliser cette même fonctionnalité sans avoir à écrire de code propriétaire à l’intérieur d’un DeviceMFT.
Spécifications
Cette fonctionnalité est implémentée uniquement par les caméras qui ont des obturateurs de confidentialité/commutateurs de destruction. Les détails de la mise en œuvre des volets de confidentialité sont décrits dans l’article Notification des volets/commutateurs de confidentialité.
Les appareils qui souhaitent prendre en charge une image personnalisée pour le remplacement d’image doivent également fournir un fichier binaire signé, partie de leur package de pilotes qui contient leur image de remplacement.
Étant donné que le remplacement de l’image remplace la mémoire tampon de sortie existante, l’appareil génère des images non compressées. Pour les images compressées comme MJPEG et JPEG, aucun remplacement d’image ne se produit, et l’image d’origine du pilote est fournie à la place.
Vue d’ensemble de l’implémentation
Le remplacement de l’image se produit lorsqu’un appareil envoie la notification indiquant que l’obturateur de l’appareil est fermé. Si l’état d’obturation est fermé et que le remplacement de l’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 caméra, soit à l’aide de l’image de remplacement de la boîte de réception affichée ici.
Lorsqu’il est chargé, le pipeline convertit l’image en mémoire tampon de sortie qui correspond au même type de résolution et de médiatype du type multimédia actuellement sélectionné du pilote de caméra. Si les résolutions diffèrent, l’image est mise à l’échelle vers le haut ou vers le bas, mais n’est pas étirée en dehors de ses proportions existantes.
À partir de ce moment-là, jusqu'à ce que l'état de l'obturateur soit modifié pour s'ouvrir, tous les échantillons fournis par le pilote de caméra voient leurs métadonnées et attributs d'échantillons copiés dans un nouvel échantillon et leur buffer média est ignoré. Un nouveau mediabuffer est copié à partir de l’image d’obturation traduite et utilisé à la place. Ce nouvel exemple sera ensuite envoyé via le pipeline comme s’il s’agissait de l’exemple d’origine.
Guide de mise en œuvre
Pour activer le remplacement d’image, l’entrée de Registre suivante doit être ajoutée au nœud d’interface de l’appareil photo, avec une valeur définie sur 1.
| Type de clé de registre | Nom de la clé de registre | Valeur Regkey |
|---|---|---|
| REG_DWORD | EnableImageReplacement | 0x1 |
Pour un inf de pilote, cela peut être ajouté comme indiqué ici.
...
[Device.AddReg]
HKR,,EnableImageReplacement,%REG_DWORD%,1
...
[Strings]
REG_DWORD=0x00010001
Pour le descripteur MS-OS, il peut être ajouté comme nom suivant :
UVC-EnableImageReplacement
Image personnalisée
Pour le remplacement d’image personnalisé, le pilote doit fournir les éléments suivants :
Un ou plusieurs fichiers image de format BMP type ARGB32 avec une taille de 1 000 x 1 000 pixels. Dans cet exemple, il s’agit de «TestImage.bmp».
Une DLL de ressources, contenant le fichier image en tant que ressource. Dans cet exemple, il SampleSocMFT.dll.
Les fichiers image fournis par le pilote doivent être une image ARGB32 de 1 000 x 1 000 pixels. Cela remplace l’image affichée dans la vue d’ensemble de l’implémentation. Toutes les autres modifications apportées à l’exemple se produisent comme décrit, seule l’image remplacée est personnalisée pour le pilote. La DLL de ressource doit faire partie du package de pilotes et doit être signée. Pour la plupart des appareils, cela signifie le placer dans Driver DeviceMFT.
Pour ajouter le fichier image à la DLL de ressource, modifiez le fichier de ressources du projet *.rc 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 pilote INF. 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’ID de ressource INF et l’identificateur ID_REPLACEMENT_IMAGE de la ressource doivent être mis en correspondance. Ces valeurs peuvent être ajustées afin qu’une DLL de ressource unique puisse contenir plusieurs ID de ressource et plusieurs images, et qu’un INF puisse être localisé pour sélectionner l’ID de ressource approprié.
Bordure d’image personnalisée
Pour les images personnalisées qui ne souhaitent pas de bordure noire lorsque le letterboxing se produit, elles peuvent spécifier une structure MFARGB via le registre qui personnalise la couleur de bordure de l'échantillon de remplacement.
| Type de clé de registre | Nom de la clé de registre | Valeur Regkey |
|---|---|---|
| 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