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.
Este artigo explica como ativar a substituição de imagem para uma câmara que suporta 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/interruptores de privacidade antes da implementação desse recurso forneciam amostras do sensor da câmera ou precisam implementar uma funcionalidade proprietária para detetar o estado do obturador e substituir a própria amostra. Esse recurso permite que o driver da câmera confie no sistema operacional para substituir a imagem na amostra por uma solução fornecida pelo sistema operacional ou uma imagem personalizada fornecida pelo driver da câmera.
A partir do Windows 11, versão 21H2, o Programa de Compatibilidade de Hardware do Windows (WHCP) exige que as câmaras com obturadores de privacidade ou interruptores de segurança indiquem o estado do obturador. Esse requisito permite que o sistema operacional e os aplicativos saibam o estado atual do obturador e é usado para fornecer orientações úteis ao 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 que seja informativo para os usuários. Esse recurso permite que um OEM utilize essa mesma funcionalidade sem ter que escrever código proprietário dentro de um DeviceMFT.
Requerimentos
Esta funcionalidade só é implementada por câmaras que têm persianas de privacidade ou interruptores de desligamento. Os detalhes de implementação para obturadores de privacidade são descritos no artigo Notificação do obturador/interruptor de privacidade .
Os dispositivos que desejam oferecer 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 a imagem de substituição.
Como a substituição de imagem sobrescreve o buffer de saída existente, o dispositivo emite frames não compactados. Para quadros compactados como MJPEG e JPEG, não ocorre substituição de imagem e a imagem original do driver é fornecida.
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 de imagem estiver ativada, o pipeline da câmera carregará a imagem de substituição, seja a partir 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 traduz a imagem para um buffer de saída que corresponde à resolução e ao tipo de mídia atualmente selecionados no driver da câmara. Se as resoluções diferirem, a imagem será dimensionada para cima ou para baixo, mas não será esticada fora da proporção existente.
A partir desse ponto, até que o estado do obturador seja alterado para aberto, todas as amostras entregues pelo driver da câmera terão seus metadados e atributos de amostra copiados em uma nova amostra, e o seu buffer de media descartado. Um novo mediabuffer é copiado da imagem do obturador traduzida e usado em vez disso. Esta nova amostra será então enviada através do pipeline como se fosse a amostra original.
Guia de implementação
Para habilitar a substituição de imagem, a seguinte entrada do registro deve ser adicionada ao nó de interface do dispositivo da câmera, com um valor definido como 1.
| Tipo de chave de registo | Nome da chave de registro | Valor da chave de registo |
|---|---|---|
| REG_DWORD | AtivarSubstituiçãoDeImagem | 0x1 |
Para um driver INF, isto pode ser adicionado conforme demonstrado aqui.
...
[Device.AddReg]
HKR,,EnableImageReplacement,%REG_DWORD%,1
...
[Strings]
REG_DWORD=0x00010001
Para o descritor MS-OS, este nome pode ser acrescentado:
UVC-EnableImageReplacement
Imagem personalizada
Para a substituição de imagem personalizada, o driver deve fornecer o seguinte:
Um ou mais arquivos de imagem de 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, 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 inseri-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 driver INF. Se a DLL de recurso usada for nova, ela deve fazer parte da diretiva CopyFiles. Finalmente, três diretivas AddReg adicionais 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 identificador INF ResourceID e o identificador ID_REPLACEMENT_IMAGE para o recurso devem coincidir. 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 querem uma borda preta quando ocorre o letterboxing, é possível especificar uma estrutura MFARGB através do registo, que personaliza a cor da borda da amostra de substituição.
| Tipo de chave de registo | Nome da chave de registro | Valor da chave de registo |
|---|---|---|
| REG_BINARY | Cor de Fundo da Imagem da Câmara | 0x1 |
Para um driver INF, ele pode ser adicionado como mostrado aqui:
...
[Device.AddReg]
HKR,,CameraImageBackgroundColor,%REG_ BINARY%,00,00,00,FF
[Strings]
REG_BINARY=0x00000001