Partager via


Attributs de métadonnées de statistiques de capture

Le tableau ci-dessous récapitule les statistiques de capture disponibles IMFAttributes pour le sac d’attributs de métadonnées MFSampleExtension_CaptureMetaData du MFT0 pour la préversion, la vidéo et la capture.

Les statistiques de capture répertoriées pour sont obligatoires pour chaque photo capturée, sauf indication contraire. Les statistiques de capture répertoriées pour la préversion et la vidéo doivent être fournies comme le meilleur effort et le pilote peut ou non fournir toutes les statistiques de capture sur toutes les images en fonction des considérations relatives à la disponibilité et aux performances.

Nom Type Épingle Description
MF_CAPTURE_METADATA_FOCUSSTATE UINT32 PRÉVERSION Cet attribut contient l’état de focus actuel qui peut prendre l’une des valeurs suivantes.
MF_CAPTURE_METADATA_SENSORFRAMERATE UINT64 PRÉVERSION Cet attribut contient le taux de lecture du capteur mesuré en hertz lorsqu’une image d’aperçu est capturée, qui se compose d’une valeur de numérateur dans le 32 bits supérieur et d’une valeur de dénominateur dans le 32 bits inférieur.
MF_CAPTURE_METADATA_FACEROIS Blob Préversion, Vidéo Cet attribut contient les informations de rectangle de visage détectées par le pilote.
MF_CAPTURE_METADATA_FACEROITIMESTAMPS Blob Préversion, Vidéo Cet attribut contient les informations d’horodatage des roIs de visage identifiés dans MF_CAPTURE_METADATA_FACEROIS.
MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS Blob Préversion, Vidéo Cet attribut contient l’état de clignotement et/ou d’expression faciale pour les roIs de visage identifiés dans MF_CAPTURE_METADATA_FACEROIS
MF_CAPTURE_METADATA_EXPOSURE_TIME UINT64 Préversion, toujours Cet attribut contient le temps d’exposition appliqué en 100 nanosecondes
MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION Blob Préversion, toujours Cet attribut contient un indicateur d’étape de compensation ev et une valeur de compensation ev en unités de l’étape qui a été appliquée au pilote lors de la capture de la photo.
MF_CAPTURE_METADATA_ISO_SPEED UINT32 Préversion, toujours Cet attribut contient la valeur de vitesse ISO appliquée sous forme d’entier.
MF_CAPTURE_METADATA_LENS_POSITION UINT32 Préversion, toujours Cet attribut contient la position logique de l’objectif lorsque le focus a été appliqué à la photo capturée. Cette valeur n’a pas d’unité spécifique.
MF_CAPTURE_METADATA_SCENE_MODE UINT64 Encore Cet attribut contient le mode de scène appliqué en tant qu’indicateur de UINT64KSCAMERA_EXTENDEDPROP_SCENEMODE_XXX .
MF_CAPTURE_METADATA_FLASH UINT32 (booléen) Préversion, toujours Cet attribut contient une valeur booléenne qui contient l’état flash. La valeur 1 spécifie que le flash est activé et la valeur 0 spécifie que le flash est désactivé pour la photo capturée.
MF_CAPTURE_METADATA_FLASH_POWER UINT32 Encore [Facultatif] Cet attribut contient la puissance flash appliquée sous la forme d’une valeur de pourcentage comprise entre 0 et 100.
MF_CAPTURE_METADATA_WHITEBALANCE UINT32 (Kelvin) Préversion, toujours Cet attribut contient la balance des blancs appliquée en tant que valeur dans Kelvin.
MF_CAPTURE_METADATA_ZOOMFACTOR UINT32 (Q16) Encore Cet attribut contient la valeur de zoom appliquée et est la même valeur que celle qui peut être interrogée à partir de KSPROPERTY_CAMERACONTROL_EXTENDED_ZOOM dans un appel GET. La valeur doit être en Q16.
MF_CAPTURE_METADATA_EXIF Blob Encore [Facultatif] Cet attribut contient des métadonnées EXIF comme spécifié dans la section Définition d’objet blob
MF_CAPTURE_METADATA_REQUESTED_FRAME_SETTING_ID UINT32 Encore [Facultatif] Cet attribut contient l’ID d’image du cadre correspondant dans la séquence photo variable. Cet attribut est défini uniquement pour une capture de séquence photo variable.
MF_CAPTURE_METADATA_ISO_GAINS Blob PRÉVERSION Cet attribut contient les gains analogiques et numériques appliqués au senor lorsque l’image d’aperçu a été capturée. C’est sans unité.
MF_CAPTURE_METADATA_WHITEBALANCE_GAINS Blob PRÉVERSION Cet attribut contient les gains de balance des blancs appliqués à R, G, B par le capteur et\ou le fai lorsque l’image d’aperçu a été capturée. Il s’agit d’un sans unité.
MF_CAPTURE_METADATA_HISTOGRAM Blob PRÉVERSION Cet attribut contient l’histogramme lorsqu’une image de préversion est capturée.
MF_CAPTURE_METADATA_FRAME_ILLUMINATION UINT64 Ir Pin utilisé pour Hello Cet attribut pour les caméras IR spécifie si les images utilisent un éclairage IR actif et doivent être utilisées conjointement avec FACEAUTH_MODE_ALTERNATIVE_FRAME_ILLUMINATION.
N’importe quel GUID personnalisé N’importe quel type de variante Cet attribut contient les données personnalisées associées au GUID personnalisé

MF_CAPTURE_METADATA_FOCUSSTATE

MF_CAPTURE_METADATA_FOCUSSTATE attribut contient l’état de focus actuel qui peut prendre l’une des valeurs suivantes.

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 attribut contient le taux de lecture du capteur mesuré en hertz lorsqu’une image d’aperçu est capturée, qui se compose d’une valeur de numérateur dans le 32 bits supérieur et d’une valeur de dénominateur dans le 32 bits inférieur.

MF_CAPTURE_METADATA_FACEROIS

MF_CAPTURE_METADATA_FACEROIS attribut contient les informations de rectangle de visage détectées par le pilote. Par défaut, driver\MFT0 doit fournir les informations faciales sur le flux d’aperçu. Si le pilote publie la fonctionnalité sur d’autres flux, driver\MFT doit fournir les informations faciales sur les flux correspondants si l’application active la détection des visages sur ces flux. Lorsque la stabilisation vidéo est activée sur le pilote, les informations du visage doivent être fournies après la stabilisation vidéo. Les structures de données ci-dessous décrivent le format d’objet blob pour MF_CAPTURE_METADATA_FACEROIS. Le visage dominant doit être le premier FaceRectInfo dans l’objet 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;

Notez que les structs FaceRectinfoBlobHeader et FaceRectInfo décrivent uniquement le format d’objet blob pour l’attribut MF_CAPTURE_METADATA_FACEROIS. La structure d’élément de métadonnées pour les roIs de visage (KSCAMERA_METADATA_ITEMHEADER + charge utile des métadonnées roIs visage) est à la hauteur du pilote et doit être alignée sur 8 octets.

Par conception, si un flux est configuré avec la détection des visages activée et que la scène en question ne contient pas de visages pendant la capture, le pilote doit toujours attacher un attribut « factice » MF_CAPTURE_METADATA_FACEROIS à chaque exemple auquel aucune information de visage n’est associée. (Un attribut « dummy » face ROI a le champ Count de la structure FaceRectInfoBlobHeader défini sur zéro.)

MF_CAPTURE_METADATA_FACEROITIMESTAMPS

MF_CAPTURE_METADATA_FACEROITIMESTAMPS attribut contient les informations d’horodatage pour les uri de visage identifiés dans MF_CAPTURE_METADATA_FACEROIS. Pour l’appareil qui ne peut pas fournir l’horodatage pour les roIs de visage, cet attribut doit être omis.

La structure de données ci-dessous décrit le format d’objet blob pour 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;

Pour le champ Indicateurs, nous allons définir les indicateurs de bits suivants pour indiquer quel horodatage est valide. MFT0 doit définir indicateurs sur MF_METADATATIEMSTAMPS_DEVICE et l’heure QPC appropriée pour l’appareil, si le pilote fournit les métadonnées d’horodatage pour les roIs de visage.

#define MF_METADATATIMESTAMPS_DEVICE 0x00000001

#define MF_METADATATIMESTAMPS_PRESENTATION 0x00000002

Notez que le struct MetadataTimeStamps décrit uniquement le format d’objet blob pour l’attribut MF_CAPTURE_METADATA_FACEROITIMESTAMPS. La structure des éléments de métadonnées pour l’horodatage (KSCAMERA_METADATA_ITEMHEADER + charge utile des métadonnées d’horodatage) est jusqu’au pilote et doit être alignée sur 8 octets.

MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS

MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS attribut contient l’état de clignotement et/ou d’expression faciale pour les roIs de visage identifiés dans MF_CAPTURE_METADATA_FACEROIS.  Pour l’appareil qui ne prend pas en charge la détection de clignotement et/ou d’expression faciale, cet attribut doit être omis.

La structure de données ci-dessous décrit le format d’objet blob pour MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS.

Notez que les structs FaceCharacterizationBlobHeader et FaceCharacterization décrivent uniquement le format d’objet blob pour l’attribut MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS. La structure des éléments de métadonnées pour les caractérisations de visage (KSCAMERA_METADATA_ITEMHEADER + charge utile des métadonnées de caractérisation de visage) est à la hauteur du pilote et doit être alignée sur 8 octets.

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;

Ce qui suit définit l’expression faciale possible qui peut être détectée.  

#define MF_METADATAFACIALEXPRESSION_SMILE             0x00000001

Si MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS attribut présente, le nombre et l’ordre des entrées FaceCharacterization dans son objet blob doivent correspondre au nombre et à l’ordre des entrées FaceRectInfo dans l’objet blob de MF_CAPTURE_METADATA_FACEROIS.   Chaque entrée FaceCharacterization représente l’état de clignotement et/ou d’expression faciale du visage dans l’entrée FaceRectInfo correspondante au même index.

La figure ci-dessous illustre les dispositions d’un objet blob de caractérisation de visages et d’un objet blob rois de visage de quatre visages avec le premier ne clignotant ni souriant, le second clignotant l’œil gauche, le troisième souriant et le quatrième qui clignote (les deux yeux) et souriant.

MF_CAPTURE_METADATA_EXPOSURE_TIME

MF_CAPTURE_METADATA_EXPOSURE_TIME attribut contient le temps d’exposition appliqué au capteur lorsque l’aperçu et/ou le cadre photo ont été capturés, qui est un UINT64 et est en 100n.

MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION

MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION attribut contient un indicateur d’étape de compensation ev et une valeur de compensation EV en unités de l’étape appliquée au capteur lors de la capture d’aperçu et/ou d’un cadre photo.

La structure de données ci-dessous décrit le format d’objet blob pour 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;

Notez que le struct CapturedMetadataExposureCompensation décrit uniquement le format d’objet blob pour l’attribut MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION. La structure d’éléments de métadonnées pour la compensation ev (KSCAMERA_METADATA_ITEMHEADER + charge utile des métadonnées de compensation ev) est à la hauteur du pilote et doit être alignée sur 8 octets.

MF_CAPTURE_METADATA_ISO_SPEED

MF_CAPTURE_METADATA_ISO_SPEED attributs contient la valeur de vitesse ISO appliquée au capteur lors de la capture d’aperçu et/ou d’un cadre photo. C’est sans unité.

MF_CAPTURE_METADATA_ISO_GAINS

MF_CAPTURE_METADATA_ISO_GAINS attribut contient les gains analogiques et numériques appliqués au senor lors de la capture de l’image d’aperçu. C’est sans unité.

La structure de données ci-dessous décrit le format d’objet blob pour MF_CAPTURE_METADATA_ISO_GAINS.

typedef struct tagCapturedMetadataISOGains
{
    FLOAT AnalogGain;
    FLOAT DigitalGain;
} CapturedMetadataISOGains;

Notez que le struct CapturedMetadataISOGains décrit uniquement le format d’objet blob pour l’attribut MF_CAPTURE_METADATA_ISO_GAINS. La structure des éléments de métadonnées pour les gains ISO (KSCAMERA_METADATA_ITEMHEADER + charge utile des métadonnées de gains ISO) est à la hauteur du pilote et doit être alignée sur 8 octets.

MF_CAPTURE_METADATA_LENS_POSITION

MF_CAPTURE_METADATA_LENS_POSITION attribut contient la position logique de l’objectif lorsque l’aperçu et/ou le cadre photo ont été capturés, ce qui est sans unité. Il s’agit de la même valeur qui peut être interrogée à partir de KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUS dans un appel GET.

MF_CAPTURE_METADATA_SCENE_MODE

MF_CAPTURE_METADATA_SCENE_MODE attribut contient le mode de scène appliqué à la photo capturée, qui est un indicateur de KSCAMERA_EXTENDEDPROP_SCENEMODE_XXX 64 bits.

MF_CAPTURE_METADATA_FLASH

MF_CAPTURE_METADATA_FLASH attribut contient une valeur booléenne lorsque l’aperçu et/ou le cadre photo ont été capturés, 1 signifiant flash activé et 0 signifiant flash désactivé.

MF_CAPTURE_METADATA_FLASH_POWER

MF_CAPTURE_METADATA_FLASH_POWER attribut contient la puissance flash appliquée à la photo capturée, qui est une valeur dans la plage de [0, 100]. Cet attribut doit être omis si le pilote ne prend pas en charge l’alimentation réglable pour le flash.

MF_CAPTURE_METADATA_WHITEBALANCE

MF_CAPTURE_METADATA_WHITEBALANCE attribut contient la balance des blancs appliquée au capteur lors de la capture d’aperçu et/ou d’un cadre photo, qui est une valeur dans Kevin.

MF_CAPTURE_METADATA_WHITEBALANCE_GAINS

MF_CAPTURE_METADATA_WHITEBALANCE_GAINS attribut contient les gains de balance des blancs appliqués à R, G, B par le capteur et/ou le fai lorsque l’image d’aperçu a été capturée. Il s’agit d’un sans unité.

La structure de données ci-dessous décrit le format d’objet blob pour MF_CAPTURE_METADATA_WHITEBALANCE_GAINS.

typedef struct tagCapturedMetadataWhiteBalanceGains
{
    FLOAT R;
    FLOAT G;
    FLOAT B;
} CapturedMetadataWhiteBalanceGains;

Notez que le struct CapturedMetadataWhiteBalanceGains décrit uniquement le format d’objet blob pour l’attribut MF_CAPTURE_METADATA_WHITEBALANCE_GAINS. La structure des éléments de métadonnées pour les gains de balance des blancs (KSCAMERA_METADATA_ITEMHEADER + charge utile des métadonnées de gains de balance des blancs) est à la hauteur du pilote et doit être alignée sur 8 octets.

MF_CAPTURE_METADATA_ZOOMFACTOR

MF_CAPTURE_METADATA_ZOOMFACTOR attribut contient la valeur de zoom appliquée à la photo capturée, qui est la même valeur que celle qui peut être interrogée à partir de KSPROPERTY_CAMERACONTROL_EXTENDED_ZOOM dans un appel GET. Il doit s’agir de la Q16.

MF_CAPTURE_METADATA_EXIF

MF_CAPTURE_METADATA_EXIF contient des métadonnées EXIF comme spécifié dans la section 3.1 (définition d’objet blob). MFT0 extrait les métadonnées EXIF brutes, qui sont identifiées comme un élément de métadonnées personnalisé (MetadataId >= MetadataId_Custom_Start), à partir de la mémoire tampon MF_CAPTURE_METADATA_FRAME_RAWSTREAM fournie par le pilote. MFT0 convertit ensuite les données brutes en attribut MF_CAPTURE_METADATA_EXIF.

Définition d’objet blob

L’objet blob doit se composer d’un en-tête TIFF complet, d’un 0e IFD et d’un sous-IFD EXIF tels que définis par les spécifications EXIF 2.3 et TIFF 6.0. L’objet blob ne doit pas contenir de données avant l’en-tête TIFF. L’objet blob ne doit contenir aucune donnée après la fin du 0e IFD. Par exemple, il n’est pas valide d’inclure un IFD contenant des données miniatures.

Le diagramme suivant, copié à partir de la spécification TIFF, illustre la disposition de la mémoire attendue :

Définition d’objet blob EXIF.

Les exigences suivantes sont cohérentes avec les spécifications EXIF et TIFF, mais elles sont appelées à mettre l’accent sur :

  • L’ordre d’octets doit être soit petit endien (« II ») soit grand endian (« MM »).
  • Les pointeurs (« décalages d’octet » dans la spécification TIFF) doivent être relatifs au début de l’en-tête TIFF.

Voici des exigences plus restrictives que les spécifications EXIF et TIFF :

  • Le décalage vers l’IFD suivant doit être égal à 0, c’est-à-dire qu’aucun IFD supplémentaire n’est indiqué.
  • L’en-tête TIFF et le 0e IFD doivent être contigus, c’est-à-dire que le décalage par rapport au 0e IFD stocké en octets 4 à 7 doit être 0x8.

Métadonnées EXIF obligatoires

La section ci-dessous décrit les métadonnées EXIF qui doivent être incluses dans MF_CAPTURE_METADATA_EXIF .

Nom Balise EXIF Description
Orientation 274 Orientation de l’image affichée en termes de lignes et de colonnes. Pour obtenir une description complète, consultez spécification EXIF
Marque 271 Le fabricant de l’appareil d’enregistrement
Modèle 272 Nom du modèle ou numéro de modèle de l’appareil
XResolution 282 Nombre de pixels par unité de résolution dans la direction ImageWidth
YResolution 283 Nombre de pixels par unité de résolution dans la direction ImageLength
ResolutionUnit 296 Unité pour mesurer XResolution et YResolution
Logiciel 305 Nom et version du microprogramme
ColorSpace 40961 Informations sur l’espace de couleurs, généralement sRGB
SubsSecTimeOriginal 37521 Enregistre les fractions de secondes associées à la balise DateTimeOriginal
SubSecTimeDigitized 37522 Enregistre les fractions de secondes associées à la balise DateTimeDigitized
ExposureTime 33434 Temps d’exposition en secondes (précis à 0,001 s)
FNumber 33437 Numéro F utilisé pour la capture
ISOSpeedRatings 34855 Valeur de vitesse ISO telle que définie dans ISO 12322, basée sur la saturation
DateTimeOriginal 36867 Date et heure de génération des données d’image d’origine
DateTimeDIgitized 36868 Date et heure auxquelles l’image est stockée en tant que données numériques
Valeur d’obturation 37377 Vitesse d’obturation dans les unités apex (Additive System of Photographic Exposure)
Valeur d’ouverture 37378 L’ouverture de l’objectif en unités APEX
Valeur ExposureBias 37380 Valeur de biais d’exposition dans les unités APEX
MeteringMode 37383 Mode de contrôle AE (voir spécification EXIF)
LightSource 37384 Type de source de lumière (voir spécification EXIF)
Clignote 37385 État du flash pendant la capture d’image
FocalLength 37386 La longueur focale réelle de la lentille
ExposureMode 41986 Mode d’exposition pendant la capture
WhiteBalance 41987 Mode Balance des blancs pendant la capture
DigitalZoomRatio 41988 Rapport de zoom numérique lors de la capture d’image
FocalLengthIn35mmFilm 41989 Longueur focale équivalente de 35 mm
SceneCaptureType 41990 Type de scène qui a été tournée

Métadonnées facultatives/définies par l’OEM

Le pilote de caméra peut inclure des métadonnées supplémentaires sous la forme d’étiquettes EXIF personnalisées tant qu’il est conforme à la spécification EXIF et qu’il est stocké dans le 0e IFD TIFF ou le sous-IFD EXIF.

Exigences makerNote et attentes de disposition binaire

Le pilote de caméra peut inclure des informations propriétaires du fabricant sous la forme d’une note du fabricant (balise 37500). La note du créateur ne doit pas contenir de pointeurs vers des données extérieures à la note du créateur, y compris le début du fichier et la position de l’en-tête TIFF. En outre, il ne doit pas faire d’hypothèses sur l’endianness du fichier comme spécifié dans l’en-tête TIFF.

En général, le système d’exploitation ne garantit pas que la disposition binaire de l’objet blob de métadonnées est conservée lorsqu’elle est écrite dans le flux JPEG de sortie. Elle garantit uniquement que les métadonnées sont écrites conformément à la spécification EXIF. Par exemple, elle garantit uniquement que la note du créateur est copiée en tant que bloc contigu et qu’elle est identifiée par la balise IFD, le type et le décalage corrects.

Utilisation avec l’encodeur JPEG WIC

L’utilisation prévue de MF_CAPTURE_METADATA_EXIF est avec l’encodeur JPEG WIC (Windows Imaging Component) fourni par le système d’exploitation. Caméra Windows pipeline utilise l’encodeur JPEG Windows WIC pour consommer les métadonnées EXIF obtenues à partir de MF_CAPTURE_METADATA_EXIF et les multiplent avec les données de pixels d’image dans un fichier JPEG lorsque l’application ne capture pas un fichier JPEG directement à partir de l’appareil photo, mais configure le pipeline pour capturer sur NV12/YUY2 et être encodé par le système d’exploitation

MF_CAPTURE_METADATA_REQUESTED_FRAME_SETTING_ID

MF_CAPTURE_METADATA_REQUESTED_FRAME_SETTING_ID attribut contient l’ID du cadre correspondant dans la séquence de photos variables. Cet attribut est défini uniquement pour une capture de séquence de photos variables.

MF_CAPTURE_METADATA_FRAME_ILLUMINATION

MF_CAPTURE_METADATA_FRAME_ILLUMINATION attribut pour les caméras IR spécifie si les images utilisent l’éclairage ir actif et doivent être utilisées conjointement avec FACEAUTH_MODE_ALTERNATIVE_FRAME_ILLUMINATION. Il est utilisé uniquement pour les exemples ir et ne doit pas être présent sur les images RVB si l’appareil photo prend en charge à la fois les exemples ir et de couleur.

La valeur doit être définie sur 0xXXXXXXXXXXXXX1 si le frame a été capturé lorsque l’éclairage actif était activé et défini sur 0xXXXXXXXXXXXXXXX0 si aucun éclairage n’était présent lors de la capture du cadre.

MF_CAPTURE_METADATA_HISTOGRAM

MF_CAPTURE_METADATA_HISTOGRAM attribut contient l’histogramme lors de la capture d’une image de vue préliminaire.

Les structures de données ci-dessous décrivent le format d’objet blob pour 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;

Pour le champ ChannelMasks, nous allons définir les masques de bits suivants pour indiquer les canaux disponibles dans l’histogramme.

#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

Remarques :

  1. Chaque objet blob peut contenir plusieurs histogrammes collectés à partir de régions différentes ou d’espaces de couleurs différents du même cadre
  2. Chaque histogramme dans l’objet blob est identifié par son propre HistogramHeader
  3. Chaque histogramme a sa propre région et sa propre taille de sortie de capteur associée. Pour l’histogramme plein format, la région correspond à la taille de sortie du capteur spécifiée dans HistogramGrid.
  4. Les données d’histogramme pour tous les canaux disponibles sont regroupées sous un seul histogramme. Les données d’histogramme pour chaque canal sont identifiées par un HistogramDataHeader situé immédiatement au-dessus des données. ChannelMasks indique le nombre et les canaux qui ont les données d’histogramme, c’est-à-dire le OR au niveau du bit des masques de bits pris en charge MF_HISTOGRAM_CHANNEL_XXX comme défini ci-dessus. ChannelMask indique le canal pour lequel les données sont destinées, qui est identifié par l’un des MF_HISTOGRAM_CHANNEL_XXX masques de bits définis ci-dessus.

La figure ci-dessous illustre la disposition d’un objet blob d’histogramme avec un histogramme Y plein format.

Les données d’histogramme sont un tableau d’ULONG avec chaque entrée représentant le nombre de pixels relevant d’un ensemble de valeurs tonales classées par le bac. Les données du tableau doivent commencer du bac 0 au bac N-1, où N est le nombre de compartiments dans l’histogramme, c’est-à-dire HistogramBlobHeader.Bins.

La figure ci-dessous illustre la disposition de la section de données d’histogramme.

La figure ci-dessous illustre la disposition d’un objet blob d’histogramme avec un histogramme YRGB plein format avec quatre canaux.

La figure ci-dessous illustre la disposition d’un objet blob d’histogramme avec un histogramme Y uniquement suivi d’un histogramme RVB avec trois canaux.

Pour Threshold, un histogramme plein format avec canal Y doit au minimum être fourni, qui doit être le premier histogramme de l’objet blob d’histogramme, si KSPROPERTY_CAMERACONTROL_EXTENDED_HISTOGRAM est pris en charge.

Notez que les données HistogramBlobHeader, HistogramHeader, HistogramDataHeader et Histogram décrivent uniquement le format d’objet blob pour l’attribut MF_CAPTURE_METADATA_HISTOGRAM. La structure de l’élément de métadonnées pour l’histogramme (KSCAMERA_METADATA_ITEMHEADER + la charge utile des métadonnées de l’histogramme) est à la hauteur du pilote et doit être alignée sur 8 octets.

Contrôle des métadonnées d’histogramme

KSPROPERTY_CAMERACONTROL_EXTENDED_HISTOGRAM est un ID de propriété qui sera utilisé pour contrôler les métadonnées d’histogramme produites par le pilote. Il s’agit d’un contrôle de niveau de broche pour la préversion uniquement et est défini comme suit :

typedef enum {
    …
#if (NTDDI_VERSION >= NTDDI_WIN8)
    KSPROPERTY_CAMERACONTROL_EXTENDED_HISTOGRAM
#endif
} KSPROPERTY_CAMERACONTROL_EXTENDED_PROPERTY;

Pour KSCAMERA_EXTENDEDPROP_HEADER, nous allons définir les indicateurs de bits suivants pour contrôler les métadonnées d’histogramme dans le pilote. La valeur par défaut est OFF.

#define KSCAMERA_EXTENDEDPROP_HISTOGRAM_OFF 0x0000000000000000
#define KSCAMERA_EXTENDEDPROP_HISTOGRAM_ON  0x0000000000000001

Ce contrôle doit être utilisé avant le contrôle KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA pour s’assurer que la mémoire tampon de métadonnées de taille appropriée est allouée.

S’il est défini sur HISTOGRAM_OFF, le pilote ne doit pas remettre les métadonnées d’histogramme sur la broche d’aperçu. Le pilote ne doit pas inclure la taille des métadonnées de l’histogramme dans ses exigences de taille de mémoire tampon de métadonnées.

S’il est défini sur HISTOGRAM_ON, le pilote doit fournir les métadonnées d’histogramme sur la broche d’aperçu. Le pilote doit inclure la taille des métadonnées de l’histogramme dans son exigence de taille de mémoire tampon de métadonnées.

Si le pilote n’a pas la capacité de produire des métadonnées d’histogramme, il ne doit pas implémenter ce contrôle. Si le pilote prend en charge ce contrôle, il doit également prendre en charge KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA contrôle.

L’appel SET de ce contrôle n’a aucun effet lorsque la broche d’aperçu est dans un état supérieur à l’état KSSTATE_STOP. Le pilote doit rejeter l’appel SET reçu si l’aperçu n’est pas à l’état d’arrêt et retourne STATUS_INVALID_DEVICE_STATE. Dans un appel GET, le pilote doit retourner les paramètres actuels dans le champ Indicateurs.

Il s’agit d’un contrôle synchrone. Aucune fonctionnalité n’est définie pour ce contrôle.

KSCAMERA_EXTENDEDPROP_HEADER

Version

Doit être égal à 1.

PinId

Doit être l’ID de code pin associé à l’épingle d’aperçu.

Taille

Doit être sizeof(KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(KSCAMERA_EXTENDEDPROP_VALUE)

Résultats

Indique les résultats d’erreur de la dernière opération SET. Si aucune opération SET n’a eu lieu, il doit s’agir de 0.

Fonctionnalité

Doit être égal à 0.

Indicateurs

Il s’agit d’un champ en lecture/écriture. Il peut s’agir d’un des KSCAMERA_EXTENDEDPROP_HISTOGRAM_XXX indicateurs définis ci-dessus.

KSCAMERA_EXTENDEDPROP_VALUE

Non utilisé