Partager via


Notification d’obturation/commutateur de confidentialité

Certains fabricants de caméras peuvent souhaiter inclure des obturateurs physiques ou des interrupteurs de sécurité qui peuvent bloquer les caméras en utilisant un contrôle physique qui ne peut pas être contourné via logiciel. Ces fonctionnalités ne sont pas encouragées en raison du risque d’activation par inadvertance et de confusion des clients résultant, mais s’ils sont implémentés, ils doivent suivre les instructions décrites dans les volets de confidentialité de la caméra et les commutateurs de destruction, y compris pour signaler l’état de l’obturateur/commutateur.

Lorsqu’un obturateur est fermé ou qu’un commutateur d’arrêt est actif, la caméra continue d’être entièrement fonctionnelle pour Windows et les applications utilisant des API de caméra existantes, mais l’image ou le flux vidéo sera 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 où les applications qui accèdent à la caméra ne savent pas que la caméra est obstruée et les utilisateurs finaux qui ont activé involontairement le contrôle physique peuvent être confus sur la raison pour laquelle leur caméra ne fonctionne pas comme prévu.

Pour répondre à ces problèmes, les caméras implémentant des obturateurs ou des commutateurs de destruction 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 oem et les odMs 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 utilisent pour publier l’état d’obturation/commutateur sur le système d’exploitation.

En plus de la fonctionnalité de notification de l'obturateur/commutateur de confidentialité, le système d'exploitation implémente la détection de l'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 ni ne s'éteint 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 dans lesquels ce comportement n’est pas souhaité, par conséquent, un mécanisme de désactivation 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 que comme 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.

Remarque

Les caméras implémentant des obturateurs de confidentialité ou des commutateurs de destruction doivent respecter les exigences décrites dans les volets de confidentialité de caméra et les commutateurs de destruction.

Dans le pilote UVC (USB Video Class), 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.

diagramme illustrant l’architecture de notification d’obturation de confidentialité

Outre l’utilisation du contrôle KSPROPERTY existant, KSPROPERTY_CAMERACONTROL_PRIVACY, un nouveau flux d’appel KSEVENT est introduit afin que le pilote de caméra puisse signaler quand l’état de l’obturation/commutateur de confidentialité de la caméra est modifié s’il existe des clients qui s’inscrivent pour ce KSEVENT.

KSEVENT est émis en utilisant le même Set GUID et Id que KSPROPERTY.

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 un mécanisme, si le développeur de pilotes choisit de prendre en charge cette fonctionnalité, d’obtenir et d’écouter les modifications d’état que le capteur d’obturation génère. Le système d’exploitation interroge l’état via la méthode get KSPROPERTY et émet un KSEVENT en attente que le pilote signale lorsque l’état de l’obturation est modifié. Le changement d’état de l’obturateur/commutateur ne doit pas empêcher l’appareil photo de fonctionner, 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 doit retourner une erreur de 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

Certains appareils photo détectent l’état d’obturation à l’aide d’un algorithme d’analyse de pixels s’exécutant dans le microprogramme isp (Image Signal Processor). Cela impose une limitation à ces caméras que la caméra doit être activement en streaming pour détecter et signaler l’état de l’obturateur. Pour plus d’informations sur le moment et la façon dont l’appareil photo doit signaler son état d’obturation ou d'interrupteur, consultez la détection et le rapport de l’état de l’obturation.

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 est en train de diffuser activement. Pour plus d’informations, consultez la classe CameraOcclusionInfo .

KSPROPERTY

Tableau récapitulatif de l’utilisation (KSPROPERTY)

Obtenir Set Target Type de descripteur de propriété Type de valeur de propriété
Oui Non Filtre 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 caméra peut capturer des images vidéo

  • La valeur 1 indique que le capteur de caméra n’est pas en mesure de capturer des images vidéo

La structure KSPROPERTY_CAMERA_CONTROL_S doit être remplie comme suit :

Membre de la structure Valeur
KSPROPERTY.Set Doit être PROPSETID_VIDCAP_CAMERACONTROL
KSPROPERTY.Id Doit être KSPROPERTY_CAMERACONTROL_PRIVACY
KSPROPERTY.Flags Doit être KSPROPERTY_TYPE_GET
Valeur Initialiser à 0
Flags Ignoré, défini sur 0
Capacités Ignoré, défini sur 0

KSEVENT

Tableau de résumé de l’utilisation (KSEVENT)

Obtenir Set Target Type de descripteur d’événement Type de valeur d’événement
Non Oui Filtre KSEVENT KSEVENTDATA

La structure KSEVENT doit être remplie comme suit :

Membre de la structure Valeur
Set Doit être PROPSETID_VIDCAP_CAMERACONTROL
Id Doit être KSPROPERTY_CAMERACONTROL_PRIVACY
Flags KSEVENT_TYPE_ENABLE

La structure KSEVENTDATA doit être remplie comme suit :

Membre de la 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 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)

Remarque

La définition de la valeur PropertyBuffer à 0 revient à ne pas définir du tout la clé de propriété du périphérique.

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 à l’aide du 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 MS OS

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)
};

Voir aussi

KSPROPERTY_CAMERACONTROL_PRIVACY

KSPROPERTY_CAMERA_CONTROL_S

KSPROPERTY

KSEVENT

KSEVENTDATA

PROPSETID_VIDCAP_CAMERACONTROL