Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Einige Kamerahersteller möchten möglicherweise physische Verschlusse oder Kill-Schalter enthalten, die die Kamera mithilfe eines physischen Steuerelements blockieren können, das von Software nicht außer Kraft gesetzt werden kann. Diese Features werden aufgrund des Risikos einer versehentlichen Aktivierung und der daraus resultierenden Verwirrung der Kunden nicht gefördert, aber wenn sie implementiert werden, müssen sie die in Den Datenschutz-Verschluss- und Kill-Schaltern der Kamera beschriebenen Anleitungen befolgen, einschließlich, um den Zustand des Auslösers/Schalters zu melden.
Wenn ein Auslöser geschlossen oder ein Kill Switch aktiv ist, ist die Kamera weiterhin voll funktionsfähig für Windows und Anwendungen mit vorhandenen Kamera-APIs, aber der Bild- oder Videodatenstrom ist schwarz oder dunkel (oder durch ein statisches Bild ersetzt, z. B. ein Bild des Geräts mit einem Pfeil, der auf die Position des physischen Steuerelements zeigt). Dies löst potenzielle Probleme aus, bei denen Anwendungen, die auf die Kamera zugreifen, nicht wissen, dass die Kamera verdeckt ist, und Endbenutzer, die das physische Steuerelement unbeabsichtigt aktiviert haben, möglicherweise verwirrt sind, warum ihre Kamera nicht wie erwartet funktioniert.
Um diese Bedenken zu beheben, müssen Kameras, die Verschlusse oder Kill-Schalter implementieren, einen Mechanismus implementieren, um den Zustand des Verschlusses/Schalters zu erkennen und dem Betriebssystem zu melden. Dieses Thema enthält Anleitungen für OEMs und ODMs, die diesen Berichterstellungsmechanismus implementieren werden, und beschreibt auch die Steuerelemente und Strukturen, die Entwickler von Kameratreibern verwenden, um den Verschluss-/Schalterzustand im Betriebssystem zu veröffentlichen.
Zusätzlich zur Benachrichtigung über den Datenschutzverschluss/Schalter implementiert das Betriebssystem die Kameraokklusionserkennung, bei der eine Frontkamera (FFC) vom Gerätedeckel verdeckt wird, wenn die Deckelschalter-Aktion auf "Nichts tun" festgelegt ist, z. B. wird ein Computer nicht in den Energiesparmodus versetzt oder ausgeschaltet, wenn der Deckel geschlossen wird. Ein Beispielszenario könnte ein angedockter Laptop mit externen Monitoren sein, während der Deckel des Laptops geschlossen ist. Es kann einige Geräteformfaktoren geben, bei denen dieses Verhalten nicht erwünscht ist, daher wird unten ein Mechanismus zum Deaktivieren der Erkennung von Gerätedeckeldeckeln definiert.
Architekturübersicht
Das KSPROPERTY_CAMERACONTROL_PRIVACY-Steuerelement wird verwendet, wenn das Betriebssystem den aktuellen Zustand von einem Kameratreiber abfragt. Sie sollte nur als Get-Eigenschaft verwendet werden. Treiberentwickler dürfen die KSPROPERTY_CAMERACONTROL_PRIVACY Steuerungssatzeigenschaft in ihren Treibern nicht unterstützen.
Hinweis
Kameras, die Datenschutz-Verschlusse oder Kill-Schalter implementieren, müssen den Anforderungen entsprechen, die in Kamera-Datenschutzverschlusse und Kill-Schalter beschrieben sind.
Im UVC-Treiber (USB Video Class) wird das KSPROPERTY_CAMERACONTROL_PRIVACY-Steuerelement der in der UVC v1.5 Class Specification definierten CT_PRIVACY_CONTROL-Eigenschaft zugeordnet.
Neben der Verwendung des vorhandenen KSPROPERTY-SteuerelementsKSPROPERTY_CAMERACONTROL_PRIVACY wird ein neuer KSEVENT-Aufrufablauf eingeführt, damit der Kameratreiber signalisieren kann, wenn der Datenschutz-Abdeckung-/Schalterzustand der Kamera geändert wird, wenn Clients sich für dieses KSEVENT registrieren.
Das KSEVENT wird unter Verwendung derselben Set-GUID und ID gesendet, die die KSPROPERTY verwendet.
Um zu verdeutlichen, was im obigen Diagramm gezeigt wird, erwartet das Betriebssystem, dass der AVS-Treiber Mechanismus implementiert, wenn der Treiberentwickler dieses Feature unterstützt, um Zustandsänderungen abzurufen und zu überwachen, die der Verschlusssensor generiert. Das Betriebssystem fragt den Status über die KSPROPERTY-Get-Methode ab und gibt ein wartendes KSEVENT aus, das der Treiber signalisiert, wenn der Verschlussstatus geändert wird. Die Änderung des Verschluss-/Schalterzustands darf nicht dazu führen, dass die Kamera nicht mehr funktioniert oder eine Fehlersituation auftritt.
ANMERKUNG: Wenn der AVS-Treiber dieses Feature unterstützt, die zugrunde liegende Hardware jedoch nicht, gibt der AVS-Treiber keinen unterstützten Fehler zurück, wenn das Betriebssystem die KSEVENT-Registrierung ausgibt.
Erfassungs- und Berichterstellungsmethoden
Einige Kameras erkennen den Verschlusszustand mithilfe eines Pixelanalysealgorithmus, der in der IsP-Firmware (Image Signal Processor) ausgeführt wird. Dies bedeutet eine Einschränkung für Kameras, da die Kamera aktiv streamen muss, um den Verschlusszustand zu erkennen und zu melden. Weitere Informationen dazu, wann und wie die Kamera ihren Verschluss-/Schalterzustand melden muss, finden Sie unter Verschlusszustand und Berichterstellung .
Ebenso dürfen Anwendungsentwickler, die das Kamera-Okklusionssignal verwenden, nicht den gemeldeten Verschlusszustand verwenden, es sei denn, die Kamera wird aktiv gestreamt. Weitere Informationen finden Sie unter CameraOcclusionInfo Class .
KSPROPERTY
Verwendungszusammenfassungstabelle (KSPROPERTY)
| Get | Set | Ziel | Eigenschaftendeskriptortyp | Eigenschaftswerttyp |
|---|---|---|---|---|
| Ja | Nein | Filter | KSPROPERTY_CAMERACONTROL_S | LONG |
Der Eigenschaftswert (Vorgangsdaten) ist ein LONG, der angibt, ob der Datenschutzmodus aktiviert oder deaktiviert ist:
Der Wert 0 gibt an, dass der Kamerasensor Videobilder aufnehmen kann.
Der Wert 1 gibt an, dass der Kamerasensor daran gehindert wird, Videobilder aufzunehmen.
Die KSPROPERTY_CAMERA_CONTROL_S Struktur muss wie folgt ausgefüllt werden:
| Strukturelement | Wert |
|---|---|
| KSPROPERTY.Set | Muss PROPSETID_VIDCAP_CAMERACONTROL sein |
| KSPROPERTY.Id | Muss KSPROPERTY_CAMERACONTROL_PRIVACY sein |
| KSPROPERTY. Flaggen | Muss KSPROPERTY_TYPE_GET sein |
| Wert | Initialisieren auf 0 |
| Flags | Ignoriert, auf 0 festgelegt |
| Funktionen | Ignoriert, auf 0 festgelegt |
KSEVENT
Verwendungszusammenfassungstabelle (KSEVENT)
| Get | Set | Ziel | Ereignisdeskriptortyp | Ereigniswerttyp |
|---|---|---|---|---|
| Nein | Ja | Filter | KSEVENT | KSEVENTDATA- |
Die KSEVENT-Struktur muss wie folgt ausgefüllt werden:
| Strukturelement | Wert |
|---|---|
| Set | Muss PROPSETID_VIDCAP_CAMERACONTROL sein |
| Id | Muss KSPROPERTY_CAMERACONTROL_PRIVACY sein. |
| Flags | KSEVENT_TYPE_ENABLE |
Die KSEVENTDATA-Struktur muss wie folgt ausgefüllt werden:
| Strukturelement | Wert |
|---|---|
| NotificationType | Muss KSEVENTF_EVENT_HANDLE sein |
Deaktivieren der Gerätedeckel-Okklusionserkennung
Um die Okklusionserkennung des Gerätedeckels zu deaktivieren, können OEMs den folgenden Device Property Key definieren:
DEVPROPKEY
DEVPROPGUID = {3AB8560B-EFCF-43C1-A7EC-130E46857AF4}
DEVPROPID = 2
DEVPROPTYPE = DEVPROP_TYPE_UINT32
PropertyBuffer = (ULONG) 1
PropertyBufferSize = sizeof(ULONG)
Hinweis
Das Festlegen des PropertyBuffer-Werts auf 0 ist identisch mit dem Definieren des Device Property Key überhaupt nicht.
Der Device Property Key kann entweder in einer INF-Treiberdatei mithilfe von AddProperty oder mithilfe eines MS OS-Deskriptors bereitgestellt werden, wenn keine INF-Datei vorhanden ist, z. B. eine USB-Kamera mit dem UVC-Posteingangskameratreiber.
INF-Beispiel für AddProperty
[OptOutLidOcclusionSampleAddPropertySection]
{3AB8560B-EFCF-43C1-A7EC-130E46857AF4},2,7,,1
MS OS-Beschreibung (Beispiel)
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)
};