Condividi tramite


Notifica dell'otturatore/interruttore della privacy

Alcuni produttori di fotocamere potrebbero voler includere otturatori fisici o interruttori di terminazioni che possono bloccare la fotocamera usando un controllo fisico non in grado di essere sottoposto a override dal software. Queste funzionalità non sono incoraggiate a causa del rischio di attivazione accidentale e della conseguente confusione dei clienti, ma se implementate, devono seguire le indicazioni descritte in Camera privacy shutters and kill switch, incluso per segnalare lo stato dell'otturatore/interruttore.

Quando un otturatore è chiuso o un interruttore di terminazione è attivo, la fotocamera continua a essere completamente funzionale a Windows e alle applicazioni che usano le API della fotocamera esistenti, ma l'immagine o il flusso video sarà nero o scuro (o sostituito con un'immagine statica, ad esempio un'immagine del dispositivo con una freccia che punta alla posizione del controllo fisico). Ciò genera potenziali problemi a causa dei quali le applicazioni che accedono alla fotocamera non sono consapevoli che la fotocamera è bloccata e gli utenti finali che hanno attivato involontariamente il controllo fisico potrebbero essere confusi sul motivo per cui la fotocamera non funziona come previsto.

Per risolvere questi problemi, le telecamere che implementano otturatori o interruttori kill devono implementare un meccanismo per rilevare lo stato dell'otturatore/interruttore e segnalarlo al sistema operativo. Questo argomento fornisce indicazioni per gli OEM e gli ODM che implementeranno questo meccanismo di creazione di report e descrivono anche i controlli e le strutture che gli sviluppatori di driver di fotocamera useranno per pubblicare lo stato dell'otturatore/interruttore nel sistema operativo.

Oltre alla funzionalità di notifica dell'otturatore/interruttore della privacy, il sistema operativo implementa il rilevamento dell'occlusione della fotocamera in cui una fotocamera frontale (FFC) è occlusa dal coperchio quando l'azione di chiusura del coperchio è impostata su "Non fare nulla", ad esempio, un computer non passerà alla sospensione o all'accensione quando il coperchio viene chiuso. Uno scenario di esempio potrebbe essere un portatile ancorato con monitor esterni in uso mentre il coperchio del portatile è chiuso. Potrebbero esserci alcuni fattori di forma del dispositivo in cui questo comportamento non è voluto, pertanto, un meccanismo per rifiutare esplicitamente il rilevamento dell'occlusione del coperchio del dispositivo è definito di seguito.

Panoramica dell'architettura

Il controllo KSPROPERTY_CAMERACONTROL_PRIVACY viene usato quando il sistema operativo esegue una query sullo stato corrente da un driver della fotocamera. Deve essere usata solo come proprietà Get. Gli sviluppatori di driver non devono supportare il controllo KSPROPERTY_CAMERACONTROL_PRIVACY Imposta proprietà nei driver.

Nota

Le telecamere che implementano otturatori di privacy o interruttori kill devono essere conformi ai requisiti descritti in Camera privacy shutters e kill switch.

Nel driver USB Video Class (UVC), il controllo KSPROPERTY_CAMERACONTROL_PRIVACY viene mappato alla proprietà CT_PRIVACY_CONTROL definita nella specifica della classe UVC v1.5.

Diagramma che illustra l'architettura di notifica dell'otturatore della privacy

Oltre all'uso del controllo KSPROPERTY esistente, KSPROPERTY_CAMERACONTROL_PRIVACY, viene introdotto un nuovo flusso di chiamata KSEVENT in modo che il driver della fotocamera possa segnalare quando lo stato dell'otturatore/interruttore della fotocamera viene modificato se sono presenti client che si registrano per tale KSEVENT.

KSEVENT viene emesso usando lo stesso GUID set e id usato da KSPROPERTY.

Per chiarire quanto illustrato nel diagramma precedente, il sistema operativo prevede che il driver AVS implementi il meccanismo, se lo sviluppatore del driver sceglie di supportare questa funzionalità, per ottenere e ascoltare le modifiche dello stato che il sensore di otturatore sta generando. Il sistema operativo esegue una query sullo stato tramite il metodo get KSPROPERTY e rilascia un KSEVENT in attesa che il driver segnalerà quando viene modificato lo stato dell'otturatore. La modifica dello stato dell'otturatore/interruttore non deve impedire il funzionamento della fotocamera, ad esempio per causare una situazione di errore.

NOTA: Se il driver AVS supporta questa funzionalità, ma l'hardware sottostante non lo fa, il driver AVS non restituirà un errore supportato quando il sistema operativo rilascia la registrazione KSEVENT .

Metodi di rilevamento e creazione di report

Alcune fotocamere rilevano lo stato dell'otturatore usando un algoritmo di analisi dei pixel in esecuzione nel firmware ISP (Image Signal Processor). Ciò impone una limitazione a quelle telecamere che la fotocamera deve essere attivamente in streaming per percepire e segnalare lo stato dell'otturatore. Per altre informazioni su quando e su come la fotocamera deve segnalare lo stato dell'otturatore o dell'interruttore, vedi Rilevamento dello stato dell'otturatore e segnalazione.

Analogamente, gli sviluppatori di applicazioni che usano il segnale di occlusione della fotocamera non devono utilizzare lo stato di otturatore segnalato, a meno che la fotocamera non sia attivamente in streaming. Per altri dettagli, vedere Classe CameraOcclusionInfo .

KSPROPERTY

Tabella riepilogativa utilizzo (KSPROPERTY)

Recupero Set Destinazione Tipo di descrittore di proprietà Tipo valore proprietà
No Filtra KSPROPERTY_CAMERACONTROL_S LONG

Il valore della proprietà (dati dell'operazione) è long che specifica se la modalità di privacy è abilitata o disabilitata:

  • Il valore 0 indica che il sensore della fotocamera può acquisire immagini video

  • Il valore 1 indica che il sensore della fotocamera non è in grado di acquisire immagini video

La struttura KSPROPERTY_CAMERA_CONTROL_S deve essere riempita nel modo seguente:

Membro struttura Valore
KSPROPERTY. Impostare Deve essere PROPSETID_VIDCAP_CAMERACONTROL
KSPROPERTY.Id Deve essere KSPROPERTY_CAMERACONTROL_PRIVACY
KSPROPERTY. Bandiere Deve essere KSPROPERTY_TYPE_GET
Valore Inizializzare su 0
Flag Ignorato, impostato su 0
Capabilities Ignorato, impostato su 0

KSEVENT

Tabella di riepilogo utilizzo (KSEVENT)

Recupero Set Destinazione Tipo di descrittore di evento Tipo di valore dell'evento
No Filtra KSEVENT KSEVENTDATA

La struttura KSEVENT deve essere riempita nel modo seguente:

Membro struttura Valore
Set Deve essere PROPSETID_VIDCAP_CAMERACONTROL
Id Deve essere KSPROPERTY_CAMERACONTROL_PRIVACY
Flag KSEVENT_TYPE_ENABLE

La struttura KSEVENTDATA deve essere compilata nel modo seguente:

Membro struttura Valore
NotificationType Deve essere KSEVENTF_EVENT_HANDLE

Rifiutare esplicitamente il rilevamento dell'occlusione del coperchio del dispositivo

Per rifiutare esplicitamente il rilevamento dell'occlusione del coperchio del dispositivo, gli OEM possono definire la seguente chiave di proprietà del dispositivo:

DEVPROPKEY

    DEVPROPGUID = {3AB8560B-EFCF-43C1-A7EC-130E46857AF4}

    DEVPROPID = 2

DEVPROPTYPE = DEVPROP_TYPE_UINT32

PropertyBuffer = (ULONG) 1

PropertyBufferSize = sizeof(ULONG)

Nota

L'impostazione del valore PropertyBuffer su 0 equivale a non definire affatto la chiave della proprietà del dispositivo.

La chiave della proprietà del dispositivo può essere fornita in un file INF del driver tramite AddProperty o usando un descrittore del sistema operativo MS se non è presente alcun file INF, ad esempio una fotocamera USB che usa il driver della fotocamera della posta in arrivo UVC.

Esempio di ADDProperty INF

[OptOutLidOcclusionSampleAddPropertySection]

{3AB8560B-EFCF-43C1-A7EC-130E46857AF4},2,7,,1

Esempio di descrittore del sistema operativo 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)
};

Vedi anche

KSPROPERTY_CAMERACONTROL_PRIVACY

KSPROPERTY_CAMERA_CONTROL_S

KSPROPERTY

KSEVENT

KSEVENTDATA

PROPSETID_VIDCAP_CAMERACONTROL