Capturar atributos de metadatos de estadísticas
En la tabla siguiente se resumen las estadísticas de captura disponibles IMFAttributes para el contenedor de atributos de metadatos de MFSampleExtension_CaptureMetaData MFT0 para la vista previa, el vídeo y la captura.
Las estadísticas de captura enumeradas para todavía son obligatorias para cada foto capturada a menos que se indique lo contrario. Las estadísticas de captura enumeradas para la versión preliminar y el vídeo deben entregarse como el mejor esfuerzo y el controlador puede o no entregar todas las estadísticas de captura en todos los fotogramas en función de las consideraciones de disponibilidad y rendimiento.
Nombre | Tipo | Anclar | Descripción |
---|---|---|---|
MF_CAPTURE_METADATA_FOCUSSTATE | UINT32 | Vista previa | Este atributo contiene el estado de foco actual que puede tomar uno de los valores siguientes. |
MF_CAPTURE_METADATA_SENSORFRAMERATE | UINT64 | Vista previa | Este atributo contiene la velocidad de lectura del sensor medido en hercios cuando se captura un fotograma de vista previa, que consta de un valor de numerador en la parte superior de 32 bits y un valor de denominador en el bit inferior de 32 bits. |
MF_CAPTURE_METADATA_FACEROIS | Blob | Vista previa, vídeo | Este atributo contiene la información del rectángulo facial detectada por el controlador. |
MF_CAPTURE_METADATA_FACEROITIMESTAMPS | Blob | Vista previa, vídeo | Este atributo contiene la información de marca de tiempo de las ROIs faciales identificadas en MF_CAPTURE_METADATA_FACEROIS. |
MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS | Blob | Vista previa, vídeo | Este atributo contiene el estado de la expresión facial y parpadeante para las ROIs faciales identificadas en MF_CAPTURE_METADATA_FACEROIS. |
MF_CAPTURE_METADATA_EXPOSURE_TIME | UINT64 | Vista previa, todavía | Este atributo contiene el tiempo de exposición aplicado en 100 nanosegundos. |
MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION | Blob | Vista previa, todavía | Este atributo contiene una marca de paso de compensación ev y un valor de compensación ev en unidades del paso que se aplicó al conductor cuando se capturó la foto. |
MF_CAPTURE_METADATA_ISO_SPEED | UINT32 | Vista previa, todavía | Este atributo contiene el valor de velocidad ISO aplicado como un entero. |
MF_CAPTURE_METADATA_LENS_POSITION | UINT32 | Vista previa, todavía | Este atributo contiene la posición de lente lógica cuando se aplicó el foco a la foto capturada. Este valor no tiene una unidad específica. |
MF_CAPTURE_METADATA_SCENE_MODE | UINT64 | Todavía | Este atributo contiene el modo de escena aplicado como una marca de UINT64KSCAMERA_EXTENDEDPROP_SCENEMODE_XXX . |
MF_CAPTURE_METADATA_FLASH | UINT32 (booleano) | Vista previa, todavía | Este atributo contiene un valor booleano que contiene el estado flash. Un valor de 1 especifica que el flash está activado y un valor de 0 especifica que el flash está desactivado para la foto capturada. |
MF_CAPTURE_METADATA_FLASH_POWER | UINT32 | Todavía | [Opcional] Este atributo contiene la potencia flash aplicada como un valor porcentual entre 0 y 100. |
MF_CAPTURE_METADATA_WHITEBALANCE | UINT32 (Kelvin) | Vista previa, todavía | Este atributo contiene el balance de blancos aplicado como un valor en Kelvin. |
MF_CAPTURE_METADATA_ZOOMFACTOR | UINT32 (Q16) | Todavía | Este atributo contiene el valor de zoom aplicado y es el mismo valor que se puede consultar desde KSPROPERTY_CAMERACONTROL_EXTENDED_ZOOM en una llamada GET. El valor debe estar en Q16. |
MF_CAPTURE_METADATA_EXIF | Blob | Todavía | [Opcional] Este atributo contiene metadatos EXIF tal y como se especifica en la sección de definición de blob. |
MF_CAPTURE_METADATA_REQUESTED_FRAME_SETTING_ID | UINT32 | Todavía | [Opcional] Este atributo contiene el identificador del marco correspondiente en la secuencia de fotos variable. Este atributo solo se establece para una captura de secuencia de fotos variable. |
MF_CAPTURE_METADATA_ISO_GAINS | Blob | Vista previa | Este atributo contiene las ganancias analógicas y digitales aplicadas al senor cuando se capturó el fotograma de vista previa. Esto no es unitario. |
MF_CAPTURE_METADATA_WHITEBALANCE_GAINS | Blob | Vista previa | Este atributo contiene las ganancias del balance de blancos aplicadas a R, G, B por el sensor o ISP cuando se capturó el fotograma de vista previa. Esto es un sin unidad. |
MF_CAPTURE_METADATA_HISTOGRAM | Blob | Vista previa | Este atributo contiene el histograma cuando se captura un marco de vista previa. |
MF_CAPTURE_METADATA_FRAME_ILLUMINATION | UINT64 | Pin de IR usado para Hello | Este atributo para cámaras IR especifica si los fotogramas usan la iluminación de IR activa y deben usarse junto con FACEAUTH_MODE_ALTERNATIVE_FRAME_ILLUMINATION. |
Cualquier GUID personalizado | Cualquier tipo de variante | Este atributo contiene los datos personalizados asociados al GUID personalizado. |
MF_CAPTURE_METADATA_FOCUSSTATE
MF_CAPTURE_METADATA_FOCUSSTATE atributo contiene el estado de foco actual que puede tomar uno de los siguientes valores.
typedef enum
{
KSCAMERA_EXTENDEDPROP_FOCUSSTATE_UNINITIALIZED = 0,
KSCAMERA_EXTENDEDPROP_FOCUSSTATE_LOST,
KSCAMERA_EXTENDEDPROP_FOCUSSTATE_SEARCHING,
KSCAMERA_EXTENDEDPROP_FOCUSSTATE_FOCUSED,
KSCAMERA_EXTENDEDPROP_FOCUSSTATE_FAILED,
} KSCAMERA_EXTENDEDPROP_FOCUSSTATE;
MF_CAPTURE_METADATA_SENSORFRAMERATE
MF_CAPTURE_METADATA_SENSORFRAMERATE atributo contiene la velocidad de lectura del sensor medido en hercios cuando se captura un marco de vista previa, 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.
MF_CAPTURE_METADATA_FACEROIS
MF_CAPTURE_METADATA_FACEROIS atributo contiene la información del rectángulo facial detectada por el controlador. De forma predeterminada, driver\MFT0 debe proporcionar la información de cara en la secuencia de vista previa. Si el controlador anuncia la funcionalidad en otros flujos, driver\MFT debe proporcionar la información de cara en las secuencias correspondientes si la aplicación habilita la detección de caras en esos flujos. Cuando la estabilización de vídeo está habilitada en el controlador, se debe proporcionar la información de la cara después de la estabilización de vídeo. Las estructuras de datos siguientes describen el formato de blob para MF_CAPTURE_METADATA_FACEROIS. La cara dominante debe ser la primera FaceRectInfo en el blob.
typedef struct tagFaceRectInfoBlobHeader
{
ULONG Size; // Size of this header + all FaceRectInfo following
ULONG Count; // Number of FaceRectInfo’s in the blob
} FaceRectInfoBlobHeader;
typedef struct tagFaceRectInfo
{
RECT Region; // Relative coordinates on the frame that face detection is running (Q31 format)
LONG ConfidenceLevel; // Confidence level of the region being a face ([0, 100])
} FaceRectInfo;
Tenga en cuenta que las estructuras FaceRectinfoBlobHeader y FaceRectInfo solo describen el formato de blob para el atributo MF_CAPTURE_METADATA_FACEROIS. La estructura de elementos de metadatos de las ROIs de cara (KSCAMERA_METADATA_ITEMHEADER + carga de metadatos de las ROIs faciales) es hasta el controlador y debe estar alineada con 8 bytes.
Por diseño, si una secuencia está configurada con la detección de caras habilitada y la escena en cuestión no contiene ninguna cara durante la captura, el controlador sigue siendo necesario para adjuntar un atributo "ficticio" MF_CAPTURE_METADATA_FACEROIS a cada muestra que no tiene información de cara asociada. (Un atributo de ROI de cara "ficticio" tiene el campo Recuento de la estructura FaceRectInfoBlobHeader establecida en cero).
MF_CAPTURE_METADATA_FACEROITIMESTAMPS
MF_CAPTURE_METADATA_FACEROITIMESTAMPS atributo contiene la información de marca de tiempo de las ROIs faciales identificadas en MF_CAPTURE_METADATA_FACEROIS. Para el dispositivo que no puede proporcionar la marca de tiempo para las ROIs faciales, se debe omitir este atributo.
La estructura de datos siguiente describe el formato de blob para MF_CAPTURE_METADATA_FACEROITIMESTAMPS.
typedef struct tagMetadataTimeStamps
{
ULONG Flags; // Bitwise OR of MF_METADATATIMESTAMPS_XXX flags
LONGLONG Device; // QPC time for the sample where the face rect is derived from (in 100ns)
LONGLONG Presentation; // PTS for the sample where the face rect is derived from (in 100ns)
} MetadataTimeStamps;
En el campo Marcas, definiremos las marcas de bits siguientes para indicar qué marca de tiempo es válida. MFT0 debe establecer Marcas en MF_METADATATIEMSTAMPS_DEVICE y el tiempo de QPC adecuado para El dispositivo, si el controlador proporciona los metadatos de marca de tiempo para las ROIs de cara.
#define MF_METADATATIMESTAMPS_DEVICE 0x00000001
#define MF_METADATATIMESTAMPS_PRESENTATION 0x00000002
Tenga en cuenta que la estructura MetadataTimeStamps solo describe el formato de blob para el atributo MF_CAPTURE_METADATA_FACEROITIMESTAMPS. La estructura del elemento de metadatos para la marca de tiempo (KSCAMERA_METADATA_ITEMHEADER + carga de metadatos de marca de tiempo) es hasta el controlador y debe estar alineada con 8 bytes.
MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS
MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS atributo contiene el estado de expresión facial y parpadeo para las ROIs faciales identificadas en MF_CAPTURE_METADATA_FACEROIS. Para el dispositivo que no admite la detección de expresiones faciales y parpadeos, este atributo debe omitirse.
La estructura de datos siguiente describe el formato de blob para MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS.
Tenga en cuenta que las estructuras Face AttributeBlobHeader y Face Attribute solo describen el formato de blob para el atributo MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS. La estructura del elemento de metadatos para las caracterizaciones faciales (KSCAMERA_METADATA_ITEMHEADER + carga de metadatos de caracterizaciones faciales) es hasta el controlador y debe estar alineada con 8 bytes.
typedef struct tagFaceCharacterizationBlobHeader
{
ULONG Size; // Size of this header + all FaceCharacterization following
ULONG Count; // Number of FaceCharacterization’s in the blob. Must match the number of FaceRectInfo’s in FaceRectInfoBlobHeader
} FaceCharacterizationBlobHeader;
typedef struct tagFaceCharacterization
{
ULONG BlinkScoreLeft; // [0, 100]. 0 indicates no blink for the left eye. 100 indicates definite blink for the left eye
ULONG BlinkScoreRight; // [0, 100]. 0 indicates no blink for the right eye. 100 indicates definite blink for the right eye
ULONG FacialExpression; // Any one of the MF_METADATAFACIALEXPRESSION_XXX defined
ULONG FacialExpressionScore; // [0, 100]. 0 indicates no such facial expression as identified. 100 indicates definite such facial expression as defined
} FaceCharacterization;
A continuación se define la posible expresión facial que se puede detectar.
#define MF_METADATAFACIALEXPRESSION_SMILE 0x00000001
Si MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS atributo presenta, el número y el orden de las entradas FaceObject de su blob deben coincidir con el número y el orden de las entradas FaceRectInfo en el blob de MF_CAPTURE_METADATA_FACEROIS. Cada entrada FaceOvariante representa el estado de expresión parpadeante o facial de la cara en la entrada FaceRectInfo correspondiente en el mismo índice.
En la ilustración siguiente se muestran los diseños de un blob de caracterizaciones faciales y un blob de ROIs facial de cuatro caras con el primero ni parpadeando ni sonriendo, el segundo parpadeando el ojo izquierdo, el tercero sonriendo y el cuarto parpadeando (ambos ojos) y sonriendo.
MF_CAPTURE_METADATA_EXPOSURE_TIME
MF_CAPTURE_METADATA_EXPOSURE_TIME atributo contiene el tiempo de exposición aplicado al sensor cuando se capturó la vista previa o el marco de fotos, que es un UINT64 y está en 100ns.
MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION
MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION atributo contiene una marca de paso de compensación de EV y un valor de compensación de EV en unidades del paso aplicado al sensor cuando se capturó la vista previa o marco de foto.
La estructura de datos siguiente describe el formato de blob para MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION.
typedef struct tagCapturedMetadataExposureCompensation
{
UINT64 Flags; // KSCAMERA_EXTENDEDPROP_EVCOMP_XXX step flag
INT32 Value; // EV Compensation value in units of the step
} CapturedMetadataExposureCompensation;
Tenga en cuenta que capturedMetadataExposureCompensation solo describe el formato de blob para el atributo MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION. La estructura de elementos de metadatos para la compensación de EV (KSCAMERA_METADATA_ITEMHEADER + carga de metadatos de compensación de EV) es hasta el controlador y debe estar alineada con 8 bytes.
MF_CAPTURE_METADATA_ISO_SPEED
MF_CAPTURE_METADATA_ISO_SPEED atributos contiene el valor de velocidad ISO aplicado al sensor cuando se capturó la vista previa o el marco fotográfico. Esto no es unitario.
MF_CAPTURE_METADATA_ISO_GAINS
MF_CAPTURE_METADATA_ISO_GAINS atributo contiene las ganancias analógicas y digitales aplicadas al senor cuando se capturó el fotograma de vista previa. Esto no es unitario.
En la estructura de datos siguiente se describe el formato de blob para MF_CAPTURE_METADATA_ISO_GAINS.
typedef struct tagCapturedMetadataISOGains
{
FLOAT AnalogGain;
FLOAT DigitalGain;
} CapturedMetadataISOGains;
Tenga en cuenta que capturedMetadataISOGains solo describe el formato de blob para el atributo MF_CAPTURE_METADATA_ISO_GAINS. La estructura de elementos de metadatos para las ganancias ISO (KSCAMERA_METADATA_ITEMHEADER + carga de metadatos de ganancias ISO) es hasta el controlador y debe estar alineada con 8 bytes.
MF_CAPTURE_METADATA_LENS_POSITION
MF_CAPTURE_METADATA_LENS_POSITION atributo contiene la posición lógica de la lente cuando se capturó la vista previa o el marco de fotos, que no es unitaria. Este es el mismo valor que se puede consultar desde KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUS en una llamada GET.
MF_CAPTURE_METADATA_SCENE_MODE
MF_CAPTURE_METADATA_SCENE_MODE atributo contiene el modo de escena aplicado a la foto capturada, que es una marca de KSCAMERA_EXTENDEDPROP_SCENEMODE_XXX de 64 bits.
MF_CAPTURE_METADATA_FLASH
MF_CAPTURE_METADATA_FLASH atributo contiene un valor booleano cuando se capturó la vista previa o el marco de fotos, con 1 significado flash encendido y 0 significado flash off.
MF_CAPTURE_METADATA_FLASH_POWER
MF_CAPTURE_METADATA_FLASH_POWER atributo contiene la potencia flash aplicada a la foto capturada, que es un valor en el intervalo de [0, 100]. Este atributo debe omitirse si el controlador no admite la potencia ajustable para flash.
MF_CAPTURE_METADATA_WHITEBALANCE
MF_CAPTURE_METADATA_WHITEBALANCE atributo contiene el balance de blancos aplicado al sensor cuando se capturó la vista previa o el marco de fotos, que es un valor de Kevin.
MF_CAPTURE_METADATA_WHITEBALANCE_GAINS
MF_CAPTURE_METADATA_WHITEBALANCE_GAINS atributo contiene las ganancias del saldo blanco aplicadas a R, G, B por el sensor o ISP cuando se capturó el fotograma de vista previa. Esto es un sin unidad.
La estructura de datos siguiente describe el formato de blob para MF_CAPTURE_METADATA_WHITEBALANCE_GAINS.
typedef struct tagCapturedMetadataWhiteBalanceGains
{
FLOAT R;
FLOAT G;
FLOAT B;
} CapturedMetadataWhiteBalanceGains;
Tenga en cuenta que capturedMetadataWhiteBalanceGains solo describe el formato de blob para el atributo MF_CAPTURE_METADATA_WHITEBALANCE_GAINS. La estructura de elementos de metadatos para las ganancias del saldo blanco (KSCAMERA_METADATA_ITEMHEADER + carga útil de metadatos de ganancias de saldo blanco) es hasta el controlador y debe estar alineada con 8 bytes.
MF_CAPTURE_METADATA_ZOOMFACTOR
MF_CAPTURE_METADATA_ZOOMFACTOR atributo contiene el valor de zoom aplicado a la foto capturada, que es el mismo valor que se puede consultar desde KSPROPERTY_CAMERACONTROL_EXTENDED_ZOOM en una llamada GET. Esto debe estar en la Q16.
MF_CAPTURE_METADATA_EXIF
MF_CAPTURE_METADATA_EXIF contiene metadatos exIF como se especifica en la sección 3.1 (definición de blob). MFT0 extraerá los metadatos EXIF sin procesar, que se identifican como un elemento de metadatos personalizado (MetadataId >= MetadataId_Custom_Start), del búfer de MF_CAPTURE_METADATA_FRAME_RAWSTREAM proporcionado por el controlador. A continuación, MFT0 convertirá los datos sin procesar en un atributo MF_CAPTURE_METADATA_EXIF.
Definición de blob
El blob constará de un encabezado TIFF completo, el 0º IFD y el sub-IFD EXIF, tal como se define en las especificaciones EXIF 2.3 y TIFF 6.0. El blob no contendrá ningún dato antes del encabezado TIFF. El blob no contendrá ningún dato después del final del 0º IFD. Por ejemplo, no es válido incluir un IFD que contenga datos en miniatura.
En el diagrama siguiente, copiado de la especificación TIFF, se muestra el diseño de memoria esperado:
A continuación se muestran los requisitos que son coherentes con las especificaciones EXIF y TIFF, pero que se destacan por énfasis:
- El orden de bytes será little endian ("II") o big endian("MM").
- Los punteros ("desplazamientos de bytes" en la especificación TIFF) serán relativos al principio del encabezado TIFF.
A continuación se muestran los requisitos más restrictivos que las especificaciones EXIF y TIFF:
- El desplazamiento a la siguiente IFD será 0, es decir, no se señala ningún IFD adicional.
- El encabezado TIFF y el 0º IFD serán contiguos, es decir, el desplazamiento a la 0ª IFD tal como se almacena en bytes 4-7 será 0x8.
Metadatos EXIF obligatorios
En la sección siguiente se describen los metadatos exIF que se deben incluir en MF_CAPTURE_METADATA_EXIF .
Nombre | Etiqueta EXIF | Descripción |
---|---|---|
Orientación | 274 | Orientación de imagen vista en términos de filas y columnas. Consulte especificación EXIF para obtener una descripción completa. |
Make | 271 | Fabricante del equipo de grabación |
Modelo | 272 | El nombre del modelo o el número de modelo del dispositivo |
XResolution | 282 | Número de píxeles por unidad de resolución en la dirección ImageWidth |
YResolution | 283 | Número de píxeles por unidad de resolución en la dirección ImageLength |
ResolutionUnit | 296 | Unidad para medir XResolution e YResolution |
Software | 305 | Nombre y versión del firmware |
ColorSpace | 40961 | Información del espacio de colores, normalmente sRGB |
SubsSecTimeOriginal | 37521 | Registra fracciones de segundos asociadas a la etiqueta DateTimeOriginal |
SubSecTimeDigitized | 37522 | Registra fracciones de segundos asociadas a la etiqueta DateTimeDigitized |
ExposureTime | 33434 | Tiempo de exposición en segundos (preciso a 0,001s) |
FNumber | 33437 | Número F usado para la captura |
ISOSpeedRatings | 34855 | Valor de velocidad ISO tal y como se define en ISO 12322, basado en saturación |
DateTimeOriginal | 36867 | Fecha y hora en que se generaron los datos de imagen originales |
DateTimeDIgitized | 36868 | Fecha y hora en que la imagen se almacena como datos digitales |
Shutter SpeedValue | 37377 | Velocidad de obturación en unidades de sistema aditivo de exposición fotográfica (APEX) |
Valor de apertura | 37378 | Apertura de la lente en unidades APEX |
Valor de ExposureBias | 37380 | Valor de sesgo de exposición en unidades de APEX |
MeteringMode | 37383 | Modo de medición de AE (consulte especificación EXIF) |
LightSource | 37384 | El tipo de fuente de luz (ver especificación EXIF) |
Intermitente | 37385 | Estado del flash durante la captura de imagen |
Focallength | 37386 | La longitud focal real de la lente |
ExposureMode | 41986 | Modo de exposición durante la captura |
WhiteBalance | 41987 | Modo de equilibrio de blancos durante la captura |
DigitalZoomRatio | 41988 | Relación de zoom digital durante la captura de imágenes |
FocalLengthIn35mmFilm | 41989 | Longitud focal equivalente de 35 mm |
SceneCaptureType | 41990 | Tipo de escena que se disparó |
Metadatos opcionales o definidos por OEM
El controlador de cámara puede incluir metadatos adicionales en forma de etiquetas EXIF personalizadas siempre que se ajuste a la especificación EXIF y se almacene en el 0th TIFF IFD o en el sub-IFD EXIF.
Requisitos de MakerNote y expectativas de diseño binario
El controlador de cámara puede incluir información propietaria del fabricante en forma de nota de creador (etiqueta 37500). La nota del creador no debe contener ningún puntero a los datos que estén fuera de la nota del creador, incluidos el inicio del archivo y la posición del encabezado TIFF. Además, no debe realizar suposiciones sobre la endianidad del archivo tal como se especifica en el encabezado TIFF.
En general, el sistema operativo no garantiza que el diseño binario del blob de metadatos se conserve cuando se escribe en la secuencia JPEG de salida. Solo garantiza que los metadatos se escriben de acuerdo con la especificación EXIF. Por ejemplo, solo garantiza que la nota del creador se copia como un bloque contiguo y se identifica mediante la etiqueta IFD, el tipo y el desplazamiento correctos.
Uso con codificador WIC JPEG
El uso previsto de MF_CAPTURE_METADATA_EXIF es con el codificador JPEG del componente de imágenes de Windows (WIC) proporcionado por el sistema operativo. Cámara de Windows canalización usa el codificador JPEG wic de Windows para consumir metadatos EXIF obtenidos de MF_CAPTURE_METADATA_EXIF y muxes esto con datos de píxeles de imagen en un archivo JPEG cuando la aplicación no captura un JPEG directamente desde la cámara, pero la canalización configurada para capturar en NV12/YUY2 y obtener codificada por el sistema operativo
MF_CAPTURE_METADATA_REQUESTED_FRAME_SETTING_ID
MF_CAPTURE_METADATA_REQUESTED_FRAME_SETTING_ID atributo contiene el identificador de marco del marco correspondiente en la secuencia de fotos variable. Este atributo solo se establece para una captura de secuencia de fotos variable.
MF_CAPTURE_METADATA_FRAME_ILLUMINATION
MF_CAPTURE_METADATA_FRAME_ILLUMINATION atributo para cámaras IR especifica si los fotogramas usan iluminación de IR activa y deben usarse junto con FACEAUTH_MODE_ALTERNATIVE_FRAME_ILLUMINATION. Solo se usa para muestras de IR y no debe estar presente en fotogramas RGB si la cámara admite muestras de ir y de color.
El valor debe establecerse en 0xXXXXXXXXXXXXXXXXXX1 si el marco se capturó cuando la iluminación activa estaba activada y se estableció en 0xXXXXXXXXXXXXXXXXXXXXX0 si no había iluminación al capturar el marco.
MF_CAPTURE_METADATA_HISTOGRAM
MF_CAPTURE_METADATA_HISTOGRAM atributo contiene el histograma cuando se captura un marco de vista previa.
Las estructuras de datos siguientes describen el formato de blob para MF_CAPTURE_METADATA_HISTOGRAM.
typedef struct tagHistogramGrid
{
ULONG Width; // Width of the sensor output that histogram is collected from
ULONG Height; // Height of the sensor output that histogram is collected from
RECT Region; // Absolute coordinates of the region on the sensor output that the histogram is collected for
} HistogramGrid;
typedef struct tagHistogramBlobHeader
{
ULONG Size; // Size of the entire histogram blob in bytes
ULONG Histograms; // Number of histograms in the blob. Each histogram is identified by a HistogramHeader
} HistogramBlobHeader;
typedef struct tagHistogramHeader
{
ULONG Size; // Size of this header + (HistogramDataHeader + histogram data following) * number of channels available
ULONG Bins; // Number of bins in the histogram
ULONG FourCC; // Color space that the histogram is collected from
ULONG ChannelMasks; // Masks of the color channels that the histogram is collected for
HistogramGrid Grid; // Grid that the histogram is collected from
} HistogramHeader;
typedef struct tagHistogramDataHeader
{
ULONG Size; // Size in bytes of this header + histogram data following
ULONG ChannelMask; // Mask of the color channel for the histogram data
ULONG Linear; // 1, if linear; 0 nonlinear
} HistogramDataHeader;
En el campo ChannelMasks, definiremos las máscaras de bits siguientes para indicar los canales disponibles en el histograma.
#define MF_HISTOGRAM_CHANNEL_Y 0x00000001
#define MF_HISTOGRAM_CHANNEL_R 0x00000002
#define MF_HISTOGRAM_CHANNEL_G 0x00000004
#define MF_HISTOGRAM_CHANNEL_B 0x00000008
#define MF_HISTOGRAM_CHANNEL_Cb 0x00000010
#define MF_HISTOGRAM_CHANNEL_Cr 0x00000020
Notas:
- Cada blob puede contener varios histogramas recopilados de regiones diferentes o espacios de color diferentes del mismo marco.
- Cada histograma del blob se identifica mediante su propio HistogramaHeader.
- Cada histograma tiene su propia región y tamaño de salida del sensor asociado. Para el histograma de fotograma completo, la región coincidirá con el tamaño de salida del sensor especificado en HistogramGrid.
- Los datos del histograma de todos los canales disponibles se agrupan en un histograma. Los datos del histograma de cada canal se identifican mediante un histogramaDataHeader inmediatamente por encima de los datos. ChannelMasks indica cuántos y qué canales tienen los datos del histograma, que es el OR bit a bit del MF_HISTOGRAM_CHANNEL_XXX máscara de bits admitida, tal y como se ha definido anteriormente. ChannelMask indica para qué canal están los datos, que se identifican mediante cualquiera de los MF_HISTOGRAM_CHANNEL_XXX máscaras de bits definidas anteriormente.
En la ilustración siguiente se muestra el diseño de un blob de histograma con un histograma de solo Y de fotograma completo.
Los datos de histogramas son una matriz de ULONG con cada entrada que representa el número de píxeles que se encuentran en un conjunto de valores tonal como categorizados por la discretización. Los datos de la matriz deben comenzar de bin 0 a bin N-1, donde N es el número de intervalos en el histograma, es decir, HistogramBlobHeader.Bins.
En la ilustración siguiente se muestra el diseño de la sección de datos del histograma.
En la ilustración siguiente se muestra el diseño de un blob de histograma con un histograma YRGB de fotograma completo con cuatro canales.
En la ilustración siguiente se muestra el diseño de un blob de histograma con un histograma de solo Y seguido de un histograma RGB con tres canales.
Para Threshold, como mínimo, se debe proporcionar un histograma de fotograma completo con el canal Y, que debe ser el primer histograma del blob histograma, si se admite KSPROPERTY_CAMERACONTROL_EXTENDED_HISTOGRAM.
Tenga en cuenta que los datos HistogramBlobHeader, HistogramHeader, HistogramDataHeader y Histogram solo describen el formato de blob del atributo MF_CAPTURE_METADATA_HISTOGRAM. La estructura de elementos de metadatos del histograma (KSCAMERA_METADATA_ITEMHEADER + toda la carga de metadatos del histograma) es hasta el controlador y debe estar alineada con 8 bytes.
Control de metadatos de histograma
KSPROPERTY_CAMERACONTROL_EXTENDED_HISTOGRAM es un identificador de propiedad que se usará para controlar los metadatos del histograma producidos por el controlador. Se trata de un control de nivel de patilla solo para el pin de vista previa y se define como se indica a continuación:
typedef enum {
…
#if (NTDDI_VERSION >= NTDDI_WIN8)
KSPROPERTY_CAMERACONTROL_EXTENDED_HISTOGRAM
#endif
} KSPROPERTY_CAMERACONTROL_EXTENDED_PROPERTY;
Para KSCAMERA_EXTENDEDPROP_HEADER, definiremos las marcas de bits siguientes para controlar los metadatos del histograma en el controlador. El valor predeterminado es OFF.
#define KSCAMERA_EXTENDEDPROP_HISTOGRAM_OFF 0x0000000000000000
#define KSCAMERA_EXTENDEDPROP_HISTOGRAM_ON 0x0000000000000001
Este control debe usarse antes del control KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA para asegurarse de que se asigna el búfer de metadatos de tamaño adecuado.
Si se establece en HISTOGRAM_OFF, el controlador no entregará los metadatos del histograma en el pin de vista previa. El controlador no debe incluir el tamaño de los metadatos del histograma en su requisito de tamaño de búfer de metadatos.
Si se establece en HISTOGRAM_ON, el controlador entregará los metadatos del histograma en el pin de vista previa. El controlador debe incluir el tamaño de los metadatos del histograma en su requisito de tamaño de búfer de metadatos.
Si el controlador no tiene la capacidad de generar metadatos de histograma, el controlador no debe implementar este control. Si el controlador admite este control, también debe admitir KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA control.
La llamada SET de este control no tiene ningún efecto cuando el pin de vista previa es mayor que el estado KSSTATE_STOP. El controlador rechazará la llamada SET recibida si la vista previa no está en estado de detención y devuelve STATUS_INVALID_DEVICE_STATE. En una llamada GET, el controlador debe devolver la configuración actual en el campo Marcas.
Se trata de un control sincrónico. No hay ninguna funcionalidad definida para este control.
KSCAMERA_EXTENDEDPROP_HEADER
Versión
Debe ser 1.
PinId
Debe ser el identificador de pin asociado al pin de vista previa.
Size
Debe ser sizeof(KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(KSCAMERA_EXTENDEDPROP_VALUE)
Resultado
Indica los resultados del error de la última operación SET. Si no se ha realizado ninguna operación SET, debe ser 0.
Capacidad
Debe ser 0.
Marcas
Se trata de un campo de lectura y escritura. Puede ser cualquiera de las KSCAMERA_EXTENDEDPROP_HISTOGRAM_XXX
marcas definidas anteriormente.
KSCAMERA_EXTENDEDPROP_VALUE
No se usa