Поделиться через


Запись атрибутов метаданных статистики

В таблице ниже приведена сводка доступной статистики захвата IMFAttributes для контейнера атрибутов метаданных MFT0 MFSampleExtension_CaptureMetaData для предварительного просмотра, видео и записи.

Статистика захвата, указанная по-прежнему, является обязательной для каждой фотографии, снятой, если не указано иное. Статистика захвата, указанная для предварительного просмотра и видео, должна быть доставлена как можно лучше, и драйвер может предоставлять или не предоставлять всю статистику захвата для всех кадров в зависимости от доступности и производительности.

Имя Тип Pin Описание
MF_CAPTURE_METADATA_FOCUSSTATE UINT32 Предварительный просмотр Этот атрибут содержит текущее состояние фокуса, которое может принимать одно из следующих значений.
MF_CAPTURE_METADATA_SENSORFRAMERATE UINT64 Предварительный просмотр Этот атрибут содержит измеряемую скорость считывания датчика в герц при захвате кадра предварительного просмотра, который состоит из значения числителя в верхнем 32 бите и значения знаменателя в нижнем 32 бите.
MF_CAPTURE_METADATA_FACEROIS BLOB-объект Предварительный просмотр, видео Этот атрибут содержит сведения о прямоугольнике лица, обнаруженные драйвером.
MF_CAPTURE_METADATA_FACEROITIMESTAMPS BLOB-объект Предварительный просмотр, видео Этот атрибут содержит сведения о метке времени для лиц с рентабельности инвестиций, определенных в MF_CAPTURE_METADATA_FACEROIS.
MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS BLOB-объект Предварительный просмотр, видео Этот атрибут содержит состояние мигания и/или выражения лица для конечных показателей, определенных в MF_CAPTURE_METADATA_FACEROIS
MF_CAPTURE_METADATA_EXPOSURE_TIME UINT64 Предварительная версия, по-прежнему Этот атрибут содержит время экспозиции, применяемое в 100 наносекунд.
MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION BLOB-объект Предварительная версия, по-прежнему Этот атрибут содержит флаг шага компенсации ev и значение компенсации ev в единицах шага, примененного к водителю при съемке фотографии.
MF_CAPTURE_METADATA_ISO_SPEED UINT32 Предварительная версия, по-прежнему Этот атрибут содержит значение скорости ISO, применяемое в виде целого числа.
MF_CAPTURE_METADATA_LENS_POSITION UINT32 Предварительная версия, по-прежнему Этот атрибут содержит логическую позицию объектива при применении фокуса к захваченной фотографии. Это значение не имеет определенной единицы измерения.
MF_CAPTURE_METADATA_SCENE_MODE UINT64 Еще Этот атрибут содержит режим сцены, применяемый в качестве флага UINT64KSCAMERA_EXTENDEDPROP_SCENEMODE_XXX .
MF_CAPTURE_METADATA_FLASH UINT32 (логическое значение) Предварительная версия, по-прежнему Этот атрибут содержит логическое значение, содержащее состояние флэш-памяти. Значение 1 указывает, что вспышка включена, а значение 0 указывает, что вспышка отключена для фотографии.
MF_CAPTURE_METADATA_FLASH_POWER UINT32 Еще [Необязательно] Этот атрибут содержит мощность вспышки, применяемую в виде процентного значения от 0 до 100.
MF_CAPTURE_METADATA_WHITEBALANCE UINT32 (Кельвин) Предварительная версия, по-прежнему Этот атрибут содержит баланс белого, применяемый в качестве значения в Кельвине.
MF_CAPTURE_METADATA_ZOOMFACTOR UINT32 (Q16) Еще Этот атрибут содержит примененное значение масштаба и является тем же значением, которое можно запросить из KSPROPERTY_CAMERACONTROL_EXTENDED_ZOOM в вызове GET. Значение должно находиться в квартале 16.
MF_CAPTURE_METADATA_EXIF BLOB-объект Еще [Необязательно] Этот атрибут содержит метаданные EXIF, как указано в разделе определения BLOB-объекта.
MF_CAPTURE_METADATA_REQUESTED_FRAME_SETTING_ID UINT32 Еще [Необязательно] Этот атрибут содержит идентификатор кадра для соответствующего кадра в переменной последовательности фотографий. Этот атрибут задается только для захвата переменной последовательности фотографий.
MF_CAPTURE_METADATA_ISO_GAINS BLOB-объект Предварительный просмотр Этот атрибут содержит аналоговые и цифровые преимущества, применяемые к senor при захвате кадра предварительного просмотра. Это не унитарно.
MF_CAPTURE_METADATA_WHITEBALANCE_GAINS BLOB-объект Предварительный просмотр Этот атрибут содержит преимущества баланса белого, примененные к R, G, B датчиком и/или поставщиком услуг Интернета при захвате кадра предварительного просмотра. Это неунитарный объект.
MF_CAPTURE_METADATA_HISTOGRAM BLOB-объект Предварительный просмотр Этот атрибут содержит гистограмму при захвате кадра предварительного представления.
MF_CAPTURE_METADATA_FRAME_ILLUMINATION UINT64 Пин-код IR, используемый для Hello Этот атрибут для камер IR указывает, используются ли кадры активной иллюминацией IR, и его следует использовать в сочетании с FACEAUTH_MODE_ALTERNATIVE_FRAME_ILLUMINATION.
Любой настраиваемый GUID Любой тип варианта Этот атрибут содержит пользовательские данные, связанные с пользовательским GUID.

MF_CAPTURE_METADATA_FOCUSSTATE

MF_CAPTURE_METADATA_FOCUSSTATE атрибут содержит текущее состояние фокуса, которое может принимать одно из следующих значений.

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 атрибут содержит измеряемую скорость считывания датчика в герц при захвате кадра предварительного просмотра, который состоит из значения числителя в верхнем 32 бите и значения знаменателя в нижнем 32 бите.

MF_CAPTURE_METADATA_FACEROIS

MF_CAPTURE_METADATA_FACEROIS атрибут содержит сведения о прямоугольнике лица, обнаруженные драйвером. По умолчанию driver\MFT0 должен предоставлять сведения о лицах в потоке предварительного просмотра. Если драйвер объявляет возможность в других потоках, driver\MFT должен предоставить сведения о лицах в соответствующих потоках, если приложение включает обнаружение лиц в этих потоках. Если в драйвере включена стабилизация видео, после стабилизации видео следует указать сведения о лицах. Приведенные ниже структуры данных описывают формат больших двоичных объектов для MF_CAPTURE_METADATA_FACEROIS. Доминантное лицо должно быть первым FaceRectInfo в большом двоичном объекте.

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;

Обратите внимание, что структуры FaceRectinfoBlobHeader и FaceRectInfo описывают только формат больших двоичных объектов для атрибута MF_CAPTURE_METADATA_FACEROIS. Структура элементов метаданных для рентабельности инвестиций лиц (KSCAMERA_METADATA_ITEMHEADER + полезные данные метаданных рентабельности лиц) определяется драйвером и должна быть выровнена по 8 байтам.

Если поток настроен с включенным обнаружением лиц, а соответствующая сцена не содержит лиц во время захвата, драйвер по-прежнему должен прикрепить фиктивный атрибут MF_CAPTURE_METADATA_FACEROIS к каждому образцу, с которым не связана информация о лицах. (Для атрибута "фиктивный" окупаемости лиц поле Count структуры FaceRectInfoBlobHeader установлено равным нулю.)

MF_CAPTURE_METADATA_FACEROITIMESTAMPS

MF_CAPTURE_METADATA_FACEROITIMESTAMPS атрибут содержит сведения о метке времени для параметров рентабельности инвестиций лиц, определенных в MF_CAPTURE_METADATA_FACEROIS. Для устройства, которое не может предоставить метку времени для лицевой рентабельности, этот атрибут следует опустить.

В приведенной ниже структуре данных описывается формат больших двоичных объектов для 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;

Для поля Флаги мы определим следующие битовые флаги, чтобы указать, какая метка времени допустима. MFT0 должен задать для параметра Flags значение MF_METADATATIEMSTAMPS_DEVICE и соответствующее время QPC для устройства, если драйвер предоставляет метаданные метки времени для рентабельности инвестиций лиц.

#define MF_METADATATIMESTAMPS_DEVICE 0x00000001

#define MF_METADATATIMESTAMPS_PRESENTATION 0x00000002

Обратите внимание, что в структуре MetadataTimeStamps описывается только формат больших двоичных объектов для атрибута MF_CAPTURE_METADATA_FACEROITIMESTAMPS. Структура элементов метаданных для метки времени (KSCAMERA_METADATA_ITEMHEADER + полезные данные метаданных метки времени) определяется драйвером и должна быть выровнена по 8 байтам.

MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS

MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS атрибут содержит состояние мигания и/или выражения лица для рентабельности инвестиций лиц, определенных в MF_CAPTURE_METADATA_FACEROIS.  Для устройства, которое не поддерживает распознавание мигания или выражения лица, этот атрибут следует опустить.

В приведенной ниже структуре данных описывается формат больших двоичных объектов для MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS.

Обратите внимание, что структуры FaceCharacterizationBlobHeader и FaceCharacterization описывают только формат больших двоичных объектов для атрибута MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS. Структура элементов метаданных для характеристик лиц (полезные данные метаданных KSCAMERA_METADATA_ITEMHEADER + характеристики лиц) соответствует драйверу и должна быть выровнена по 8 байтам.

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;

Ниже определяется возможное выражение лица, которое можно обнаружить.  

#define MF_METADATAFACIALEXPRESSION_SMILE             0x00000001

Если MF_CAPTURE_METADATA_FACEROICHARACTERIZATIONS атрибут представлен, число и порядок записей FaceCharacterization в большом двоичном объекте должны совпадать с числом и порядком записей FaceRectInfo в большом двоичном объекте MF_CAPTURE_METADATA_FACEROIS.   Каждая запись FaceCharacterization представляет мигание и/или состояние выражения лица в соответствующей записи FaceRectInfo по тому же индексу.

На рисунке ниже показаны макеты большого двоичного объекта характеристики лица и большого двоичного объекта распознавания лиц с четырьмя лицами: первое не мигает и не улыбается, второе мигает левым глазом, третье улыбается, а четвертое — мигает (оба глаза) и улыбается.

MF_CAPTURE_METADATA_EXPOSURE_TIME

MF_CAPTURE_METADATA_EXPOSURE_TIME атрибут содержит время экспозиции, примененное к датчику при предварительном просмотре и/или фоторамке, которая является UINT64 и составляет 100 нс.

MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION

MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION атрибут содержит флаг шага компенсации ev и значение компенсации EV в единицах шага, примененного к датчику при предварительном просмотре и/или фоторамке.

В приведенной ниже структуре данных описывается формат больших двоичных объектов для 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;

Обратите внимание, что в структуре CapturedMetadata ExposureCompensation описывается только формат большого двоичного объекта для атрибута MF_CAPTURE_METADATA_EXPOSURE_COMPENSATION. Структура элементов метаданных для компенсации ev (KSCAMERA_METADATA_ITEMHEADER + метаданные компенсации ev) определяется драйвером и должна быть выровнена по 8 байтам.

MF_CAPTURE_METADATA_ISO_SPEED

MF_CAPTURE_METADATA_ISO_SPEED атрибуты содержат значение скорости ISO, применяемое к датчику при предварительном просмотре и/или фотокадре. Это не унитарно.

MF_CAPTURE_METADATA_ISO_GAINS

MF_CAPTURE_METADATA_ISO_GAINS атрибут содержит аналоговые и цифровые преимущества, применяемые к senor при захвате кадра предварительного просмотра. Это не унитарно.

В приведенной ниже структуре данных описывается формат больших двоичных объектов для MF_CAPTURE_METADATA_ISO_GAINS.

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

Обратите внимание, что в структуре CapturedMetadataISOGains описывается только формат больших двоичных объектов для атрибута MF_CAPTURE_METADATA_ISO_GAINS. Структура элементов метаданных для прибыли ISO (KSCAMERA_METADATA_ITEMHEADER + полезные данные метаданных получения ISO) определяется драйвером и должна быть выровнена по 8 байтам.

MF_CAPTURE_METADATA_LENS_POSITION

MF_CAPTURE_METADATA_LENS_POSITION атрибут содержит логическую позицию объектива при предварительном просмотре и/или фоторамке, которая является неунитарной. Это то же значение, которое можно запросить из KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUS в вызове GET.

MF_CAPTURE_METADATA_SCENE_MODE

MF_CAPTURE_METADATA_SCENE_MODE атрибут содержит режим сцены, применяемый к фотографии, которая является 64-разрядным флагом KSCAMERA_EXTENDEDPROP_SCENEMODE_XXX.

MF_CAPTURE_METADATA_FLASH

MF_CAPTURE_METADATA_FLASH атрибут содержит логическое значение при захвате предварительного просмотра и(или) кадра с 1 означает включение вспышки и 0 — вспышка.

MF_CAPTURE_METADATA_FLASH_POWER

MF_CAPTURE_METADATA_FLASH_POWER атрибут содержит мощность вспышки, применяемую к фотографии, которая является значением в диапазоне [0, 100]. Этот атрибут следует опустить, если драйвер не поддерживает регулировку питания для флэш-памяти.

MF_CAPTURE_METADATA_WHITEBALANCE

MF_CAPTURE_METADATA_WHITEBALANCE атрибут содержит баланс белого, примененный к датчику при предварительном просмотре и(или) фотокадре, который является значением в Кевине.

MF_CAPTURE_METADATA_WHITEBALANCE_GAINS

MF_CAPTURE_METADATA_WHITEBALANCE_GAINS атрибут содержит преимущества баланса белого, примененные к R, G, B датчиком и/или поставщиком услуг Интернета при захвате кадра предварительного просмотра. Это неунитарный объект.

В приведенной ниже структуре данных описывается формат больших двоичных объектов для MF_CAPTURE_METADATA_WHITEBALANCE_GAINS.

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

Обратите внимание, что в структуре CapturedMetadataWhiteBalanceGains описывается только формат больших двоичных объектов для атрибута MF_CAPTURE_METADATA_WHITEBALANCE_GAINS. Структура элементов метаданных для выигрыша баланса белого (KSCAMERA_METADATA_ITEMHEADER + полезные данные для получения метаданных баланса белого) определяется драйвером и должна быть выровнена по 8 байтам.

MF_CAPTURE_METADATA_ZOOMFACTOR

MF_CAPTURE_METADATA_ZOOMFACTOR атрибут содержит значение масштаба, примененное к фотографии, которое является тем же значением, которое можно запросить из KSPROPERTY_CAMERACONTROL_EXTENDED_ZOOM в вызове GET. Это должно быть в квартале 16.

MF_CAPTURE_METADATA_EXIF

MF_CAPTURE_METADATA_EXIF содержит метаданные EXIF, как указано в разделе 3.1 (определение BLOB-объекта). MFT0 извлекает необработанные метаданные EXIF, которые идентифицируются как элемент пользовательских метаданных (MetadataId >= MetadataId_Custom_Start), из буфера MF_CAPTURE_METADATA_FRAME_RAWSTREAM, предоставленного драйвером. Затем MFT0 преобразует необработанные данные в атрибут MF_CAPTURE_METADATA_EXIF.

Определение BLOB-объекта

Большой двоичный объект должен состоять из полного заголовка TIFF, 0th IFD и EXIF sub-IFD, как определено в спецификациях EXIF 2.3 и TIFF 6.0. Большой двоичный объект не должен содержать никаких данных до заголовка TIFF. Большой двоичный объект не должен содержать никаких данных после окончания 0-го IFD. Например, недопустимо включать IFD, содержащий данные эскизов.

На следующей схеме, скопированной из спецификации TIFF, показан ожидаемый макет памяти:

Определение большого двоичного объекта EXIF.

Ниже приведены требования, которые соответствуют спецификациям EXIF и TIFF, но выделены для акцента:

  • Порядок байтов должен быть либо маленьким эндианом ("II") или большим эндианом("ММ").
  • Указатели ("смещения байтов" в спецификации TIFF) должны быть относительно начала заголовка TIFF.

Ниже приведены требования, которые являются более строгими, чем спецификации EXIF и TIFF.

  • Смещение к следующему IFD должно быть 0, т. е. дополнительные МД не указываются.
  • Заголовок TIFF и 0-й IFD должны быть смежными, т. е. смещение до 0-го IFD, сохраненного в байтах 4–7, должно быть 0x8.

Обязательные метаданные EXIF

В разделе ниже описаны метаданные EXIF, которые должны быть включены в MF_CAPTURE_METADATA_EXIF .

Имя Тег EXIF Описание
Ориентация 274 Ориентация изображения, просматриваемая с точки зрения строк и столбцов. Полное описание см. в спецификации EXIF.
Убедитесь, 271 Изготовитель записывающей техники
Моделирование 272 Имя модели или номер модели устройства
XResolution 282 Число пикселей на единицу разрешения в направлении ImageWidth
YResolution 283 Число пикселей на единицу разрешения в направлении ImageLength
ResolutionUnit 296 Единица измерения XResolution и YResolution
Программное обеспечение 305 Имя и версия встроенного ПО
ColorSpace 40961 Сведения о цветовом пространстве, как правило, sRGB
SubsSecTimeOriginal 37521 Записывает доли секунд, связанные с тегом DateTimeOriginal
SubSecTimeDigitized 37522 Записывает доли секунд, связанные с тегом DateTimeDigitized
ExposureTime 33434 Время экспозиции в секундах (точная до 0,001 с)
FNumber 33437 Номер F, используемый для записи
ISOSpeedRatings 34855 Значение скорости ISO, определенное в ISO 12322, на основе насыщенности
DateTimeOriginal 36867 Дата и время создания исходных данных изображения
DateTimeDIgitized 36868 Дата и время сохранения образа в виде цифровых данных
Shutter SpeedValue 37377 Скорость затвора в единицах аддитивной системы фотографической экспозиции (APEX)
Значение диафрагмы 37378 Диафрагма объектива в единицах APEX
Значение ExposureBias 37380 Значение смещения экспозиции в единицах APEX
MeteringMode 37383 Режим измерения AE (см. спецификацию EXIF)
LightSource 37384 Тип источника света (см. спецификацию EXIF)
Мигание 37385 Состояние вспышки во время захвата изображения
FocalLength 37386 Фактическое фокусное расстояние объектива
ExposureMode 41986 Режим экспозиции во время захвата
WhiteBalance 41987 Режим баланса белого во время захвата
DigitalZoomRatio 41988 Коэффициент цифрового масштабирования во время захвата изображения
FocalLengthIn35mmFilm 41989 35 мм эквивалентная фокусная длина
SceneCaptureType 41990 Тип сцены, которая была снята

Необязательные метаданные или метаданные, определяемые OEM

Драйвер камеры может включать любые дополнительные метаданные в виде пользовательских тегов EXIF, если он соответствует спецификации EXIF и хранится в 0-м TIFF IFD или EXIF sub-IFD.

Требования MakerNote и ожидания двоичного макета

Драйвер камеры может содержать сведения о изготовителе в виде заметки изготовителя (тег 37500). Заметка о создателе не должна содержать указателей на данные, которые находятся за пределами самой заметки создателя, включая начало файла и положение заголовка TIFF. Кроме того, он не должен делать предположений о endianness файла, как указано в заголовке TIFF.

Как правило, операционная система не гарантирует, что двоичный макет большого двоичного объекта метаданных сохраняется при записи в выходной поток JPEG. Это гарантирует только то, что метаданные будут записаны в соответствии со спецификацией EXIF. Например, это гарантирует, что заметка создателя будет скопирована как непрерывный блок и будет определена правильным тегом IFD, типом и смещением.

Использование с кодировщиком WIC JPEG

Предполагаемое использование MF_CAPTURE_METADATA_EXIF осуществляется с помощью предоставленного ОС кодировщика JPEG компонента образов Windows (WIC). Камера Windows конвейер использует кодировщик Windows WIC JPEG для использования метаданных EXIF, полученных из MF_CAPTURE_METADATA_EXIF, и сопоставляет их с данными пикселей изображения в JPEG-файл, если приложение не захватывает JPEG непосредственно с камеры, а настраивает конвейер для записи в NV12/YUY2 и кодируется ОС

MF_CAPTURE_METADATA_REQUESTED_FRAME_SETTING_ID

MF_CAPTURE_METADATA_REQUESTED_FRAME_SETTING_ID атрибут содержит идентификатор кадра для соответствующего кадра в переменной последовательности фотографий. Этот атрибут задается только для захвата переменной последовательности фотографий.

MF_CAPTURE_METADATA_FRAME_ILLUMINATION

MF_CAPTURE_METADATA_FRAME_ILLUMINATION атрибут для камер IR указывает, используются ли кадры активной подсветкой IR и должны использоваться в сочетании с FACEAUTH_MODE_ALTERNATIVE_FRAME_ILLUMINATION. Он используется только для примеров IR и не должен присутствовать на RGB-кадрах, если камера поддерживает как ir, так и цветовые образцы.

Значение должно иметь значение 0xXXXXXXXXXXXXXXXXXXX1, если кадр был захвачен при активном освещении, и иметь значение 0xXXXXXXXXXXXX, если при захвате кадра не было освещенности.

MF_CAPTURE_METADATA_HISTOGRAM

MF_CAPTURE_METADATA_HISTOGRAM атрибут содержит гистограмму при захвате предварительного кадра.

Приведенные ниже структуры данных описывают формат больших двоичных объектов для 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;

Для поля ChannelMasks мы определим следующие битовые маски, чтобы указать доступные каналы в гистограмме.

#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

Примечания.

  1. Каждый большой двоичный объект может содержать несколько гистограмм, собранных из разных регионов или разных цветовых пространств одного кадра.
  2. Каждая гистограмма в большом двоичном объекте идентифицируется с помощью собственной histogramHeader
  3. Каждая гистограмма имеет собственную область и связанный размер выходных данных датчика. Для полнокадровой гистограммы область будет соответствовать размеру выходных данных датчика, указанному в histogramGrid.
  4. Данные гистограммы для всех доступных каналов группируются в одну гистограмму. Данные гистограммы для каждого канала идентифицируются histogramDataHeader непосредственно над данными. ChannelMasks указывает, сколько и какие каналы содержат данные гистограммы, то есть битовое ИЛИ поддерживаемого MF_HISTOGRAM_CHANNEL_XXX битовых масок, как определено выше. ChannelMask указывает, для какого канала являются данные, который идентифицируется любым из MF_HISTOGRAM_CHANNEL_XXX битовых систем, определенных выше.

На рисунке ниже показан макет большого двоичного объекта гистограммы с полнокадровой гистограммой только по Y.

Данные гистограммы — это массив ULONG с каждой записью, представляющей количество пикселей, подпадающих под набор тональных значений, классифицированных по ячейке. Данные в массиве должны начинаться с bin 0 в ячейку N-1, где N — это количество ячеек в гистограмме, т. е. HistogramBlobHeader.Bins.

На рисунке ниже показан макет раздела данных гистограммы.

На рисунке ниже показан макет большого двоичного объекта гистограммы с полнокадровой гистограммой YRGB с четырьмя каналами.

На рисунке ниже показан макет большого двоичного объекта гистограммы с гистограммой только по Y, за которой следует гистограмма RGB с тремя каналами.

Для порогового значения необходимо предоставить как минимум полную гистограмму с каналом Y, которая должна быть первой гистограммой в большом двоичном объекте гистограммы, если поддерживается KSPROPERTY_CAMERACONTROL_EXTENDED_HISTOGRAM.

Обратите внимание, что данные HistogramBlobHeader, HistogramHeader, HistogramDataHeader и Histogram описывают только формат большого двоичного объекта для атрибута MF_CAPTURE_METADATA_HISTOGRAM. Структура элементов метаданных для гистограммы (KSCAMERA_METADATA_ITEMHEADER + все полезные данные метаданных гистограммы) соответствует драйверу и должна быть выровнена по 8 байтам.

Элемент управления метаданными гистограммы

KSPROPERTY_CAMERACONTROL_EXTENDED_HISTOGRAM — это идентификатор свойства, который будет использоваться для управления метаданными гистограммы, созданными драйвером. Это элемент управления уровня закрепления только для предварительного просмотра пин-кода и определяется следующим образом:

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

Для KSCAMERA_EXTENDEDPROP_HEADER мы определим следующие битовые флаги для управления метаданными гистограммы в драйвере. Значение по умолчанию — OFF.

#define KSCAMERA_EXTENDEDPROP_HISTOGRAM_OFF 0x0000000000000000
#define KSCAMERA_EXTENDEDPROP_HISTOGRAM_ON  0x0000000000000001

Этот элемент управления необходимо использовать перед элементом управления KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA, чтобы обеспечить выделение буфера метаданных соответствующего размера.

Если задано значение HISTOGRAM_OFF, драйвер не должен доставлять метаданные гистограммы при предварительном просмотре. Драйвер не должен включать размер метаданных гистограммы в требование к размеру буфера метаданных.

Если задано значение HISTOGRAM_ON, драйвер должен доставить метаданные гистограммы в предварительной версии. Драйвер должен включать размер метаданных гистограммы в требование к размеру буфера метаданных.

Если драйвер не имеет возможности создавать метаданные гистограммы, драйвер не должен реализовывать этот элемент управления. Если драйвер поддерживает этот элемент управления, он также должен поддерживать элемент управления KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA.

Вызов SET этого элемента управления не оказывает никакого влияния, если контакт предварительного просмотра не находится в состоянии выше, чем состояние KSSTATE_STOP. Драйвер должен отклонить полученный вызов SET, если предварительная версия не находится в состоянии остановки и возвращает STATUS_INVALID_DEVICE_STATE. В вызове GET драйвер должен вернуть текущие параметры в поле Флаги.

Это синхронный элемент управления. Для этого элемента управления не определены возможности.

KSCAMERA_EXTENDEDPROP_HEADER

Версия

Должен иметь значение 1.

PinId

Должен быть идентификатором пин-кода, связанным с контактом предварительного просмотра.

Размер

Должен содержать значение sizeof(KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(KSCAMERA_EXTENDEDPROP_VALUE).

Результат

Указывает результаты ошибки последней операции SET. Если операция SET не выполнена, это должно быть 0.

Функция

Должно быть равно 0.

Флаги

Это поле для чтения и записи. Это может быть любой из флагов, KSCAMERA_EXTENDEDPROP_HISTOGRAM_XXX определенных выше.

KSCAMERA_EXTENDEDPROP_VALUE

Не используется