Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Alguns fabricantes de câmeras podem querer incluir obturadores físicos ou kill switches que podem bloquear a câmera usando um controle físico que não pode ser substituído pelo software. Esses recursos não são incentivados devido ao risco de ativação inadvertida e consequente confusão do cliente, mas se implementados, eles devem seguir as orientações descritas em Obturadores de privacidade da câmera e kill switches, inclusive para relatar o estado do obturador / interruptor.
Quando um obturador é fechado ou um interruptor de segurança está ativo, a câmara continua totalmente funcional para o Windows e para aplicações que utilizem as APIs de câmara existentes. No entanto, a imagem ou fluxo de vídeo será preto ou escuro (ou substituído por uma imagem estática, como uma foto do dispositivo com uma seta a apontar para a localização do controlo físico). Isso levanta possíveis problemas onde 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 ficar confusos sobre por que sua câmera não está funcionando como esperado.
Para resolver essas preocupações, as câmeras que implementam obturadores ou kill switches devem implementar um mecanismo para detetar o estado do obturador / switch e relatá-lo ao sistema operacional. Este tópico fornece orientação para OEMs e ODMs que implementarão esse mecanismo de relatório e também descreve os controles e estruturas que os desenvolvedores de drivers de câmera usarão para publicar o estado do obturador/switch no sistema operacional.
Além do recurso de notificação do obturador/interruptor de privacidade, o sistema operativo implementa a deteção de oclusão da câmera frontal, quando uma câmera frontal (FFC) é coberta pela tampa do dispositivo ao ser definida a ação de fechamento do interruptor da tampa como "Não fazer nada", por exemplo, o computador não entrará em modo de repouso nem se desligará quando a tampa estiver fechada. Um exemplo de cenário poderia ser um laptop ligado a uma docking station com ecrãs externos em uso enquanto a tampa do laptop está fechada. Pode haver alguns fatores de forma do dispositivo onde esse comportamento não é desejado, portanto, um mecanismo para desativar a deteçã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 drivers não devem oferecer suporte à propriedade KSPROPERTY_CAMERACONTROL_PRIVACY control set em seus drivers.
Observação
As câmeras que implementam obturadores de privacidade ou kill switches devem estar em conformidade com os requisitos descritos em Obturadores de privacidade da câmera e kill switches.
No driver de classe de vídeo USB (UVC), o controle KSPROPERTY_CAMERACONTROL_PRIVACY é mapeado para a propriedade CT_PRIVACY_CONTROL definida na especificação de classe UVC v1.5.
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/interruptor de privacidade da câmera for alterado se houver clientes se registrando para esse KSEVENT.
O KSEVENT é emitido usando o mesmo set GUID e Id que o KSPROPERTY está usando.
Para esclarecer o que é mostrado no diagrama acima, o sistema operacional está esperando que o driver AVS implemente mecanismo, se o desenvolvedor do driver optar por suportar esse recurso, para obter e ouvir as mudanças de estado que o sensor do obturador está gerando. O sistema operativo consulta o estado pelo método get de KSPROPERTY e emite um evento KSEVENT de espera que o controlador sinalizará quando o estado do obturador for alterado. A mudança de estado do obturador/interruptor não deve impedir o funcionamento da câmara, por exemplo, para causar uma situação de erro.
OBSERVAÇÃO: Se o driver AVS suportar esse recurso, mas o hardware subjacente não, o driver AVS retornará o erro de não suportado quando o sistema operativo efetuar o registo de KSEVENT.
Métodos de deteção e relatório
Algumas câmeras detetam o estado do obturador usando um algoritmo de análise de pixel em execução no firmware do processador de sinal de imagem (ISP). Isso impõe uma limitação às câmaras, dado que a câmara deve estar a transmitir ativamente para detetar e relatar o estado do obturador. Consulte Deteção e relatório do estado do obturador para obter mais detalhes sobre quando e como a câmara deve comunicar o estado do 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 CameraOcclusionInfo Class para obter mais detalhes.
KSPROPRIEDADE
Tabela de resumo de uso (KSPROPERTY)
| Obter | Configurar | Target | Tipo de descritor de propriedade | Tipo de valor da propriedade |
|---|---|---|---|---|
| Yes | Não | Filtro | KSPROPERTY_CAMERACONTROL_S | LONGO |
O valor da propriedade (dados da operação) é um LONG que especifica se o modo de privacidade está ativado ou desativado:
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âmara está impedido de capturar imagens de vídeo
A estrutura KSPROPERTY_CAMERA_CONTROL_S deve ser preenchida da seguinte forma:
| Membro da estrutura | Valor |
|---|---|
| KSPROPERTY.Set | Deve ser PROPSETID_VIDCAP_CAMERACONTROL |
| KSPROPERTY.Id | Deve ser KSPROPERTY_CAMERACONTROL_PRIVACY |
| KSPROPERTY.Flags | Deve ser KSPROPERTY_TYPE_GET |
| Value | Inicializar a 0 |
| Bandeiras | Ignorado, definido como 0 |
| Capacidades | Ignorado, definido como 0 |
KSEVENT
Tabela de resumo de uso (KSEVENT)
| Obter | Configurar | Target | Tipo de descritor de evento | Tipo de valor do evento |
|---|---|---|---|---|
| Não | Yes | Filtro | KSEVENT | KSEVENTDATA |
A estrutura do KSEVENT deve ser preenchida da seguinte forma:
| Membro da estrutura | Valor |
|---|---|
| Configurar | Deve ser PROPSETID_VIDCAP_CAMERACONTROL |
| ID | Deve ser KSPROPERTY_CAMERACONTROL_PRIVACY |
| Bandeiras | KSEVENT_TYPE_ENABLE |
A estrutura KSEVENTDATA deve ser preenchida da seguinte forma:
| Membro da estrutura | Valor |
|---|---|
| Tipo de notificação | Deve ser KSEVENTF_EVENT_HANDLE |
Desativar a deteção de oclusão da tampa do dispositivo
Para desativar a deteçã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 MS OS 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 INF AddProperty
[OptOutLidOcclusionSampleAddPropertySection]
{3AB8560B-EFCF-43C1-A7EC-130E46857AF4},2,7,,1
Exemplo de descritor do MS OS
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)
};