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.
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à |
---|---|---|---|---|
Sì | 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 | Sì | 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)
};