Notification d’obturateur/commutateur de confidentialité
Certains fabricants de caméras peuvent souhaiter inclure des obturateurs physiques ou des commutateurs d’arrêt qui peuvent bloquer la caméra à l’aide d’un contrôle physique qui ne peut pas être remplacé par un logiciel. Ces fonctionnalités ne sont pas encouragées en raison du risque d’activation par inadvertance et de confusion du client qui en résulte, mais si elles sont implémentées, elles doivent suivre les instructions décrites dans Volets de confidentialité de l’appareil photo et commutateurs d’arrêt, y compris pour signaler l’état de l’obturateur/commutateur.
Lorsqu’un obturateur est fermé ou qu’un bouton d’arrêt est actif, l’appareil photo continue d’être entièrement fonctionnel pour Windows et les applications utilisant les API d’appareil photo existantes, mais le flux d’image ou de vidéo est noir ou sombre (ou remplacé par une image statique, telle qu’une image de l’appareil avec une flèche pointant vers l’emplacement du contrôle physique). Cela soulève des problèmes potentiels dans lesquels les applications qui accèdent à la caméra ne savent pas que la caméra est obclus, et les utilisateurs finaux qui ont involontairement activé le contrôle physique peuvent être confus quant à la raison pour laquelle leur caméra ne fonctionne pas comme prévu.
Pour répondre à ces préoccupations, les caméras qui implémentent des obturateurs ou des commutateurs d’arrêt doivent implémenter un mécanisme pour détecter l’état de l’obturateur/commutateur et le signaler au système d’exploitation. Cette rubrique fournit des conseils pour les fabricants OEM et les ODM qui implémentent ce mécanisme de création de rapports, et décrit également les contrôles et structures que les développeurs de pilotes de caméra utiliseront pour publier l’état de l’obturateur/commutateur sur le système d’exploitation.
En plus de la fonctionnalité de notification d’obturateur/commutateur de confidentialité, le système d’exploitation implémente la détection d’occlusion de la caméra lorsqu’une caméra frontale (FFC) est obstruée par le couvercle de l’appareil lorsque l’action de fermeture du commutateur de couvercle est définie sur « Ne rien faire », par exemple, un ordinateur ne se met pas en veille ou s’éteint pas lorsque le couvercle est fermé. Un exemple de scénario peut être un ordinateur portable ancré avec des moniteurs externes en cours d’utilisation pendant que le couvercle de l’ordinateur portable est fermé. Il peut y avoir certains facteurs de forme d’appareil où ce comportement n’est pas souhaité. Par conséquent, un mécanisme de refus de la détection d’occlusion du couvercle de l’appareil est défini ci-dessous.
Vue d’ensemble de l’architecture
Le contrôle KSPROPERTY_CAMERACONTROL_PRIVACY est utilisé lorsque le système d’exploitation interroge l’état actuel à partir d’un pilote de caméra. Elle ne doit être utilisée qu’en tant que propriété Get. Les développeurs de pilotes ne doivent pas prendre en charge la propriété Set de contrôle KSPROPERTY_CAMERACONTROL_PRIVACY dans leurs pilotes.
Notes
Les caméras qui implémentent des obturateurs de confidentialité ou des commutateurs d’arrêt doivent se conformer aux exigences décrites dans Volets de confidentialité de l’appareil photo et commutateurs d’arrêt.
Dans le pilote USB Video Class (UVC), le contrôle KSPROPERTY_CAMERACONTROL_PRIVACY est mappé à la propriété CT_PRIVACY_CONTROL définie dans la spécification de classe UVC v1.5.
En plus de l’utilisation du contrôle KSPROPERTY existant, KSPROPERTY_CAMERACONTROL_PRIVACY, un nouveau flux d’appel KSEVENT est introduit afin que le pilote de la caméra puisse signaler quand l’état de l’obturateur/commutateur de confidentialité de la caméra est modifié s’il existe des clients qui s’inscrivent à ce KSEVENT.
L’événement KSEVENT est émis à l’aide des mêmes GUID et ID set que le KSPROPERTY utilise.
Pour clarifier ce qui est illustré dans le diagramme ci-dessus, le système d’exploitation s’attend à ce que le pilote AVS implémente le mécanisme, si le développeur de pilotes choisit de prendre en charge cette fonctionnalité, pour obtenir et écouter les changements d’état générés par le capteur d’obturateur. Le système d’exploitation interroge l’état via la méthode get KSPROPERTY et émet un événement KSEVENT en attente que le pilote signale lorsque l’état d’obturation est modifié. Le changement d’état de l’obturateur/commutateur ne doit pas empêcher le fonctionnement de la caméra, par exemple, pour provoquer une situation d’erreur.
NOTE: Si le pilote AVS prend en charge cette fonctionnalité, mais que le matériel sous-jacent ne le fait pas, le pilote AVS retourne l’erreur non prise en charge lorsque le système d’exploitation émet l’inscription KSEVENT .
Méthodes de détection et de création de rapports
Certaines caméras détectent l’état d’obturation à l’aide d’un algorithme d’analyse de pixels exécuté dans le microprogramme du processeur de signal d’image (ISP). Cela impose une limitation sur ces caméras que la caméra doit diffuser activement pour détecter et signaler l’état de l’obturateur. Pour plus d’informations sur le moment et la façon dont la caméra doit signaler son état d’obturateur/commutateur, consultez Détection et création de rapports sur l’état de l’obturateur.
De même, les développeurs d’applications qui utilisent le signal d’occlusion de la caméra ne doivent pas utiliser l’état d’obturation signalé, sauf si la caméra diffuse activement en continu. Pour plus d’informations, consultez Classe CameraOcclusionInfo .
KSPROPERTY
Table récapitulative de l’utilisation (KSPROPERTY)
Get | Définir | Cible | Type de descripteur de propriété | Type de valeur de propriété |
---|---|---|---|---|
Oui | Non | Filtrer | KSPROPERTY_CAMERACONTROL_S | LONG |
La valeur de propriété (données d’opération) est une valeur LONG qui spécifie si le mode de confidentialité est activé ou désactivé :
La valeur 0 indique que le capteur de la caméra peut capturer des images vidéo
La valeur 1 indique que le capteur de la caméra ne peut pas capturer des images vidéo.
La structure KSPROPERTY_CAMERA_CONTROL_S doit être remplie comme suit :
Membre de structure | Valeur |
---|---|
KSPROPERTY. Ensemble | Doit être PROPSETID_VIDCAP_CAMERACONTROL |
KSPROPERTY.Id | Doit être KSPROPERTY_CAMERACONTROL_PRIVACY |
KSPROPERTY. Drapeaux | Doit être KSPROPERTY_TYPE_GET |
Valeur | Initialiser sur 0 |
Indicateurs | Ignoré, défini sur 0 |
Capabilities | Ignoré, défini sur 0 |
KSEVENT
Table récapitulative de l’utilisation (KSEVENT)
Get | Définir | Cible | Type de descripteur d’événement | Type de valeur d’événement |
---|---|---|---|---|
Non | Oui | Filtrer | KSEVENT | KSEVENTDATA |
La structure KSEVENT doit être remplie comme suit :
Membre de structure | Valeur |
---|---|
Définir | Doit être PROPSETID_VIDCAP_CAMERACONTROL |
Id | Doit être KSPROPERTY_CAMERACONTROL_PRIVACY |
Indicateurs | KSEVENT_TYPE_ENABLE |
La structure KSEVENTDATA doit être remplie comme suit :
Membre de structure | Valeur |
---|---|
NotificationType | Doit être KSEVENTF_EVENT_HANDLE |
Désactiver la détection d’occlusion du couvercle de l’appareil
Pour désactiver la détection d’occlusion du couvercle de l’appareil, les fabricants OEM peuvent définir la clé de propriété d’appareil suivante :
DEVPROPKEY
DEVPROPGUID = {3AB8560B-EFCF-43C1-A7EC-130E46857AF4}
DEVPROPID = 2
DEVPROPTYPE = DEVPROP_TYPE_UINT32
PropertyBuffer = (ULONG) 1
PropertyBufferSize = sizeof(ULONG)
Notes
La définition de la valeur PropertyBuffer sur 0 revient à ne pas définir du tout la clé de propriété de l’appareil.
La clé de propriété de périphérique peut être fournie dans un fichier INF de pilote à l’aide de AddProperty ou à l’aide d’un descripteur MS OS s’il n’existe aucun fichier INF, par exemple, une caméra USB utilisant le pilote de caméra de boîte de réception UVC.
Exemple INF AddProperty
[OptOutLidOcclusionSampleAddPropertySection]
{3AB8560B-EFCF-43C1-A7EC-130E46857AF4},2,7,,1
Exemple de descripteur de système d’exploitation MS
UCHAR Example2_MSOS20DescriptorSet_UVCDevicePropertyKeyForLidOcclusionOptOut[0x76] =
{
//
// Microsoft OS 2.0 Descriptor Set Header
//
0x0A, 0x00, // wLength of MSOS20_SET_HEADER_DESCRIPTOR (10 bytes)
0x00, 0x00, // wDescriptorType MSOS20_SET_HEADER_DESCRIPTOR
0x00, 0x00, 0x00, 0x0A, // dwWindowsVersion – 0x10000000 for Windows 10
0x76, 0x00, // wTotalLength – 0x76(118) bytes
//
// Microsoft OS 2.0 Registry Value Feature Descriptor
//
0x6C, 0x00, // wLength - 0x6C(108) bytes
0x04, 0x00, // wDescriptorType – MSOS20_FEATURE_REG_PROPERTY
0x04, 0x00, // wPropertyDataType - 4 for REG_DWORD_LITTLE_ENDIAN
0x5E, 0x00, // wPropertyNameLength – 0x5E(94) bytes
'D', 0x00, 'K', 0x00, // Property Name – DKEY-{3AB8560B-EFCF-43C1-A7EC-130E46857AF4},2
'E', 0x00, 'Y', 0x00,
'-', 0x00, '{', 0x00,
'3', 0x00, 'A', 0x00,
'B', 0x00, '8', 0x00,
'5', 0x00, '6', 0x00,
'0', 0x00, 'B', 0x00,
'-', 0x00, 'E', 0x00,
'F', 0x00, 'C', 0x00,
'F', 0x00, '-', 0x00,
'4', 0x00, '3', 0x00,
'C', 0x00, '1', 0x00,
'-', 0x00, 'A', 0x00,
'7', 0x00, 'E', 0x00,
'C', 0x00, '-', 0x00,
'1', 0x00, '3', 0x00,
'0', 0x00, 'E', 0x00,
'4', 0x00, '6', 0x00,
'8', 0x00, '5', 0x00,
'7', 0x00, 'A', 0x00,
'F', 0x00, '4', 0x00,
'}', 0x00, ',', 0x00,
'2', 0x00, 0x00, 0x00,
0x00, 0x00,
0x04, 0x00, // wPropertyDataLength – 4 bytes
0x01, 0x00, 0x00, 0x00 // PropertyData – 0x00000001 (1)
};