Compartir a través de


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:

Definición de blob EXIF.

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:

  1. Cada blob puede contener varios histogramas recopilados de regiones diferentes o espacios de color diferentes del mismo marco.
  2. Cada histograma del blob se identifica mediante su propio HistogramaHeader.
  3. 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.
  4. 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