Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Algunos fabricantes de cámaras pueden querer incluir obturadores físicos o interruptores de apagado que puedan bloquear la cámara mediante un control físico que no se puede invalidar por software. Estas características no se recomiendan debido al riesgo de activación involuntaria y la confusión resultante del cliente, pero si se implementa, deben seguir las instrucciones descritas en Obturadores de privacidad de la cámara y interruptores de eliminación, incluido para informar del estado del obturador/conmutador.
Cuando un obturador está cerrado o un interruptor de eliminación está activo, la cámara sigue siendo totalmente funcional para Windows y las aplicaciones que usan las API de cámara existentes, pero la imagen o secuencia de vídeo será negra o oscura (o se reemplazará por una imagen estática, como una imagen del dispositivo con una flecha que apunta a la ubicación del control físico). Esto genera posibles problemas en los que las aplicaciones que acceden a la cámara no son conscientes de que la cámara está ocluida, y los usuarios finales que activaron involuntariamente el control físico pueden confundirse sobre por qué su cámara no funciona según lo esperado.
Para solucionar estos problemas, las cámaras que implementan obturadores o interruptores de eliminación deben implementar un mecanismo para detectar el estado del obturador/conmutador e informarlo al sistema operativo. En este tema se proporcionan instrucciones para los OEM y los ODM que implementarán este mecanismo de reporte y también se describen los controles y estructuras que los desarrolladores de controladores de cámara usarán para publicar el estado del obturador/conmutador al sistema operativo.
Además de la característica de notificación del obturador o conmutador de privacidad, el sistema operativo implementa la detección de oclusión de la cámara cuando una cámara frontal (FFC) es obstruida por la tapa del dispositivo, y la acción de cierre de la tapa está establecida en "No hacer nada", por ejemplo, un equipo no se pondrá en suspensión ni se apagará cuando se cierre la tapa. Un escenario de ejemplo podría ser un portátil acoplado con monitores externos en uso mientras la tapa del portátil está cerrada. Puede haber algunos factores de forma de dispositivo en los que no se desea este comportamiento; por lo tanto, se define un mecanismo para no participar en la detección de oclusión de la tapa del dispositivo.
Introducción a la arquitectura
El control KSPROPERTY_CAMERACONTROL_PRIVACY se usa cuando el sistema operativo consulta el estado actual desde un controlador de cámara. Solo se debe usar como propiedad Get. Los desarrolladores de controladores no deben admitir el conjunto de propiedades de control KSPROPERTY_CAMERACONTROL_PRIVACY en sus controladores.
Nota:
Las cámaras que implementan obturadores de privacidad o interruptores de desconexión deben cumplir con los requisitos descritos en Obturadores de privacidad de cámara e interruptores de desconexión.
En el controlador USB Video Class (UVC), el control KSPROPERTY_CAMERACONTROL_PRIVACY se asigna a la propiedad CT_PRIVACY_CONTROL definida en la especificación de clase UVC v1.5.
Además del uso del control KSPROPERTY existente, KSPROPERTY_CAMERACONTROL_PRIVACY, se introduce un nuevo flujo de llamadas KSEVENT para que el controlador de cámara pueda indicar cuándo cambia el estado del interruptor o el obturador de privacidad de la cámara si hay clientes que se registran para ese KSEVENT.
El KSEVENT se emite utilizando el mismo Set GUID e Id que utiliza KSPROPERTY.
Para aclarar lo que se muestra en el diagrama anterior, el sistema operativo espera que el controlador AVS implemente el mecanismo, si el desarrollador del controlador decide admitir esta característica, para obtener y escuchar los cambios de estado que está generando el sensor de obturación. El sistema operativo consulta el estado a través del método get KSPROPERTY y emite un KSEVENT en espera que el controlador señale cuando cambie el estado del obturador. El cambio de estado del obturador/conmutador no debe impedir que la cámara funcione, por ejemplo, para provocar una situación de error.
NOTA: Si el controlador AVS admite esta característica, pero el hardware subyacente no lo hace, el controlador AVS devolverá un error de no soporte cuando el sistema operativo emita el registro KSEVENT.
Métodos de detección e informes
Algunas cámaras detectan el estado del obturador mediante un algoritmo de análisis de píxeles que se ejecuta en el firmware del procesador de señal de imagen (ISP). Esto impone una limitación en las cámaras que la cámara debe estar transmitiendo activamente para detectar e informar del estado del obturador. Consulta Detección de estado de obturación e informes para obtener más detalles sobre cuándo y cómo la cámara debe notificar su estado de obturación/conmutador.
Del mismo modo, los desarrolladores de aplicaciones que usan la señal de oclusión de la cámara no deben utilizar el estado de obturación notificado a menos que la cámara esté transmitiendo activamente. Consulte la clase CameraOcclusionInfo para obtener más detalles.
KSPROPERTY
Tabla de resumen de uso (KSPROPERTY)
| Obtener | Set | Target | Tipo de descriptor de propiedad | Tipo de valor de propiedad |
|---|---|---|---|---|
| Sí | No | Filtro | KSPROPERTY_CAMERACONTROL_S | LONG |
El valor de propiedad (datos de la operación) es un LONG que especifica si el modo de privacidad está habilitado o deshabilitado:
Un valor de 0 indica que el sensor de cámara puede capturar imágenes de vídeo.
Un valor de 1 indica que se impide que el sensor de cámara capture imágenes de vídeo.
La estructura KSPROPERTY_CAMERA_CONTROL_S debe rellenarse de la siguiente manera:
| Miembro de estructura | Importancia |
|---|---|
| KSPROPERTY.Set | Debe ser PROPSETID_VIDCAP_CAMERACONTROL |
| KSPROPERTY.Id | Debe ser KSPROPERTY_CAMERACONTROL_PRIVACY |
| KSPROPERTY.Flags | Debe ser KSPROPERTY_TYPE_GET |
| Valor | Inicializar a 0 |
| Flags | Omitido, establecido en 0 |
| Capacidades | Omitido, establecido en 0 |
KSEVENT
Tabla de resumen de uso (KSEVENT)
| Obtener | Set | Target | Tipo de descriptor de evento | Tipo de valor de evento |
|---|---|---|---|---|
| No | Sí | Filtro | KSEVENT | KSEVENTDATA de |
La estructura KSEVENT debe rellenarse de la siguiente manera:
| Miembro de estructura | Importancia |
|---|---|
| Set | Debe ser PROPSETID_VIDCAP_CAMERACONTROL |
| Id | Debe ser KSPROPERTY_CAMERACONTROL_PRIVACY |
| Flags | KSEVENT_TYPE_ENABLE |
La estructura KSEVENTDATA debe rellenarse de la siguiente manera:
| Miembro de estructura | Importancia |
|---|---|
| TipoDeNotificación | Debe ser KSEVENTF_EVENT_HANDLE |
No activar la función de detección de oclusión de la cubierta del dispositivo
Para no participar en la detección de oclusión de la tapa del dispositivo, los OEM pueden definir la siguiente clave de propiedad del dispositivo:
DEVPROPKEY
DEVPROPGUID = {3AB8560B-EFCF-43C1-A7EC-130E46857AF4}
DEVPROPID = 2
DEVPROPTYPE = DEVPROP_TYPE_UINT32
PropertyBuffer = (ULONG) 1
PropertyBufferSize = sizeof(ULONG)
Nota:
Establecer el valor PropertyBuffer en 0 es el mismo que no definir la clave de propiedad del dispositivo en absoluto.
La clave de propiedad del dispositivo se puede proporcionar en un archivo INF del controlador mediante AddProperty o mediante un descriptor de SISTEMA operativo MS si no hay ningún archivo INF, por ejemplo, una cámara USB mediante el controlador de la cámara de bandeja de entrada UVC.
Ejemplo de AddProperty de INF
[OptOutLidOcclusionSampleAddPropertySection]
{3AB8560B-EFCF-43C1-A7EC-130E46857AF4},2,7,,1
Ejemplo de descriptor de SO de 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)
};