Udostępnij przez


Powiadomienie migawki/przełącznika prywatności

Niektórzy producenci aparatów mogą chcieć dołączyć migawki fizyczne lub wyłączniki bezpieczeństwa, które mogą zablokować kamerę przy użyciu mechanicznego sterowania, które nie może zostać zastąpione przez oprogramowanie. Te funkcje nie są zalecane ze względu na ryzyko nieumyślnej aktywacji i prowadzące do dezorientacji klientów, ale jeśli zostały zaimplementowane, muszą być zgodne ze wskazówkami opisanymi w przesłonach prywatności aparatu i przełącznikach odcinających, włączając w to raportowanie stanu przesłon/przełączników.

Gdy migawka jest zamknięta lub wyłącznik awaryjny jest aktywny, aparat nadal będzie w pełni funkcjonalny dla systemu Windows i aplikacji korzystających z istniejących interfejsów API aparatu, ale obraz lub strumień wideo będzie czarny lub ciemny (lub zastąpiony obrazem statycznym, takim jak zdjęcie urządzenia ze strzałką wskazującą lokalizację kontrolki fizycznej). Stwarza to potencjalne problemy, w których aplikacje uzyskujące dostęp do kamery nie wiedzą, że kamera jest zasłonięta, a użytkownicy końcowi, którzy przypadkowo aktywowali fizyczny element sterujący, mogą być zdezorientowani, dlaczego ich kamera nie działa tak, jak się spodziewali.

Aby rozwiązać te problemy, kamery implementujące migawki lub wyłączniki awaryjne muszą wdrożyć mechanizm wykrywania stanu migawki/przełącznika i zgłaszania go do systemu operacyjnego. Ten temat zawiera wskazówki dotyczące producentów OEM i ODM, które będą implementować ten mechanizm raportowania, a także opis kontrolek i struktur używanych przez deweloperów sterowników aparatów do publikowania stanu migawki/przełącznika do systemu operacyjnego.

Oprócz funkcji powiadamiania migawki/przełącznika prywatności system operacyjny implementuje wykrywanie okluzji aparatu, w którym przedni aparat fotograficzny (FFC) jest okludniony przez pokrywę urządzenia, gdy akcja zamknięcia przełącznika pokrywy jest ustawiona na "Nie rób nic", na przykład komputer nie przejdzie w tryb uśpienia ani wyłączyć zasilania po zamknięciu pokrywy. Przykładowym scenariuszem może być laptop podłączony do stacji dokującej z zewnętrznymi monitorami, przy zamkniętej pokrywie laptopa. Mogą istnieć pewne czynniki form urządzeń, w których takie zachowanie nie jest pożądane, dlatego poniżej zdefiniowano mechanizm rezygnacji z wykrywania okluzji pokrywy urządzenia.

Omówienie architektury

Kontrolka KSPROPERTY_CAMERACONTROL_PRIVACY jest używana, gdy system operacyjny wykonuje zapytanie o bieżący stan ze sterownika aparatu. Powinno być używane tylko jako właściwość typu Get. Deweloperzy sterowników nie mogą obsługiwać właściwości set KSPROPERTY_CAMERACONTROL_PRIVACY w swoich sterownikach.

Uwaga / Notatka

Kamery wyposażone w przesłony prywatności lub wyłączniki zabijania muszą być zgodne z wymaganiami opisanymi w przesłonach prywatności i wyłącznikach zabijania.

W sterowniku klasy wideo USB (UVC) kontrolka KSPROPERTY_CAMERACONTROL_PRIVACY jest mapowana na właściwość CT_PRIVACY_CONTROL zdefiniowaną w specyfikacji klasy UVC v1.5.

diagram ilustrujący architekturę powiadomień osłony prywatności

Oprócz korzystania z istniejącej kontrolki KSPROPERTY, KSPROPERTY_CAMERACONTROL_PRIVACY wprowadzono nowy przepływ wywołania KSEVENT, dzięki czemu sterownik aparatu może sygnalizować, gdy stan zasłony/przełącznika prywatności kamery zostanie zmieniony, jeśli klienci rejestrują się dla tego zdarzenia KSEVENT.

Zdarzenie KSEVENT jest wydawane przy użyciu tego samego identyfikatora GUID zestawu i identyfikatora, co KSPROPERTY.

Aby wyjaśnić, co pokazano na powyższym diagramie, system operacyjny oczekuje, że sterownik AVS wdroży mechanizm, jeśli deweloper sterownika zdecyduje się na obsługę tej funkcji, aby uzyskać i nasłuchiwać zmian stanu generowanych przez czujnik migawki. System operacyjny wysyła zapytanie o stan za pośrednictwem metody GET KSPROPERTY i wystawia oczekiwanie KSEVENT , że sterownik będzie sygnalizować, gdy stan migawki zostanie zmieniony. Zmiana stanu migawki/przełącznika nie może uniemożliwić działania aparatu, na przykład powodując wystąpienie błędu.

UWAGA: Jeśli sterownik AVS obsługuje tę funkcję, ale podstawowy sprzęt nie, sterownik AVS zwraca błąd 'nieobsługiwane', gdy system operacyjny wystawia rejestrację KSEVENT.

Metody wykrywania i raportowania

Niektóre aparaty wykrywają stan migawki przy użyciu algorytmu analizy pikseli działającego w oprogramowaniu układowym procesora sygnału obrazu (ISP). Nakłada to ograniczenie na te kamery, że kamera musi prowadzić transmisję strumieniową, aby wykrywać i zgłaszać stan migawki. Zobacz Wykrywanie stanu migawki i raportowanie , aby uzyskać więcej informacji na temat tego, kiedy i jak aparat musi zgłosić stan migawki/przełącznika.

Podobnie deweloperzy aplikacji używający sygnału okluzji kamery nie mogą korzystać ze zgłoszonego stanu migawki, chyba że kamera aktywnie przesyła strumień wideo. Aby uzyskać więcej informacji, zobacz CameraOcclusionInfo Class (Klasa CameraOcclusionInfo ).

KSPROPERTY

Tabela podsumowania użycia (KSPROPERTY)

Pobierz Zestaw Obiekt docelowy Typ deskryptora właściwości Typ wartości właściwości
Tak Nie. Filtr KSPROPERTY_CAMERACONTROL_S DŁUGI

Wartość właściwości (dane operacji) to LONG, który określa, czy tryb prywatności jest włączony, czy wyłączony:

  • Wartość 0 wskazuje, że czujnik kamery może przechwytywać obrazy wideo

  • Wartość 1 oznacza, że czujnik kamery nie może przechwytywać obrazów wideo

Struktura KSPROPERTY_CAMERA_CONTROL_S musi być wypełniona w następujący sposób:

Składowa struktury Wartość
KSPROPERTY. Zbiór Musi być PROPSETID_VIDCAP_CAMERACONTROL
KSPROPERTY.Id Musi być KSPROPERTY_CAMERACONTROL_PRIVACY
KSPROPERTY. Flagi Musi być KSPROPERTY_TYPE_GET
Wartość Zainicjuj do 0
flagi Ignorowane, ustawione na 0
Możliwości Ignorowane, ustawione na 0

KSEVENT

Tabela podsumowania użycia (KSEVENT)

Pobierz Zestaw Obiekt docelowy Typ deskryptora zdarzeń Typ wartości zdarzenia
Nie. Tak Filtr KSEVENT KSEVENTDATA

Struktura KSEVENT musi być wypełniona w następujący sposób:

Składowa struktury Wartość
Zestaw Musi być PROPSETID_VIDCAP_CAMERACONTROL
Id Musi być KSPROPERTY_CAMERACONTROL_PRIVACY
flagi KSEVENT_TYPE_ENABLE

Struktura KSEVENTDATA musi być wypełniona w następujący sposób:

Składowa struktury Wartość
Typ powiadomienia Musi być KSEVENTF_EVENT_HANDLE

Rezygnacja z wykrywania okluzji pokrywy urządzenia

Aby zrezygnować z wykrywania okluzji pokrywy urządzenia, producenci OEM mogą zdefiniować następujący klucz właściwości urządzenia:

DEVPROPKEY

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

    DEVPROPID = 2

DEVPROPTYPE = DEVPROP_TYPE_UINT32

PropertyBuffer = (ULONG) 1

PropertyBufferSize = sizeof(ULONG)

Uwaga / Notatka

Ustawienie wartości PropertyBuffer na 0 jest takie samo, jak niezdefiniowania klucza właściwości urządzenia w ogóle.

Klucz właściwości urządzenia można podać w pliku INF sterownika przy użyciu funkcji AddProperty lub deskryptora MS OS, jeśli nie ma pliku INF, na przykład aparatu USB za pomocą sterownika kamery skrzynki odbiorczej UVC.

Przykład właściwości INF AddProperty

[OptOutLidOcclusionSampleAddPropertySection]

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

Przykład deskryptora systemu operacyjnego 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)
};

Zobacz także

KSPROPERTY_CAMERACONTROL_PRIVACY

KSPROPERTY_CAMERA_CONTROL_S

KSPROPERTY

KSEVENT

KSEVENTDATA

PROPSETID_VIDCAP_CAMERACONTROL