Compartir a través de


Imagen de reemplazo del obturador de privacidad

En este artículo se explica cómo habilitar el reemplazo de imágenes para una cámara que admita informes de estado de obturación. También se describe cómo proporcionar una imagen de reemplazo personalizada.

Los controladores de cámara que tenían obturadores/interruptores de privacidad antes de la implementación de esta característica proporcionaban muestras del sensor de la cámara o tenían que implementar una funcionalidad propietaria para detectar el estado del obturador y reemplazar la propia muestra. Esta característica permite al controlador de la cámara confiar en el sistema operativo para reemplazar la imagen de la muestra con una solución proporcionada por el sistema operativo o una imagen personalizada proporcionada por el controlador de la cámara.

A partir de Windows 11, versión 21H2, el Programa de compatibilidad de hardware con Windows (WHCP) requiere que las cámaras que vienen con obturadores de privacidad o interruptores de apagado informen del estado del obturador de la cámara. Este requisito permite que el sistema operativo y las aplicaciones conozcan el estado actual del obturador y se usa para proporcionar instrucciones de usuario útiles sobre cómo cambiar el estado del obturador. Los asociados de OEM usan este mecanismo para crear funcionalidades en sus controladores para reemplazar la imagen procedente de la cámara por algo informativo para los usuarios. Esta característica permite que un OEM use esta misma funcionalidad sin tener que escribir código propietario dentro de un DeviceMFT.

Requisitos

Esta característica solo se implementa mediante cámaras que tienen obturadores de privacidad o interruptores de apagado. Los detalles de implementación de los obturadores de privacidad se describen en el artículo Notificación de obturador/interruptor de privacidad.

Los dispositivos que quieran admitir una imagen personalizada para el reemplazo de imágenes también deben proporcionar un binario firmado, parte de su paquete de controladores que contenga su imagen de reemplazo.

Información general sobre la implementación

El reemplazo de imágenes se produce cuando un dispositivo envía la notificación de que el obturador del dispositivo está cerrado. Si el estado del obturador está cerrado y la sustitución de imágenes está habilitada, la canalización de la cámara carga la imagen de reemplazo, ya sea desde una imagen personalizada proporcionada por el controlador de cámara o mediante la imagen de reemplazo de la bandeja de entrada que se muestra aquí.

Imagen de reemplazo de bandeja de entrada.

Cuando se carga, la canalización convierte la imagen en un búfer de salida que coincide con la misma resolución y el mismo tipo de medio seleccionado actualmente del controlador de cámara. Si las resoluciones difieren, la imagen se escala o reduce verticalmente, pero no se extiende fuera de su relación de aspecto existente.

Desde ese momento, hasta que el estado del obturador cambie a abierto, todas las muestras entregadas por el controlador de la cámara tienen sus metadatos y atributos de muestra copiados en una nueva muestra y su búfer de medios descartado. Un nuevo búfer de medios se copia de la imagen de obturación convertida y se usa en su lugar. Esta nueva muestra se enviará a través de la canalización como si fuera la muestra original.

Imagen del obturador del búfer de medios.

Guía de implementación

Para habilitar el reemplazo de imágenes, se debe agregar la siguiente entrada del Registro al nodo de la interfaz del dispositivo de la cámara, con un valor establecido en 1.

Tipo de clave de Registro Nombre de clave de Registro Valor de clave de Registro
REG_DWORD EnableImageReplacement 0x1

Para un controlador INF, se puede agregar como se muestra aquí.

...

[Device.AddReg]
HKR,,EnableImageReplacement,%REG_DWORD%,1

...

[Strings]
REG_DWORD=0x00010001

Para el descriptor de MS-OS, podría agregarse como el nombre siguiente:

UVC-EnableImageReplacement

Imagen personalizada

Para el reemplazo de imágenes personalizadas, el controlador debe proporcionar lo siguiente:

  1. Uno o más archivos de imágenes con formato BMP tipo ARGB32 con un tamaño de 1000 x 1000 píxeles. En este ejemplo, es "TestImage.bmp".

  2. Un archivo DLL de recursos, con el archivo de imagen contenido como un recurso. En este ejemplo, es SampleSocMFT.dll.

Los archivos de imágenes proporcionados por el controlador deben ser una imagen ARGB32 de 1000 x 1000 píxeles. Esto reemplaza la imagen que se muestra en la introducción a la implementación. Todos los demás cambios en la muestra se producen como se describe, solo que la imagen que se va a reemplazar se personaliza para el controlador. El archivo DLL de recursos debe formar parte del paquete de controladores y debe estar firmado. Para la mayoría de los dispositivos, esto significa colocarlo en el DeviceMFT del dispositivo.

Para agregar el archivo de imágenes al archivo DLL de recursos, modifique el archivo de recursos del proyecto *.rc con lo siguiente como ejemplo.

#ifdef ID_REPLACEMENT_IMAGE
#define ID_REPLACEMENT_IMAGE    200
#endif

ID_REPLACEMENT_IMAGE     RCDATA    "TestImage.bmp"

El siguiente paso es modificar el controlador INF. Si el archivo DLL de recursos usado es nuevo, debe formar parte de la directiva CopyFiles. Por último, se deben agregar tres directivas AddReg adicionales.

[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

...

El identificador de ResourceID e ID_REPLACEMENT_IMAGE de INF deben coincidir para el recurso. Estos valores se pueden ajustar de forma que un único archivo DLL de recursos pueda contener varios identificadores de recursos y varias imágenes, y se pueda localizar un INF para seleccionar el identificador de recurso correcto.

Borde de imagen personalizado

En el caso de las imágenes personalizadas para las que no se desea un borde negro cuando se produce la conversión de cuadros de letras, pueden especificar una estructura MFARGB a través del registro que personalice el color de borde del ejemplo de reemplazo.

Tipo de clave de Registro Nombre de clave de Registro Valor de clave de Registro
REG_BINARY CameraImageBackgroundColor 0x1

Para un controlador INF, se puede agregar como se muestra aquí:

...

[Device.AddReg]
HKR,,CameraImageBackgroundColor,%REG_ BINARY%,00,00,00,FF

[Strings]
REG_BINARY=0x00000001