Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo explica como habilitar a substituição de imagem para uma câmera que dá suporte a relatórios de estado do obturador. Ele também descreve como fornecer uma imagem de substituição personalizada.
Os drivers de câmera que tinham obturadores/comutadores de privacidade antes da implementação desse recurso providenciavam amostras do sensor da câmera ou precisavam implementar uma funcionalidade proprietária para detectar o estado do obturador e substituir a própria amostra. Esse recurso permite que o driver da câmera dependa do sistema operacional para substituir a imagem no exemplo por uma solução fornecida pelo sistema operacional ou uma imagem personalizada fornecida pelo driver de câmera.
A partir do Windows 11, versão 21H2, o Programa de Compatibilidade de Hardware do Windows (WHCP) requer que câmeras com obturadores de privacidade ou interruptores de desativação relatem o estado do obturador da câmera. Esse requisito permite que o sistema operacional e os aplicativos saibam o estado atual do obturador e são usados para fornecer orientações úteis do usuário sobre como alterar o estado do obturador. Os parceiros OEM usam esse mecanismo para criar funcionalidade em seus drivers para substituir a imagem proveniente da câmera por algo informativo para os usuários. Esse recurso permite que um OEM utilize essa mesma funcionalidade sem precisar escrever código proprietário dentro de um DeviceMFT.
Requisitos
Esse recurso só é implementado por câmeras que têm tampas de privacidade/interruptores de segurança. Os detalhes de implementação para obturadores de privacidade são descritos no artigo de notificação do obturador/comutador de privacidade .
Os dispositivos que desejam dar suporte a uma imagem personalizada para substituição de imagem também devem fornecer um binário assinado, parte do pacote de driver que contém sua imagem de substituição.
Como a substituição de imagem substitui o buffer de saída existente, o dispositivo produz quadros descompactados. Para frames comprimidos como MJPEG e JPEG, não ocorre substituição de imagem, e a imagem original do driver é entregue.
Visão geral da implementação
A substituição de imagem ocorre quando um dispositivo envia a notificação de que o obturador do dispositivo está fechado. Se o estado do obturador estiver fechado e a substituição da imagem estiver habilitada, o pipeline da câmera carregará a imagem de substituição, seja de uma imagem personalizada fornecida pelo driver da câmera ou usando a imagem de substituição da caixa de entrada mostrada aqui.
Quando carregado, o pipeline converte a imagem em um buffer de saída que corresponde à mesma resolução e tipo de mídia do tipo de mídia atualmente selecionado no driver da câmera. Se as resoluções forem diferentes, a imagem será ajustada para cima ou para baixo, mas não será ajustada fora de sua proporção de aspecto existente.
A partir desse ponto, até que o estado do obturador seja alterado para aberto, todas as amostras entregues pelo driver de câmera têm seus metadados e atributos de amostra copiados em uma nova amostra e seu buffer de mídia descartado. Um novo mediabuffer é copiado da imagem do obturador traduzida e usado em vez disso. Esse novo exemplo será então enviado pelo pipeline como se fosse o exemplo original.
Guia de implementação
Para habilitar a substituição de imagem, a seguinte entrada do registro deve ser adicionada ao nó da interface de dispositivo da câmera, com um valor definido como 1.
| Tipo Regkey | Nome da Chave de Registro | Valor do Regkey |
|---|---|---|
| REG_DWORD | HabilitarSubstituiçãoDeImagem | 0x1 |
Para um arquivo INF de driver, isso pode ser adicionado conforme mostrado aqui.
...
[Device.AddReg]
HKR,,EnableImageReplacement,%REG_DWORD%,1
...
[Strings]
REG_DWORD=0x00010001
Para o Descritor MS-OS, isso pode ser adicionado como o seguinte nome:
UVC-EnableImageReplacement
Imagem personalizada
Para substituição de imagem personalizada, o driver deve fornecer o seguinte:
Um ou mais arquivos de imagem do formato BMP tipo ARGB32 com um tamanho de 1000 x 1000 pixels. Neste exemplo, é "TestImage.bmp".
Uma DLL de recurso, com o arquivo de imagem contido como um recurso. Neste exemplo, ele SampleSocMFT.dll.
Os arquivos de imagem fornecidos pelo driver devem ser uma imagem ARGB32 de 1000 x 1000 pixels. Isso substitui a imagem mostrada na visão geral da implementação. Todas as outras alterações no exemplo ocorrem conforme descrito, apenas a imagem que está sendo substituída é personalizada para o driver. A DLL do recurso deve fazer parte do pacote de driver e deve ser assinada. Para a maioria dos dispositivos, isso significa colocá-lo no Driver DeviceMFT.
Para adicionar o arquivo de imagem à DLL do recurso, modifique o arquivo de recurso do projeto *.rc com o seguinte como exemplo.
#ifdef ID_REPLACEMENT_IMAGE
#define ID_REPLACEMENT_IMAGE 200
#endif
ID_REPLACEMENT_IMAGE RCDATA "TestImage.bmp"
A próxima etapa é modificar o arquivo INF do driver. Se a DLL de recurso usada for nova, ela deverá fazer parte da diretiva CopyFiles. Por fim, três diretivas adicionais do AddReg devem ser adicionadas.
[SourceDisksFiles]
AvsCameraSim.sys=1
SampleSocMFT.dll=1
[DestinationDir]
AvsCameraSim.CopySys=13
AvsCameraSim.CopyDMFT=13
[AvsCameraSim.CopySys]
AvsCameraSim.sys
[AvsCameraSim.CopyDMFT]
SampleSocMFT.dll
[AvsCameraSim]
Include=ks.inf, kscaptur.inf
Needs=KS.registration, KSCaptur.Registration.NT
CopyFiles=AvsCameraSim.CopySys, AvsCameraSim.CopyDMFT
AddReg=AvsCameraSim.AddReg
[AvsCameraSim.AddReg]
HKR,,CameraImageResource,,%13%\%DMFT.NAME%
HKR,,CameraImageResourceID,%REG_DWORD%,%ResourceID%
HKR,,EnableImageReplacement,%REG_DWORD%,1
[Strings]
DMFT.Name="SampleSocMFT.dll"
REG_DWORD=0x00010001
;localizable
ResourceID=200
...
O INF ResourceID e o identificador ID_REPLACEMENT_IMAGE para o recurso devem corresponder. Esses valores podem ser ajustados de modo que uma única DLL de recurso possa conter várias IDs de recurso e várias imagens, e um INF possa ser localizado para selecionar a ID de recurso correta.
Borda de imagem personalizada
Para imagens personalizadas que não desejam uma borda preta quando ocorre o letterboxing, elas podem especificar uma estrutura MFARGB por meio do registro que personaliza a cor da borda da amostra de substituição.
| Tipo Regkey | Nome da Chave de Registro | Valor do Regkey |
|---|---|---|
| REG_BINÁRIO | CorDeFundoDaImagemDaCâmera | 0x1 |
Para um INF de driver, ele pode ser adicionado, conforme mostrado aqui:
...
[Device.AddReg]
HKR,,CameraImageBackgroundColor,%REG_ BINARY%,00,00,00,FF
[Strings]
REG_BINARY=0x00000001