Especificación de extensiones de Microsoft para clase de vídeo USB 1.5
1 Información general
1.1 Resumen
Las extensiones de Microsoft para la especificación de clase de vídeo USB permiten nuevos controles y la capacidad de llevar metadatos de fotogramas bien definidos en un formato estándar.
1.2 Decisiones sobre la arquitectura
La compatibilidad con metadatos de fotogramas de clase de vídeo USB (UVC) está disponible para los puntos de conexión ISOCH y BULK. Sin embargo, en el caso del punto de conexión BULK, el tamaño de los metadatos se limita a 240 bytes (ya que todos los datos de fotogramas de vídeo se transfieren en un único paquete de fotogramas de vídeo en puntos de conexión BULK).
La compatibilidad con metadatos UVC solo está disponible para cargas basadas en fotogramas.
La compatibilidad con metadatos UVC solo está disponible a través de la canalización de captura de Media Foundation (MF).
Los metadatos de UVC son opcionales. Todos los IHV/OEM que necesiten compatibilidad con metadatos deben estar habilitados a través de un archivo INF personalizado.
Los metadatos de UVC solo admiten la memoria asignada por el sistema. No se admitirán superficies VRAM o DX.
2 Introducción a la arquitectura
2.1 Descripción
2.2.1 Detección de funcionalidades a través de INF
2.2.1.1 Captura de imágenes fijas - Método 2
Es posible que algunos dispositivos UVC existentes no admitan el método 2 descrito en la sección 2.4.2.4 (Captura de imágenes fijas) del documento specification.pdf de clase UVC 1.5 que se puede descargar en el sitio web de la especificación de clase de vídeo USB.
En Windows 10, versión 1607 y anteriores, la canalización de captura no usó el método 2, incluso si un dispositivo anunciaba compatibilidad con él según la especificación UVC 1.5.
En Windows 10, versión 1703, los dispositivos que usan este método deben usar un archivo INF personalizado para el controlador de cámara, pero se requiere un INF personalizado para que el hardware especificado habilite la captura de imágenes del método 2.
Nota: el controlador de cámara puede basarse en el USBVIDEO.SYS de Windows o puede basarse en un archivo binario de controlador personalizado.
El archivo INF personalizado, basado en el controlador UVC personalizado o en el controlador UVC de bandeja de entrada, debe incluir la siguiente entrada AddReg:
EnableDependentStillPinCapture: REG_DWORD: 0x0 (Disabled) to 0x1 (Enabled)
Cuando esta entrada se establece en Enabled (0x1), la canalización de captura usa el método 2 para la captura de imágenes fijas (suponiendo que el firmware también anuncia la compatibilidad con el método 2, según lo especificado por la especificación UVC 1.5).
Un ejemplo para la sección de INF personalizada sería el siguiente:
[USBVideo.NT.Interfaces]
AddInterface=%KSCATEGORY_CAPTURE%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_RENDER_EXT%,GLOBAL,USBVideo.Interface
AddInterface=%KSCATEGORY_VIDEO_CAMERA%,GLOBAL,USBVideo.Interface
[USBVideo.Interface]
AddReg=USBVideo.Interface.AddReg
[USBVideo.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USBVideo.DeviceDesc%
HKR,,RTCFlags,0x00010001,0x00000010
HKR,,EnableDependentStillPinCapture,0x00010001,0x00000001
2.2.2 Controles de unidad de extensión
La extensión de Microsoft para la especificación de clase de vídeo USB para habilitar nuevos controles se realiza a través de una unidad de extensión identificada por GUID MS_CAMERA_CONTROL_XU (denominada Microsoft-XU).
// {0F3F95DC-2632-4C4E-92C9-A04782F43BC8}
DEFINE_GUID(MS_CAMERA_CONTROL_XU,
0xf3f95dc, 0x2632, 0x4c4e, 0x92, 0xc9, 0xa0, 0x47, 0x82, 0xf4, 0x3b, 0xc8);
Un Microsoft-XU implementado por el firmware del dispositivo aloja los nuevos controles definidos en las siguientes subsecciones. Las siguientes definiciones de solicitud se aplican a todos estos controles a menos que se especifique explícitamente una definición de invalidación para ese control. Consulte el documento specification.pdf de clase UVC 1.5 para ver las definiciones de D3, D4, GET_INFO, etc.
La solicitud GET_INFO notificará el control sin funcionalidades de actualización automática y asincrónicas (por ejemplo, los bits D3 y D4 se establecerán en 0).
La solicitud GET_LEN notificará la longitud máxima de la carga útil para este control (wLength).
La solicitud GET_RES notificará la resolución (tamaño de paso) para qwValue/dwValue. Todos los demás campos se establecerán en 0.
La solicitud GET_MIN notificará el valor mínimo admitido para qwValue/dwValue. Todos los demás campos se establecerán en 0.
La solicitud GET_MAX notificará el valor máximo admitido para qwValue/dwValue. Además, todas las marcas admitidas se establecerán en 1 en bmControlFlags. Todos los demás campos se establecerán en 0.
Las solicitudes GET_DEF y GET_CUR notificarán la configuración predeterminada y actual respectivamente para los campos qwValue/dwValue y bmControlFlags. Todos los demás campos se establecerán en 0.
El host emite una solicitud SET_CUR después de establecer todos los campos.
En la tabla siguiente se asignan los selectores de control de Microsoft-XU a sus respectivos valores y la posición del bit para el campo bmControls en descriptor de unidad de extensión:
Selector de control | Valor | Posición de bit (Campo bmControls) |
---|---|---|
MSXU_CONTROL_UNDEFINED | 0x00 | N/D |
MSXU_CONTROL_FOCUS | 0x01 | D0 |
MSXU_CONTROL_EXPOSURE | 0x02 | D1 |
MSXU_CONTROL_EVCOMPENSATION | 0x03 | D2 |
MSXU_CONTROL_WHITEBALANCE | 0x04 | D3 |
Reservada para uso futuro | 0x05 | D4 |
MSXU_CONTROL_FACE_AUTHENTICATION | 0x06 | D5 |
MSXU_CONTROL_CAMERA_EXTRINSICS | 0x07 | D6 |
MSXU_CONTROL_CAMERA_INTRINSICS | 0x08 | D7 |
MSXU_CONTROL_METADATA | 0x09 | D8 |
MSXU_CONTROL_IR_TORCH | 0x0A | D9 |
MSXU_CONTROL_DIGITALWINDOW | 0X0B | D10 |
MSXU_CONTROL_DIGITALWINDOW_CONFIG | 0X0C | D11 |
MSXU_CONTROL_VIDEO_HDR | 0X0D | D12 |
MSXU_CONTROL_FRAMERATE_THROTTLE | 0x0E | D13 |
MSXU_CONTROL_FIELDOFVIEW2_CONFIG | 0x0F | D14 |
MSXU_CONTROL_FIELDOFVIEW2 | 0x10 | D15 |
2.2.2.1 Controles cancelables
Aquí se define un control cancelable mediante la funcionalidad de actualización automática.
La solicitud GET_INFO notificará un control como un control de actualización automática (por ejemplo, el bit D3 se establecerá en 1), pero no como un control asincrónico (por ejemplo, el bit D4 se establecerá en 0).
Para este control, se puede emitir una solicitud de SET_CUR para establecer un nuevo valor (una solicitud SET_CUR(NORMAL) donde el bit bmOperationFlags:D0 está establecido en 0) o cancelar una solicitud SET_CUR(NORMAL) anterior (una solicitud SET_CUR(CANCEL) donde el bit bmOperationFlags:D0 está establecido en 1). El dispositivo debe completar inmediatamente una solicitud SET_CUR en cuanto se reciba (aunque el hardware no esté configurado o convergido con la nueva configuración solicitada). Para cada solicitud SET_CUR(NORMAL), el dispositivo genera una interrupción de cambio de control correspondiente para este control que se genera cuando se ha aplicado la nueva configuración o cuando llega una solicitud SET_CUR(CANCEL); hasta que llegue esta interrupción, la solicitud SET_CUR(NORMAL) se considera en curso. Cuando una solicitud SET_CUR(NORMAL) está en curso, las solicitudes SET_CUR(NORMAL) adicionales para este control en particular producirán un error. Una solicitud SET_CUR(CANCEL) siempre se realizará correctamente. Si no hay nada que cancelar, el dispositivo no hace nada.
La carga de interrupción de cambio de control tendrá el bit bmOperationFlags:D0 establecido en 0 si se aplicó la configuración especificada por SET_CUR(NORMAL) (por ejemplo, se produjo la convergencia) y establecido en 1 si la configuración no se aplicó debido a una solicitud SET_CUR(CANCEL) que se produjo después de la solicitud SET_CUR(NORMAL) (por ejemplo, la convergencia aún no se ha producido).
2.2.2.2 Control de enfoque
Este control permite al software host especificar la configuración de enfoque de la cámara. Se trata de un control global que afecta a todos los puntos de conexión de todas las interfaces de streaming de vídeo asociadas a la interfaz de control de vídeo.
Este control funcionará como un control cancelable (consulte la sección 2.2.2.1 para conocer los requisitos de la solicitud GET_INFO y el comportamiento funcional de la solicitud SET_CUR).
Requisito GET_MAX: este control anunciará compatibilidad con los bits D0, D1, D2, D8 y D18 en bmControlFlags.
Requisito GET_DEF: el valor predeterminado para bmControlFlags será D0 y D18 establecido en 1 y dwValue establecido en 0.
Para las solicitudes GET_CUR/SET_CUR, se aplican las restricciones siguientes para el campo bmControlFlags:
Entre los bits D0, D1 y D8, solo se puede establecer un bit; si no se establece ninguno de ellos, también es válido si se establece el bit D2.
Entre D16, D17, D18, D19 y D20, solo se puede establecer un bit, si no se establece ninguno de ellos, también es válido .
D1 no es compatible con todos los demás bits definidos actualmente (D0, D2, D8, D16, D17, D18, D19 y D20).
D2 no es compatible con D1 y D8.
D2 no es compatible con D16, D17, D18, D19 y D20 si no se establece D0.
2.2.2.3 Control de exposición
Este control permite al software host especificar la configuración de exposición de la cámara. Se trata de un control global que afecta a todos los puntos de conexión de todas las interfaces de streaming de vídeo asociadas a la interfaz de control de vídeo.
La solicitud GET_INFO notificará este control como un control asincrónico (por ejemplo, el bit D4 se establecerá en 1), pero no como un control de actualización automática (por ejemplo, el bit D3 se establecerá en 0).
Requisito GET_MAX: este control anunciará compatibilidad con los bits D0, D1 y D2 en bmControlFlags.
Requisito GET_DEF: el valor predeterminado para bmControlFlags será D0 y D18 establecido en 1 y qwValue establecido en 0.
Para las solicitudes GET_CUR/SET_CUR, se aplican las restricciones siguientes para el campo bmControlFlags:
- Entre los bits D0, D1 y D2, se establecerá al menos un bit.
- D1 no es compatible con D0 y D2.
2.2.2.4 Control de compensación EV
Este control permite al software host especificar la configuración de compensación EV para la cámara. Se trata de un control global que afecta a todos los puntos de conexión de todas las interfaces de streaming de vídeo asociadas a la interfaz de control de vídeo.
La solicitud GET_INFO notificará este control como un control asincrónico (por ejemplo, el bit D4 se establecerá en 1), pero no como un control de actualización automática (por ejemplo, el bit D3 se establecerá en 0).
La solicitud GET_RES notificará todas las resoluciones admitidas (tamaño de paso) estableciendo los bits correspondientes en bmControlFlags. Todos los demás campos se establecerán en 0.
Las solicitudes GET_MIN y GET_MAX notificarán el valor mínimo y máximo admitido para dwValue. El bit D4 (que indica el tamaño del paso de 1) será el único bit establecido en bmControlFlags. Todos los demás campos se establecerán en 0.
Las solicitudes GET_DEF, GET_CUR, SET_CUR seguirán las definiciones de la sección 2.2.2.1, pero solo tendrán un bit establecido entre D0, D1, D2, D3 y D4 bits para el campo bmControlFlags. Además, la solicitud GET_DEF tendrá dwValue establecido en 0.
2.2.2.5 Control de balance de blancos
Este control permite al software host especificar la configuración del balance de blancos para la cámara. Se trata de un control global que afecta a todos los puntos de conexión de todas las interfaces de streaming de vídeo asociadas a la interfaz de control de vídeo.
La solicitud GET_INFO notificará este control como un control asincrónico (por ejemplo, el bit D4 se establecerá en 1), pero no como un control de actualización automática (por ejemplo, el bit D3 se establecerá en 0).
Las solicitudes GET_RES, GET_MIN, GET_MAX seguirán las definiciones de la sección 2.2.2.1, pero tendrán dwValueFormat establecido en 1.
Requisito GET_MAX: este control anunciará compatibilidad con los bits D0, D1 y D2 en bmControlFlags.
Requisito GET_DEF: el valor predeterminado para bmControlFlags será D0 establecido en 1 y dwValueFormat y dwValue establecidos en 0.
Para las solicitudes GET_CUR/SET_CUR, se aplican las restricciones siguientes para el campo bmControlFlags:
- Entre los bits D0, D1 y D2, se establecerá al menos un bit.
- D1 no es compatible con D0 y D2.
2.2.2.6 Control de autenticación facial
Este control permite al software host especificar si la cámara admite modos de streaming que se usan para la autenticación facial. La compatibilidad con este control implica que la cámara está habilitada para la autenticación facial. De lo contrario, no se admitirá este control.
Este control solo es aplicable a las cámaras que pueden producir datos infrarrojos (IR) y solo se aplica a las interfaces de streaming especificadas (que es un subconjunto de todas las interfaces de streaming de vídeo asociadas a la interfaz de control de vídeo).
Las solicitudes GET_RES y GET_MIN notificarán el campo bNumEntries establecido en 0 y, por lo tanto, no tendrán campos adicionales.
Para una solicitud GET_MAX, un bit establecido en 1 en el campo bmControlFlags indica que se admite el modo correspondiente para esa interfaz de streaming. Una salida de solicitud de GET_MAX enumerará todas las interfaces de streaming habilitadas para D1 o D2 (por ejemplo, si una interfaz de streaming está habilitada para D1 o D2, se muestra; de lo contrario, no aparece en la lista). Además, no se anunciará ninguna interfaz de streaming habilitada para D1 y D2. Si una interfaz de streaming también está pensada para su uso general (por ejemplo, fuera del propósito de la autenticación facial), D0 se establecerá en 1 para esa interfaz de streaming (además de D1/D2).
Para solicitudes GET_DEF/GET_CUR/SET_CUR, un bit establecido en 1 en el campo bmControlFlags indica que se elige el modo correspondiente para esa interfaz de streaming. En estas solicitudes, se establecerá un solo un bit (entre D0, D1 y D2) para una interfaz de streaming determinada. Para la solicitud GET_DEF que devuelve la opción predeterminada (que es específica de la implementación), si una interfaz de streaming también está pensada para su uso general (por ejemplo, fuera del propósito de la autenticación facial), D0 se establecerá en 1 de forma predeterminada en esa interfaz de streaming; de lo contrario, D1 o D2 (pero no ambos) se establecerá en 1 de forma predeterminada. Una salida de solicitud GET_DEF/GET_CUR contendrá información sobre todas las interfaces de streaming enumeradas en la salida de la solicitud GET_MAX, pero una solicitud de SET_CUR solo puede incluir un subconjunto de las interfaces de streaming enumeradas en la salida de la solicitud GET_MAX.
Ejemplo:
Supongamos que una cámara tiene cuatro interfaces de streaming de vídeo con los números 0x03, 0x05, 0x08 y 0x0b, respectivamente, donde la interfaz de streaming de vídeo 0x05 genera datos RGB y las tres interfaces de streaming de vídeo restantes producen datos infrarrojos. Entre las interfaces de streaming que producen datos infrarrojos, supongamos que las interfaces de streaming 0x03 y 0x0b están habilitadas para D1, pero la interfaz de streaming 0x03 también está habilitada para D0. En este ejemplo, el control de autenticación facial solo se aplica a las interfaces de streaming 0x03 y 0x0b y, por tanto, solo estas interfaces aparecen en las solicitudes.
La salida de la solicitud GET_MAX será la siguiente:
La salida de la solicitud GET_DEF será la siguiente:
Una solicitud SET_CUR para cambiar la configuración de la interfaz de streaming 0x03 a D1 sería la siguiente:
La salida de una solicitud GET_CUR después de la solicitud SET_CUR anterior será la siguiente:
2.2.2.7 Control extrínseco de la cámara
Este control permite al software host obtener los datos extrínsecos de la cámara para los puntos de conexión en interfaces de streaming de vídeo asociadas a la interfaz de control de vídeo. Los datos obtenidos para cada punto de conexión se muestran como atributos MFStreamExtension_CameraExtrinsics en el almacén de atributos para la secuencia correspondiente (obtenido mediante la llamada a IMFDeviceTransform::GetOutputStreamAttributes).
Las solicitudes GET_RES, GET_MIN, GET_MAX, GET_CUR notificarán el campo bNumEntries establecido en 0 y, por lo tanto, no tendrán campos adicionales.
La solicitud GET_DEF enumerará todos los puntos de conexión que tengan la información extrínseca disponible.
Ejemplo:
Supongamos que una cámara tiene tres interfaces de streaming de vídeo con los números 0x03, 0x05 y 0x08, respectivamente, donde la interfaz de streaming de vídeo 0x05 admite la captura de imágenes fijas mediante el método 2, además de la captura de vídeo compatible con todas las interfaces de streaming de vídeo. Entre estas interfaces de streaming, supongamos que las interfaces de streaming 0x05 y 0x08 tienen información extrínseca disponible mientras que la interfaz de streaming 0x03 no tiene disponible la información extrínseca.
En este ejemplo, la salida de la solicitud GET_DEF será la siguiente:
2.2.2.8 Control intrínseco de la cámara
Este control permite al software host obtener los datos intrínsecos de la cámara para los puntos de conexión en interfaces de streaming de vídeo asociadas a la interfaz de control de vídeo. Los datos obtenidos para cada punto de conexión se muestran como atributos MFStreamExtension_PinholeCameraIntrinsics en el almacén de atributos para la secuencia correspondiente (obtenido mediante la llamada a IMFDeviceTransform::GetOutputStreamAttributes).
Las solicitudes GET_RES, GET_MIN, GET_MAX, GET_CUR notificarán el campo bNumEntries establecido en 0 y, por lo tanto, no tendrán campos adicionales.
La solicitud GET_DEF enumerará todos los puntos de conexión que tengan la información intrínseca disponible.
Ejemplo:
Supongamos que una cámara tiene tres interfaces de streaming de vídeo con los números 0x03, 0x05 y 0x08, respectivamente, donde la interfaz de streaming de vídeo 0x05 admite la captura de imágenes fijas mediante el método 2, además de la captura de vídeo compatible con todas las interfaces de streaming de vídeo. Entre estas interfaces de streaming, supongamos que las interfaces de streaming 0x05 y 0x08 tienen información intrínseca disponible mientras que la interfaz de streaming 0x03 no tiene disponible la información intrínseca.
En este ejemplo, la salida de la solicitud GET_DEF será la siguiente:
2.2.2.9 Control de metadatos
Este control permite que el software host consulte y controle los metadatos generados por la cámara. Se trata de un control global que afecta a todos los puntos de conexión de todas las interfaces de streaming de vídeo asociadas a la interfaz de control de vídeo.
Este control se asigna a KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA mediante el controlador de la cámara.
Si el firmware admite la solicitud SET_CUR, se aplica lo siguiente:
Las solicitudes GET_MIN, GET_DEF notificarán el campo dwValue establecido en 0.
La solicitud GET_RES notificará el campo dwValue para que sea el mismo valor notificado por la solicitud GET_MAX.
Cuando se recibe una solicitud SET_CUR con dwValue establecido en 0, la cámara no generará ningún metadato. Cuando se recibe una solicitud de SET_CUR con dwValue establecido para que sea el mismo valor notificado por la solicitud GET_MAX, la cámara puede generar metadatos y el tamaño de dichos metadatos no puede superar dwValue para ningún fotograma.
Si el firmware no admite la solicitud SET_CUR, se aplica lo siguiente:
Las solicitudes GET_MIN, GET_DEF notificarán el campo dwValue para que sea el mismo valor que el notificado por la solicitud GET_MAX.
La solicitud GET_RES notificará el campo dwValue establecido en 0.
La cámara puede generar metadatos y el tamaño total de estos metadatos no puede superar dwValue, como se indica en la solicitud GET_MAX, por 1024 bytes menos el tamaño de una carga de metadatos UsbVideoHeader, para cualquier fotograma.
Una carga de metadatos UsbVideoHeader tiene el tamaño de sizeof(KSCAMERA_METADATA_ITEMHEADER) + sizeof(KSTREAM_UVC_METADATA) o 24 bytes.
Los metadatos generados se ajustarán a los metadatos de formato estándar de Microsoft descritos en la sección 2.2.3.
2.2.2.10 Control de linterna de infrarrojos
Este control proporciona un medio flexible para que el hardware del LED de infrarrojos ir notifique la medida en que se puede controlar y proporciona la capacidad de controlarlo. Se trata de un control global que afecta a todos los puntos de conexión de todas las interfaces de streaming de vídeo asociadas a la interfaz de control de vídeo ajustando la potencia a una lámpara de infrarrojos conectada a la cámara.
Este control se asigna a KSPROPERTY_CAMERACONTROL_EXTENDED_IRTORCHMODE mediante el controlador de la cámara.
Se aplica lo siguiente:
La solicitud GET_LEN notificará un valor de 8.
La solicitud GET_INFO notificará un valor de 3. Este valor indica un control sincrónico que admite GET_CUR y SET_CUR.
La solicitud GET_MIN notificará el campo dwMode establecido en 0 y dwValue establecido en un valor que indique la potencia mínima. Un nivel de potencia de 0 puede indicar OFF, pero el nivel de energía operativo mínimo no necesita ser 0.
La solicitud GET_RES notificará el campo dwMode establecido en 0 y dwValue establecido en un número menor o igual que GET_MAX(dwValue) – GET_MIN(dwValue) y de modo que GET_MAX(dwValue) – GET_MIN(dwValue) se pueda dividir uniformemente por ese valor. dwValue puede no ser cero (0).
La solicitud GET_MAX notificará el campo dwMode establecido con los bits D[0-2] para identificar las capacidades de este control. dwMode debe tener el bit D0 establecido, lo que indica que se admite OFF y debe tener al menos otro conjunto de bits que admita un estado activo. dwValue debe establecerse en un valor que indique la potencia normal.
La solicitud GET_DEF notificará el campo dwMode establecido en el modo predeterminado en el que debe estar el sistema antes de que comience el streaming. dwMode debe establecerse en 2 (ON) o 4 (ALTERNATING). dwValue debe establecerse en el nivel de energía que se usa normalmente para el control FaceAuth. dwValue está definido por el fabricante.
La solicitud GET_CUR notificará el campo dwMode establecido en el modo de funcionamiento actual y dwValue establecido en la iluminación actual.
Cuando se recibe una solicitud SET_CUR, la linterna de infrarrojos ajusta la iluminación a una intensidad prorrateada utilizando el modo de funcionamiento solicitado.
La linterna de infrarrojos debe emitir el atributo MF_CAPTURE_METADATA_FRAME_ILLUMINATION para cada fotograma. Puede proporcionarlo a través de un MFT de dispositivo o mediante la inclusión de un atributo MetadataId_FrameIllumination en la carga de metadatos de la cámara. Consulte la sección 2.2.3.4.4.
El único propósito de estos metadatos es indicar si un fotograma está iluminado o no. Estos son los mismos metadatos que requiere el DDI KSPROPERTY_CAMERACONTROL_EXTENDED_FACEAUTH_MODE y el MSXU_FACE_AUTHENTICATION_CONTROL definido en la sección 2.2.2.6.
2.2.2.11 Control de ventana digital
La ventana digital especifica el campo de visión y zoom de la cámara mientras transmite. Este control es un posible sustituto de panorámica, inclinación y zoom. Este control solo se aplica mientras la cámara está transmitiendo activamente.
Este control está disponible para todos los tipos de cámaras y es independiente del tipo multimedia que se transmite.
Este control permite que el software host consulte y controle la ventana digital asociada a una cámara.
Se trata de un control global que afecta a todos los puntos de conexión de todas las interfaces de streaming de vídeo asociadas a la interfaz de control de vídeo. Ajusta el origen de los datos de píxeles utilizados por el ISP. Esto incluye las clavijas de captura de imágenes fijas de los métodos 2 y 3.
Este control se asigna a KSPROPERTY_CAMERACONTROL_EXTENDED_DIGITALWINDOW mediante el controlador de la cámara de bandeja de entrada.
Se aplica lo siguiente:
La solicitud GET_LEN notificará un valor de 16.
La solicitud GET_INFO notificará un valor de 3. Este valor indica un control sincrónico que admite GET_CUR y SET_CUR.
La solicitud GET_MIN notificará el campo dwMode establecido en 0, OriginX y OriginY establecidos en 0.0 y WindowSize establecido en 1.0. Esta solicitud no se usa actualmente.
La solicitud GET_RES notificará el campo dwMode establecido en 0, OriginX y OriginY establecidos en 0.0 y WindowSize establecido en 1.0. Esta solicitud no se usa actualmente.
La solicitud GET_MAX notificará el campo dwMode establecido con el bit D0 establecido para identificar las funcionalidades de este control. Un valor de 0 indica que solo se admite el modo manual. Un valor de 1 indica que se admite el modo de encuadre facial automático. Sin embargo, el resto de estos campos no se usan, se recomienda establecer OriginX y OriginY en 0.0 y WindowSize en 1.0.
La solicitud GET_DEF notificará el campo dwMode establecido en 0, OriginX y OriginY establecidos en 0.0 y WindowSize establecido en 1.0. Esta es siempre la ventana predeterminada.
La solicitud GET_CUR notificará el campo dwMode establecido en el modo operativo actual y OriginX, OriginY y WindowSize describirán la ventana digital actual.
Cuando se recibe una solicitud SET_CUR, la cámara ajusta su campo de visión para que coincida con el modo de funcionamiento seleccionado y la ventana digital.
Si se selecciona el modo de encuadre facial automático, la cámara selecciona una ventana que abarca completamente la cara dominante en la escena y se omiten los valores de OriginX, OriginY y WindowSize transferidos. Si no se encuentra ninguna cara, se usa la ventana predeterminada.
Los cambios en la ventana digital deben reflejarse en la carga de metadatos de cada ejemplo.
Es posible que los cambios en la ventana digital no sean efectivos inmediatamente, pero el control debe responder inmediatamente. Los cambios en la ventana digital deben notificarse en la carga de metadatos del fotograma en cuanto entren en vigor.
2.2.2.12 Control de configuración de ventana digital
El control de límites de configuración de ventana digital especifica los límites de escalado de la cámara dadas todas las resoluciones disponibles. Las resoluciones son independientes del tipo multimedia, por lo que dos tipos multimedia que anuncian la misma resolución de pantalla se combinan en una sola funcionalidad.
Debido a las limitaciones de tamaño de un punto de conexión de control, este control puede describir como máximo 1820 resoluciones únicas.
Este control siempre debe estar disponible para informar de las funcionalidades del control de ventana digital si ese control también está presente.
Este control se asigna a KSPROPERTY_CAMERACONTROL_EXTENDED_DIGITALWINDOW_CONFIGCAPS mediante el controlador de la cámara de bandeja de entrada.
Se aplica lo siguiente:
La solicitud GET_LEN notificará el tamaño completo de la carga. El tamaño de carga debe ser un múltiplo de 36, ya que cada definición de resolución tiene una longitud de 36 bytes.
La solicitud GET_INFO notificará un 1. Este valor indica un control sincrónico que solo admite GET_CUR.
La solicitud GET_CUR informará de una matriz de capacidades. Los campos de la estructura de funcionalidad se definieron anteriormente.
Las solicitudes GET_MIN, GET_MAX, GET_RES y GET_DEF no se usan, pero deben devolver los mismos valores que GET_CUR.
No se admiten solicitudes SET_CUR.
2.2.2.13 Control de HDR de vídeo
Este control permite al software host especificar si la cámara admite HDR de vídeo. La compatibilidad con este control implica que la cámara es capaz de realizar HDR de vídeo como el mejor esfuerzo. Si la cámara no admite HDR de vídeo, no debe implementar este control.
Este control se asigna a KSPROPERTY_CAMERACONTROL_EXTENDED_VIDEOHDR mediante el controlador de la cámara.
Se aplica lo siguiente:
La solicitud GET_LEN notificará el tamaño completo de la carga (por ejemplo, 4 bytes).
La solicitud GET_INFO notificará un valor de 3. Este valor indica un control sincrónico que admite GET_CUR, SET_CUR.
La solicitud GET_CUR notificará el campo dwMode establecido en el modo operativo actual.
GET_DEF tendrá un dwMode establecido en OFF (0).
La solicitud GET_MAX anunciará soporte técnico para los modos de operaciones disponibles: [1 (ON/OFF), 3 (ON/OFF/Auto)]. La compatibilidad con ON (1) es obligatoria para este control.
Las solicitudes GET_MIN y GET_RES notificarán 0.
La solicitud SET_CUR debe establecer el modo en OFF (0), ON (1) o AUTO (2).
2.2.2.14 Control de limitación de la velocidad de fotogramas
Este control permite al software host especificar si la cámara admite la limitación de la velocidad de fotogramas.
Este control solo se aplica mientras la cámara está transmitiendo activamente. Para transmitir activamente significa que un pin de vista previa o grabación debe estar en KSSTATE_RUN, listo y capaz de entregar fotogramas. En un conjunto si una secuencia no está activa, este control debe devolver STATUS_INVALID_DEVICE_STATE.
Incluso si se trata de un control de ámbito de filtro, el control de velocidad de fotogramas no debería afectar al pin de foto ni a las secuencias sin RGB, como IR/profundidad. Además, cuando la limitación de velocidad de fotogramas está en vigor, la duración de la muestra también debe ajustarse en consecuencia.
Este control se asigna a KSPROPERTY_CAMERACONTROL_EXTENDED_FRAMERATE_THROTTLE mediante el controlador de la cámara.
Selector de control | MSXU_CONTROL_FRAMERATE_THROTTLE |
---|---|
Solicitudes obligatorias | GET_INFO, GET_LEN, GET_RES, GET_MIN, GET_MAX, GET_DEF, GET_CUR, SET_CUR |
Solicitudes opcionales | |
wLength | 20 |
Contrapartida | Campo | Size | Valor | Descripción |
---|---|---|---|---|
0 | dwMode | 4 | Flags | D0: 0 (OFF) o 1 (ON) D1-D31: reservado y establecido en 0 |
4 | scaleFactorPercentage | 4 | Number | Este valor debe estar dentro del intervalo mínimo y máximo, y debe establecerse en un múltiplo del valor de paso. Por ejemplo: si Min = 5, Max = 100 y Step = 5 y si una aplicación decidió reducir la velocidad de fotogramas al 80 % del valor original, este valor de miembro debe establecerse en 80. Al establecer este valor adecuadamente una aplicación puede asegurarse de que la nueva velocidad de fotogramas nunca supere el valor original, ni llegue a cero, pero la velocidad de fotogramas original es posible. |
8 | min | 4 | Number | El valor mínimo debe ser igual al tamaño de un paso o debe ser un múltiplo del tamaño del paso (ejemplo: paso1, paso2, etc.). El valor mínimo no puede ser 0. El valor mínimo no se puede establecer en 0. |
12 | max | 4 | Number | El valor máximo debe establecerse en 100, lo que significa que no hay ningún cambio en la velocidad de fotogramas. |
16 | step | 4 | Number | El paso debe ser un factor estricto del valor máximo, por ejemplo, {Max % Step == 0}. Ejemplo: 1, 2, 4, 5 etc. |
Se aplica lo siguiente:
La solicitud GET_LEN notificará el tamaño completo de la carga (por ejemplo, 20 bytes).
La solicitud GET_INFO notificará un valor de 3. Este valor indica un control sincrónico que admite GET_CUR, SET_CUR.
La solicitud GET_CUR notificará el campo dwMode establecido en el modo operativo actual y scaleFactorPercentage establecido en el valor scaleFactor actual. Min, max y step deben notificar los valores como se describe en la tabla anterior.
GET_DEF debe tener un dwMode establecido en OFF(0), scaleFactorPercentage=100, Min establecido en el valor mínimo predeterminado, Max establecido en 100 y Step establecido en valor de paso predeterminado. Los valores de min y step los debe definir el fabricante, pero deben seguir las directrices mencionadas en la tabla anterior.
La solicitud GET_MAX anunciará la compatibilidad con los modos de operación disponibles y notificará el valor 1 [ ON | OFF ]. La compatibilidad con ON y OFF es obligatoria para este control. Min, max, step y scaleFactorPercentage se pueden establecer en los valores predeterminados.
Las solicitudes GET_MIN y GET_RES notificarán 0.
La solicitud SET_CUR debe establecer el modo en OFF(0), ON(1). Si dwMode se establece en ON, scaleFactorPercentage tendrá efecto. Para los casos OFF y ON, scaleFactorPercentage debe ser válido como se describe en la tabla anterior.
2.2.2.15 Control de configuración del campo de visión 2
El control de configuración del campo de visión 2 especifica los valores del grado de campo de visión diagonal admitidos como una matriz de valores. Todos los valores admitidos deben estar en el intervalo de mínimo y máximo teórico, 1 grado - 360 grados.
Si el dispositivo quiere admitir valores continuos de campo de visión, debe notificar todos los valores admitidos. Por ejemplo, si el dispositivo quiere admitir el campo de visión diagonal de 85 grados a 60 grados con un tamaño de paso de 1, este control debe notificar la matriz de valores [85, 84, 83, 82, ..., 62, 61, 60].
Este control debe estar disponible para informar de las funcionalidades cuando el control de campo de visión 2 está presente.
Este es el control de nivel de filtro sincrónico.
Este control se asigna a KSPROPERTY_CAMERACONTROL_EXTENDED_ FIELDOFVIEW2_CONFIGCAPS mediante el controlador de cámara.
Selector de control | MSXU_CONTROL_FIELDOFVIEW2_CONFIG |
---|---|
Solicitudes obligatorias | GET_INFO, GET_LEN, GET_RES, GET_MIN, GET_MAX, GET_DEF, GET_CUR |
Solicitudes opcionales | |
wLength | 4 bytes + Count multiplicado por 4 bytes, donde Count es el número de valores únicos del campo de visión. |
Contrapartida | Campo | Size | Valor | Descripción |
---|---|---|---|---|
0 | dwDefaultFieldOfView | 4 | Number | El campo de visión diagonal predeterminado debe ser uno de los valores notificados en la matriz FieldOfViewValues. |
4 | FieldOfViewValues[0] | 4 | Number | El primer valor del campo de visión, debe ser el valor FoV (campo de visión) más amplio. |
… | … | … | … | … |
4 + 4*(Count-1) | FieldOfViewValues [Count -1] | 4 | Number | El último valor del campo de visión, debe ser el valor de FoV más estrecho. |
Se aplica lo siguiente:
La solicitud GET_LEN notificará el tamaño completo de la carga.
La solicitud GET_INFO notificará un 1. Este valor indica un control sincrónico que solo admite GET_CUR.
La solicitud GET_CUR notificará los datos que contienen FoV predeterminado y la matriz de valores de FoV admitidos en orden descendente. Los campos de la estructura se definieron anteriormente.
La solicitud GET_DEF informará de los mismo que GET_CUR.
Las solicitudes GET_MIN, GET_MAX y GET_RES no se usan, pero deben devolver los mismos valores que GET_CUR.
No se admiten solicitudes SET_CUR.
Los valores de campo de visión deben estar en orden descendente; por ejemplo, el campo de visión más ancho va primero y el más estrecho va el último.
2.2.2.16 Control de campo de visión 2
Este control especifica el campo de visión base que usa la cámara cuando transmite. Este control se puede aplicar antes o durante el streaming.
Este control está disponible para todos los tipos de cámaras y es independiente del tipo multimedia que se transmite.
Este control permite que el software host consulte y controle el campo de visión asociado a una cámara.
Se trata de un control global que afecta a todos los puntos de conexión de todas las interfaces de streaming de vídeo asociadas a la interfaz de control de vídeo. Ajusta el origen de los datos de píxeles (o sensor) utilizados por el ISP (procesador de señal de imagen). Esto incluye las clavijas de captura de imágenes fijas de los métodos 2 y 3.
Este es el control de nivel de filtro sincrónico.
Este control se asigna a KSPROPERTY_CAMERACONTROL_EXTENDED_ FIELDOFVIEW2 mediante el controlador de cámara.
Selector de control | MSXU_CONTROL_FIELDOFVIEW2 |
---|---|
Solicitudes obligatorias | GET_INFO, GET_LEN, GET_RES, GET_MIN, GET_MAX, GET_DEF, GET_CUR, SET_CUR |
Solicitudes opcionales | |
wLength | 4 |
Contrapartida | Campo | Size | Valor | Descripción |
---|---|---|---|---|
0 | dwValue | 4 | Number | Valor del campo de visión diagonal en grados. |
Se aplica lo siguiente:
La solicitud GET_LEN notificará un valor de 4.
La solicitud GET_INFO notificará un 3. Este valor indica un control sincrónico que admite GET_CUR y SET_CUR.
La solicitud GET_MIN notificará el campo dwValue establecido en el valor mínimo de campo de visión admitido.
La solicitud GET_RES notificará el campo dwValue establecido en 0. Esta solicitud no se usa actualmente.
La solicitud GET_MAX notificará el campo dwValue establecido en el valor máximo de campo de visión admitido.
La solicitud GET_DEF notificará el campo dwValue establecido en el valor predeterminado de campo de visión.
La solicitud GET_CUR notificará el campo dwValue establecido en el valor actual del campo de visión.
Cuando se recibe una solicitud SET_CUR, la cámara establece su campo de visión para que coincida con el valor de dwValue especificado.
Si la cámara implementa CT_ZOOM_RELATIVE_CONTROL o CT_ZOOM_ABSOLUTE_CONTROL, estos controles se restablecerán a sus valores predeterminados cuando se llame a MSXU_CONTROL_FIELDOFVIEW2 SET_CUR.
Si la cámara implementa MSXU_CONTROL_DIGITALWINDOW, reflejará el cambio de ventana cuando se establezca un nuevo valor de campo de visión. Y viceversa, el campo de visión reflejará los cambios realizados a través de la ventana digital. Consulte KSPROPERTY_CAMERACONTROL_EXTENDED_ FIELDOFVIEW2 para obtener más información.
2.2.3 Metadatos
El diseño de metadatos de fotogramas de formato estándar se basa en el diseño de metadatos personalizados de UVC de Windows 10. En Windows 10, los metadatos personalizados se admiten para UVC mediante un INF personalizado para el controlador de cámara (nota: el controlador de cámara puede basarse en USBVIDEO.SYS de Windows, pero se requiere un INF personalizado para el hardware especificado para que los metadatos lleguen). Si la entrada del Registro MetadataBufferSizeInKB<PinIndex>
está presente y no es cero, se admiten metadatos personalizados para ese pin y el valor indica el tamaño del búfer usado para los metadatos. El campo <PinIndex>
indica un índice basado en 0 del índice de pin de vídeo.
En Windows 10, versión 1703, un controlador de cámara puede indicar compatibilidad con los metadatos de formato estándar de Microsoft mediante la inclusión de la siguiente entrada AddReg:
StandardFormatMetadata<PinIndex>
: REG_DWORD: 0x0 (NotSupported) to 0x1 (Supported)
DevProxy leerá esta clave del Registro e informa al controlador UVC de que los metadatos están en formato estándar estableciendo la marca KSSTREAM_METADATA_INFO_FLAG_STANDARDFORMAT en el campo Marcas para la estructura KSSTREAM_METADATA_INFO.
2.2.3.1 Metadatos de formato estándar de Microsoft
Los metadatos de formato estándar de Microsoft son una o varias instancias de la estructura siguiente:
typedef struct tagKSCAMERA_METADATA_ITEMHEADER {
ULONG MetadataId;
ULONG Size; // Size of this header + metadata payload following
} KSCAMERA_METADATA_ITEMHEADER, *PKSCAMERA_METADATA_ITEMHEADER;
El campo MetadataId se rellena mediante un identificador de la siguiente definición de enumeración que contiene identificadores bien definidos e identificadores personalizados (identificadores >= MetadataId_Custom_Start).
typedef enum {
MetadataId_Standard_Start = 1,
MetadataId_PhotoConfirmation = MetadataId_Standard_Start,
MetadataId_UsbVideoHeader,
MetadataId_CaptureStats,
MetadataId_CameraExtrinsics,
MetadataId_CameraIntrinsics,
MetadataId_FrameIllumination,
MetadataId_Standard_End = MetadataId_FrameIllumination,
MetadataId_Custom_Start = 0x80000000,
} KSCAMERA_MetadataId;
El campo Tamaño se establece en sizeof(KSCAMERA_METADATA_ITEMHEADER) + sizeof(Metadata Payload).
2.2.3.2 Metadatos de formato estándar generados por el firmware a partir de paquetes de fotogramas de vídeo USB
Durante una transferencia a través de UVC para vídeo basado en fotogramas, el fotograma de vídeo se empaqueta en una serie de paquetes, cada uno precedido por un encabezado de carga UVC. Cada encabezado de carga UVC se define mediante la especificación de carga basada en fotogramas de controlador de clase de vídeo USB:
Encabezado de carga
A continuación se muestra una descripción del formato de encabezado de carga para los formatos basados en fotogramas.
Campo HLE (longitud del encabezado)
El campo de longitud del encabezado especifica la longitud del encabezado, en bytes.
Campo de encabezado de campo de bits
FID: Identificador del fotograma
- Este bit se alterna en cada límite de inicio del fotograma y permanece constante para el resto del fotograma.
EOF: Fin del fotograma
- Este bit indica el final de un fotograma de vídeo y se establece en la última muestra de vídeo que pertenece a un fotograma. El uso de este bit es una optimización para reducir la latencia al completar una transferencia de fotogramas y es opcional.
PTS: Marca de tiempo de presentación
- Este bit, cuando se establece, indica la presencia de un campo PTS.
SCR: Referencia del reloj de origen
- Este bit, cuando se establece, indica la presencia de un campo SCR.
RES: Reservado.
- Establezca en 0.
STI: Imagen fija
- Este bit, cuando se establece, identifica una muestra de vídeo como perteneciente a una imagen fija.
ERR: Bit de error
- Este bit, cuando se establece, indica un error en el streaming del dispositivo.
EOH: Fin del encabezado
- Este bit, cuando se establece, indica el final de los campos BFH.
PTS: Marca de tiempo de presentación, Tamaño: 4 bytes, Valor: Número
- El campo PTS está presente cuando el bit de PTS se establece en el campo BFH[0]. Consulte la sección 2.4.3.3 "Encabezados de carga de imágenes de vídeo y fijas" en la especificación Definición de clase de dispositivo USB para dispositivos de vídeo.
SCR: Referencia del reloj de origen, Tamaño: 6 bytes, Valor: Número
- El campo SCR está presente cuando el bit de SCR se establece en el campo BFH[0]. Consulte la sección 2.4.3.3 Encabezados de carga de imágenes de vídeo y fijas en la especificación Definición de clase de dispositivo USB para dispositivos de vídeo.
El campo HLE del controlador UVC existente se fija en 2 bytes (no hay PTS/SCR presente) o hasta 12 bytes (PTS/SCR presente). Sin embargo, el campo HLE, que tiene un tamaño de bytes, puede especificar hasta 255 bytes de datos de encabezado. Si ambos PTS/SCR están presentes y HLE es superior a 12 bytes, los datos adicionales siguientes a los primeros 12 bytes del encabezado de carga se seleccionan como metadatos estándar específicos del fotograma de vídeo cuando se establece la entrada de INF StandardFormatMetadata<PinIndex>
.
Los metadatos de formato estándar (generados por firmware) para un fotograma se obtienen mediante la concatenación de los blobs parciales que se encuentran en los paquetes de fotogramas de vídeo que representan ese fotograma.
2.2.3.3 Búfer de metadatos proporcionado al componente en modo de usuario
El búfer de metadatos proporcionado al componente de modo de usuario tendría un elemento de metadatos para las marcas de tiempo UVC (generadas por el controlador UVC) seguidas de los elementos de metadatos generados por firmware y se establecen de la siguiente manera:
2.2.3.4 Formato de metadatos para identificadores de metadatos estándar
El firmware puede elegir si se van a generar metadatos correspondientes a un identificador. Si el firmware decide generar metadatos correspondientes a un identificador, los metadatos del identificador estarán presentes en todos los fotogramas emitidos por el firmware.
2.2.3.4.1 MetadataId_CaptureStats
El formato de metadatos de este identificador se define mediante la estructura siguiente:
typedef struct tagKSCAMERA_METADATA_CAPTURESTATS {
KSCAMERA_METADATA_ITEMHEADER Header;
ULONG Flags;
ULONG Reserved;
ULONGLONG ExposureTime;
ULONGLONG ExposureCompensationFlags;
LONG ExposureCompensationValue;
ULONG IsoSpeed;
ULONG FocusState;
ULONG LensPosition; // a.k.a Focus
ULONG WhiteBalance;
ULONG Flash;
ULONG FlashPower;
ULONG ZoomFactor;
ULONGLONG SceneMode;
ULONGLONG SensorFramerate;
} KSCAMERA_METADATA_CAPTURESTATS, *PKSCAMERA_METADATA_CAPTURESTATS;
El campo Flags indica cuáles de los campos posteriores de la estructura se rellenan y tienen datos válidos. El campo Flags no variará de fotograma a fotograma. Actualmente están definidas las marcas siguientes:
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_EXPOSURETIME 0x00000001
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_EXPOSURECOMPENSATION 0x00000002
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_ISOSPEED 0x00000004
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_FOCUSSTATE 0x00000008
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_LENSPOSITION 0x00000010
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_WHITEBALANCE 0x00000020
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_FLASH 0x00000040
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_FLASHPOWER 0x00000080
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_ZOOMFACTOR 0x00000100
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_SCENEMODE 0x00000200
#define KSCAMERA_METADATA_CAPTURESTATS_FLAG_SENSORFRAMERATE 0x00000400
El campo Reserved está reservado para el futuro y se establecerá en 0.
El campo ExposureTime contiene el tiempo de exposición, en 100 ns, aplicado al sensor cuando se capturó el fotograma. Esto se muestra como atributo MF_CAPTURE_METADATA_EXPOSURE_TIME en el ejemplo MF correspondiente.
El campo ExposureCompensationFlags contiene el paso de compensación de EV (exactamente una de las marcas de paso de KSCAMERA_EXTENDEDPROP_EVCOMP_XXX debe estar establecida) que se usará para transmitir el valor de compensación de EV. El campo ExposureCompensationValue contiene el valor de compensación EV en unidades del paso aplicado al sensor cuando se capturó el fotograma. Se muestran como atributo MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION en el ejemplo MF correspondiente.
El campo IsoSpeed contiene el valor de velocidad ISO aplicado al sensor cuando se capturó el fotograma. No tiene unidades. Esto se muestra como atributo MF_CAPTURE_METADATA_ISO_SPEED en el ejemplo MF correspondiente.
El campo FocusState contiene el estado de enfoque actual, que puede tomar uno de los valores definidos en la enumeración KSCAMERA_EXTENDEDPROP_FOCUSSTATE. Esto se muestra como atributo MF_CAPTURE_METADATA_FOCUSSTATE en el ejemplo MF correspondiente.
El campo LensPosition contiene la posición lógica de la lente cuando se capturó el fotograma, que no es unitaria. Este es el mismo valor que se puede consultar desde KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUS en una llamada GET. Esto se muestra como atributo MF_CAPTURE_METADATA_LENS_POSITION en el ejemplo MF correspondiente.
El campo WhiteBalance contiene el balance de blancos aplicado al sensor cuando se capturó el fotograma, que es un valor en Kelvin. Esto se muestra como atributo MF_CAPTURE_METADATA_WHITEBALANCE en el ejemplo MF correspondiente.
El campo Flash contiene un valor booleano con 1 significado flash activado y 0 significado flash off, cuando se capturó el fotograma. Esto se muestra como atributo MF_CAPTURE_METADATA_FLASH en el ejemplo MF correspondiente.
El campo FlashPower contiene la potencia flash aplicada al fotograma capturado, que es un valor en el intervalo de [0, 100]. Este campo se debe omitir si el controlador no admite la potencia ajustable para flash. Esto se muestra como atributo MF_CAPTURE_METADATA_FLASH_POWER en el ejemplo MF correspondiente.
El campo ZoomFactor contiene el valor de zoom en formato Q16 aplicado al fotograma capturado. Esto se muestra como atributo MF_CAPTURE_METADATA_ZOOMFACTOR en el ejemplo MF correspondiente.
El campo SceneMode contiene el modo de escena aplicado al fotograma capturado, que es una marca de KSCAMERA_EXTENDEDPROP_SCENEMODE_XXX de 64 bits. Esto se muestra como atributo MF_CAPTURE_METADATA_SCENE_MODE en el ejemplo MF correspondiente.
El campo SensorFramerate contiene la velocidad de lectura del sensor medida en hercios cuando se captura el fotograma, que consta de un valor numerador en la parte superior de 32 bits y un valor de denominador en el bit inferior de 32 bits. Esto se muestra como atributo MF_CAPTURE_METADATA_SENSORFRAMERATE en el ejemplo MF correspondiente.
2.2.3.4.2 MetadataId_CameraExtrinsics
El formato de metadatos de este identificador implica el KSCAMERA_METADATA_ITEMHEADER estándar seguido de una carga de matriz de bytes. La carga debe alinearse con una estructura MFCameraExtrinsics seguida de cero o más estructuras MFCameraExtrinsic_CalibratedTransform. La carga debe estar alineada con 8 bytes y todos los bytes no utilizados se producirán al final de la carga y se establecerán en 0.
2.2.3.4.3 MetadataId_CameraIntrinsics
El formato de metadatos de este identificador implica el KSCAMERA_METADATA_ITEMHEADER estándar seguido de una carga de matriz de bytes. La carga debe alinearse con una estructura MFPinholeCameraIntrinsics. La carga debe estar alineada con 8 bytes y todos los bytes no utilizados se producirán al final de la carga y se establecerán en 0.
2.2.3.4.4 MetadataId_FrameIllumination
El formato de metadatos de este identificador se define mediante la estructura siguiente:
typedef struct tagKSCAMERA_METADATA_FRAMEILLUMINATION {
KSCAMERA_METADATA_ITEMHEADER Header;
ULONG Flags;
ULONG Reserved;
} KSCAMERA_METADATA_FRAMEILLUMINATION, *PKSCAMERA_METADATA_FRAMEILLUMINATION;
El campo Flags indica información sobre el fotograma capturado. Actualmente están definidas las marcas siguientes:
#define KSCAMERA_METADATA_FRAMEILLUMINATION_FLAG_ON 0x00000001
Si se capturó un fotograma cuando la iluminación estaba activada, se establecerá la marca KSCAMERA_METADATA_FRAMEILLUMINATION_FLAG_ON. De lo contrario, no se establecerá esta marca.
El campo Reserved está reservado para uso futuro y se establecerá en 0.
Ejemplo:
Por ejemplo, una estructura KSCAMERA_METADATA_FRAMEILLUMINATION que indica que la iluminación estaba activada sería la siguiente:
KSCAMERA_METADATA_FRAMEILLUMINATION.Header.MetadataId = MetadataId_FrameIllumination;
KSCAMERA_METADATA_FRAMEILLUMINATION.Header.Size = 16; // 4 ULONG variables in total inside the structure
KSCAMERA_METADATA_FRAMEILLUMINATION.Flags = KSCAMERA_METADATA_FRAMEILLUMINATION_FLAG_ON;
KSCAMERA_METADATA_FRAMEILLUMINATION.Reserved = 0;
2.2.3.4.5 MetadataId_USBVideoHeader
El formato de metadatos de este identificador se define mediante un KSCAMERA_METADATA_ITEMHEADER común seguido de una estructura KSSTREAM_UVC_METADATA:
typedef struct
{
ULONG PresentationTimeStamp;
ULONG SourceClockReference;
union
{
struct
{
USHORT Counter : 11;
USHORT Reserved : 5;
};
USHORT SCRToken;
};
USHORT Reserved0;
ULONG Reserved1;
} KSSTREAM_UVC_METADATATYPE_TIMESTAMP, *PKSSTREAM_UVC_METADATATYPE_TIMESTAMP;
typedef struct {
KSSTREAM_UVC_METADATATYPE_TIMESTAMP StartOfFrameTimestamp;
KSSTREAM_UVC_METADATATYPE_TIMESTAMP EndOfFrameTimestamp;
} KSSTREAM_UVC_METADATA, *PKSSTREAM_UVC_METADATA;
El campo StartOfFrameTimestamp y EndOfFrameTimestamp son las marcas de tiempo contenidas en los encabezados UVC en las cargas UVC primera y última emitidas por la cámara para construir este fotograma.
Este dispositivo no debe enviar esta carga.
Esta carga de metadatos es única en el sentido en que es la única carga de metadatos generada directamente por el controlador de clase de vídeo USB a partir de la información obtenida de los encabezados de carga compatibles con UVC.
Esta carga se antepone al búfer de metadatos de cada fotograma.
Si el dispositivo admite metadatos estandarizados, debe incluir el espacio necesario para almacenar esta carga en sus requisitos de búfer, tal como indica el control metadatos definido en la sección 2.2.2.9.