Compartilhar via


Notificação do obturador/comutador de privacidade

Alguns fabricantes de câmeras podem querer incluir obturadores físicos ou interruptores de encerramento que podem bloquear a câmera usando um controle físico incapaz de ser substituído pelo software. Esses recursos não são incentivados devido ao risco de ativação inadvertida e confusão resultante do cliente, mas, se implementados, eles devem seguir as diretrizes descritas em Obturadores de privacidade da câmera e interruptores de encerramento, incluindo para relatar o estado do obturador/comutador.

Quando um obturador é fechado ou um comutador de encerramento está ativo, a câmera continua sendo totalmente funcional para o Windows e aplicativos usando APIs de câmera existentes, mas o fluxo de imagem ou vídeo será preto ou escuro (ou substituído por uma imagem estática, como uma imagem do dispositivo com uma seta apontando para o local do controle físico). Isso gera possíveis problemas em que os aplicativos que estão acessando a câmera não estão cientes de que a câmera está ocluída, e os usuários finais que ativaram involuntariamente o controle físico podem estar confusos sobre por que sua câmera não está funcionando conforme o esperado.

Para resolver essas preocupações, as câmeras que implementam obturadores ou interruptores de encerramento devem implementar um mecanismo para detectar o estado do obturador/comutador e reportá-lo ao sistema operacional. Este tópico fornece diretrizes para OEMs e ODMs que implementarão esse mecanismo de relatório e também descreve os controles e estruturas que os desenvolvedores de driver de câmera usarão para publicar o estado do obturador/comutador no sistema operacional.

Além do recurso de notificação do obturador/comutador de privacidade, o sistema operacional implementa a detecção de oclusão da câmera em que uma FFC (câmera frontal) é ocluída pela tampa do dispositivo quando a ação de fechamento do comutador de tampa é definida como "Não Fazer Nada", por exemplo, um computador não vai dormir ou desligar quando a tampa é fechada. Um cenário de exemplo pode ser um laptop encaixado com monitores externos em uso enquanto a tampa do laptop está fechada. Pode haver alguns fatores forma de dispositivo em que esse comportamento não é desejado, portanto, um mecanismo para recusar a detecção de oclusão da tampa do dispositivo é definido abaixo.

Visão geral da arquitetura

O controle KSPROPERTY_CAMERACONTROL_PRIVACY é usado quando o sistema operacional está consultando o estado atual de um driver de câmera. Ele só deve ser usado como uma propriedade Get. Os desenvolvedores de driver não devem dar suporte à propriedade Set do controle KSPROPERTY_CAMERACONTROL_PRIVACY em seus drivers.

Observação

As câmeras que implementam obturadores de privacidade ou interruptores de encerramento devem estar em conformidade com os requisitos descritos em Obturadores de privacidade da câmera e interruptores de encerramento.

No driver UVC (Classe de Vídeo USB), o controle KSPROPERTY_CAMERACONTROL_PRIVACY é mapeado para a propriedade CT_PRIVACY_CONTROL definida na Especificação de Classe UVC v1.5.

diagrama ilustrando a arquitetura de notificação do obturador de privacidade

Além do uso do controle KSPROPERTY existente, KSPROPERTY_CAMERACONTROL_PRIVACY, um novo fluxo de chamada KSEVENT é introduzido para que o driver da câmera possa sinalizar quando o estado do obturador/comutador de privacidade da câmera for alterado se houver clientes se registrando para esse KSEVENT.

O KSEVENT é emitido usando o mesmo GUID de conjunto e ID que o KSPROPERTY está usando.

Para esclarecer o que é mostrado no diagrama acima, o sistema operacional espera que o driver da AVS implemente o mecanismo, se o desenvolvedor do driver optar por dar suporte a esse recurso, para obter e ouvir as alterações de estado que o sensor do obturador está gerando. O sistema operacional consulta o estado por meio do método get KSPROPERTY e emite um KSEVENT em espera que o driver sinalizará quando o estado do obturador for alterado. A alteração do estado do obturador/comutador não deve impedir que a câmera funcione, por exemplo, para causar uma situação de erro.

NOTA: Se o driver da AVS der suporte a esse recurso, mas o hardware subjacente não, o driver da AVS retornará um erro sem suporte quando o sistema operacional emitir o registro KSEVENT .

Métodos de detecção e relatório

Algumas câmeras detectam o estado do obturador usando um algoritmo de análise de pixel em execução no firmware do ISP (Processador de Sinal de Imagem). Isso impõe uma limitação às câmeras de que a câmera deve estar transmitindo ativamente para detectar e relatar o estado do obturador. Consulte Sensor de estado do obturador e relatórios para obter mais detalhes sobre quando e como a câmera deve relatar seu estado de obturador/comutador.

Da mesma forma, os desenvolvedores de aplicativos que utilizam o sinal de oclusão da câmera não devem utilizar o estado do obturador relatado, a menos que a câmera esteja transmitindo ativamente. Consulte Classe CameraOcclusionInfo para obter mais detalhes.

KSPROPERTY

Tabela de Resumo de Uso (KSPROPERTY)

Get Configurar Target (destino) Tipo de descritor de propriedade Tipo de valor da propriedade
Yes Não Filtrar KSPROPERTY_CAMERACONTROL_S LONG

O valor da propriedade (dados de operação) é um LONG que especifica se o modo de privacidade está habilitado ou desabilitado:

  • Um valor 0 indica que o sensor da câmera pode capturar imagens de vídeo

  • Um valor de 1 indica que o sensor da câmera é impedido de capturar imagens de vídeo

A estrutura KSPROPERTY_CAMERA_CONTROL_S deve ser preenchida da seguinte maneira:

Membro da estrutura Valor
KSPROPERTY. Definir Deve ser PROPSETID_VIDCAP_CAMERACONTROL
KSPROPERTY.Id Deve ser KSPROPERTY_CAMERACONTROL_PRIVACY
KSPROPERTY. Sinalizadores Deve ser KSPROPERTY_TYPE_GET
Valor Inicializar como 0
Sinalizadores Ignorado, definido como 0
Funcionalidades Ignorado, definido como 0

KSEVENT

Tabela de Resumo de Uso (KSEVENT)

Get Configurar Target (destino) Tipo de descritor de evento Tipo de valor de evento
No Yes Filtrar KSEVENT KSEVENTDATA

A estrutura KSEVENT deve ser preenchida da seguinte maneira:

Membro da estrutura Valor
Configurar Deve ser PROPSETID_VIDCAP_CAMERACONTROL
Id Deve ser KSPROPERTY_CAMERACONTROL_PRIVACY
Sinalizadores KSEVENT_TYPE_ENABLE

A estrutura KSEVENTDATA deve ser preenchida da seguinte maneira:

Membro da estrutura Valor
Notificationtype Deve ser KSEVENTF_EVENT_HANDLE

Recusar a detecção de oclusão da tampa do dispositivo

Para recusar a detecção de oclusão da tampa do dispositivo, os OEMs podem definir a seguinte Chave de Propriedade do Dispositivo:

DEVPROPKEY

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

    DEVPROPID = 2

DEVPROPTYPE = DEVPROP_TYPE_UINT32

PropertyBuffer = (ULONG) 1

PropertyBufferSize = sizeof(ULONG)

Observação

Definir o valor PropertyBuffer como 0 é o mesmo que não definir a chave de propriedade do dispositivo.

A Chave de Propriedade do Dispositivo pode ser fornecida em um arquivo INF do driver usando AddProperty ou usando um descritor do SISTEMA OPERACIONAL MS se não houver nenhum arquivo INF, por exemplo, uma câmera USB usando o driver da câmera da caixa de entrada UVC.

Exemplo de AddProperty do INF

[OptOutLidOcclusionSampleAddPropertySection]

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

Exemplo de descritor do SISTEMA OPERACIONAL 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)
};

Confira também

KSPROPERTY_CAMERACONTROL_PRIVACY

KSPROPERTY_CAMERA_CONTROL_S

KSPROPERTY

KSEVENT

KSEVENTDATA

PROPSETID_VIDCAP_CAMERACONTROL