Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Расширенные элементы управления используют механизм KSPROPERTY для предоставления элементов управления камеры приложению.
В следующем списке стандартных расширенных элементов управления (определенных Media Foundation) можно включить дополнительные функции камеры Windows:
Некоторые элементы управления доступны приложениям как асинхронные элементы управления, а другие — как синхронные элементы управления.
Синхронные элементы управления
Для этих элементов управления конвейер захвата изображения выдает структуру управления камерой KSPROPERTY и ожидает, что драйвер синхронно выполняет запрос.
Асинхронные элементы управления
Для этих элементов управления конвейер захвата производит KSPROPERTY, включает KSEVENT, связанный с этим свойством, и ожидает, когда событие будет сигнализировано. Драйвер должен синхронно выполнить KSPROPERTY и использовать это как триггер для запуска асинхронной операции. После завершения асинхронной операции драйвер должен подать сигнал на связанное событие KSEVENT, которого ожидает конвейер захвата. Конвейер отслеживания уведомляет приложение о завершении операции при получении сигнала.
Если асинхронный элемент управления может быть отменен, он должен указать флаг KSCAMERA_EXTENDEDPROP_FLAG_CANCELOPERATION в элементе управления. Если элемент управления не может быть отменен, операция элемента управления не должна превышать 5 мс.
Эти расширенные элементы управления являются частью следующего набора свойств KS, определенного в ksmedia.h:
#define STATIC_KSPROPERTYSETID_ExtendedCameraControl \
0x1CB79112, 0xC0D2, 0x4213, 0x9C, 0xA6, 0xCD, 0x4F, 0xDB, 0x92, 0x79, 0x72
DEFINE_GUIDSTRUCT("1CB79112-C0D2-4213-9CA6-CD4FDB927972", KSPROPERTYSETID_ExtendedCameraControl);
#define KSPROPERTYSETID_ExtendedCameraControl DEFINE_GUIDNAMED(KSPROPERTYSETID_ExtendedCameraControl);
Метаданные
Чтобы получить метаданные, компонент пользовательского режима (DevProxy) должен запросить драйвер для требования буфера метаданных. После того как компонент пользовательского режима получает эти сведения, он выделяет соответствующий буфер метаданных для заполнения драйвером и возвращения обратно в компонент пользовательского режима.
Идентификатор свойства KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA , определенный в перечислении KSPROPERTY_CAMERACONTROL_EXTENDED_PROPERTY , используется клиентом для запроса требований к буферу метаданных, таких как необходимый размер метаданных, требования к выравниванию памяти и требуемый тип выделения памяти для выделения буфера метаданных.
Когда компонент пользовательского режима получил требования к буферу метаданных от драйвера, он выделяет соответствующий размер буфера метаданных с требуемым выравниванием памяти из требуемого пула памяти. Этот буфер метаданных вместе с фактическим буфером кадра будет отправлен драйверу для выполнения, а затем вернется в компонент пользовательского режима, когда будет заполнен. В многокадровых сценариях для каждого выделенного буфера кадров выделяется и передается драйверу камеры соответствующий буфер метаданных.
Структура KSSTREAM_METADATA_INFO вместе со следующим флагом используется для отправки буфера метаданных драйверу.
#define KSSTREAM_HEADER_OPTIONSF_METADATA 0x00001000
После того как буфер (метаданные и кадр) помещается в очередь драйверу, DevProxy отправляет стандартную структуру KSSTREAM_HEADER , а затем структуру KS_FRAME_INFO и структуру KSSTREAM_METADATA_INFO . DevProxy будет дополнительно маскировать KSSTREAM_HEADER.OptionFlags значением KSSTREAM_HEADER_OPTIONSF_METADATA перед передачей буфера драйверу.
Если драйвер не поддерживает метаданные или KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA не реализован, управление свойством KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA завершится ошибкой. В этом случае DevProxy не выделяет буфер метаданных, а полезные данные, передаваемые драйверу из DevProxy, не будут содержать структуру KSSTREAM_METADATA_INFO .
Если драйвер поддерживает метаданные и клиент не хочет никаких метаданных, DevProxy не будет выделять буфер метаданных и не передавать KSSTREAM_METADATA_INFO при отправке буфера драйверу. Это поведение уменьшает выделение памяти на хранение ненужных метаданных, если приложению не требуются метаданные на определённом пине.
В следующих структурах описывается макет элементов метаданных, заполняемых драйвером камеры в буфере метаданных.
В приведенном ниже списке содержится макет элемента метаданных. Это должно быть выровнено по границе в 8 байт.
Метаданные
Метаданные подтверждения фотографии определяются MetadataId_PhotoConfirmation. При наличии он указывает, что связанный с предварительным кадром является подтверждающим кадром фотографии. Метаданные подтверждения фотографии анализируются DevProxy.
Пользовательские метаданные определяются идентификатором метаданных , начинающимся с MetadataId_Custom_Start. Настраиваемый элемент метаданных может содержать массив метаданных, который может включать в себя состояние фокусировки и/или обнаруженные лица для предварительного просмотра пин-кода, а также EXIF и/или OEM-метаданные для пин-кода изображения. Точный формат пользовательского объекта blob определяется OEM, реализующим драйвер и MFT0. MFT0 отвечает за синтаксический анализ пользовательского блоба и присоединение каждого элемента метаданных в качестве атрибута, сгруппированного в контейнер атрибутов MFSampleExtension_CaptureMetadata в формате, доступном для чтения конвейером захвата MF и/или WinRT.
Следующие IMFAttributes определены в mfapi.h. Они требуются захватным конвейером MF и/или WinRT. Обратите внимание, что MFT0 не устанавливает какие-либо IMFAttributes для подтверждения фотографии, так как кадр подтверждения фотографии не выйдет за пределы DevProxy.
| Атрибут (GUID) | Тип данных |
|---|---|
| MF_CAPTURE_METADATA_FOCUSSTATE | UINT32 |
| MF_CAPTURE_METADATA_FACEROIS | блоб |
| MF_CAPTURE_METADATA_FRAME_RAWSTREAM | IUnknown |
MF_CAPTURE_METADATA_FRAME_RAWSTREAM IMFAttributes создаются и присоединяются к MFSampleExtension_CaptureMetadata DevProxy, содержащему указатель на интерфейс IMFMediaBuffer, связанный с необработанным буфером метаданных (KSSTREAM_METADATA_INFO.Data).
Когда MFT0 получает IMFSample, он получает необработанный буфер метаданных из MF_CAPTURE_METADATA_FRAME_RAWSTREAM, анализирует все дополнительные пользовательские элементы метаданных, такие как состояние фокуса, преобразует их в соответствующие IMFAttributes, определенные выше, и присоединяет их к контейнеру атрибутов MFSampleExtension_CaptureMetadata. Следующие IMFAttributes должны быть переданы через конвейер MF и любыми сторонними поставщиками MFTs:
| Имя | Тип |
|---|---|
| MFSampleExtension_CaptureMetadata | IUnknown (IMFAttributes) |
| MFSampleExtension_EOS | UINT32 (boolean) |
| MFSampleExtension_PhotoThumbnail | IUnknown (IMFMediaBuffer) |
| MFSampleExtension_PhotoThumbnailMediaType | IUnknown (IMFMediaType) |
Чтобы получить доступ к буферу необработанных метаданных, MFT0 выполняет следующие действия:
Вызывает GetUnknown для MFSampleExtension_CaptureMetadata из интерфейса IMFSample, чтобы получить интерфейс IMFAttributes для пакета атрибутов.
Вызывает GetUnknown на MF_CAPTURE_METADATA_FRAME_RAWSTREAM из интерфейса IMFAttributes, полученного на предыдущем этапе, чтобы получить интерфейс IMFMediaBuffer.
Вызывает Lock, чтобы получить необработанный буфер метаданных, связанный с IMFMediaBuffer.
Чтобы добавить необходимые IMFAttributes в набор атрибутов MFSampleExtension_CaptureMetadata, MFT0 выполняет следующие действия:
Вызывает GetUnknown на MFSampleExtension_CaptureMetadata из интерфейса IMFSample, чтобы получить интерфейс IMFAttributes для контейнера атрибутов.
Вызывает SetUINT32, SetBlob или SetUnknown в MF_CAPTURE_METADATA_XXX из интерфейса IMFAttributes, полученного на предыдущем шаге на основе GUID и типа данных, указанных в таблице выше.
Обязательные атрибуты метаданных
Полный список доступных атрибутов метаданных можно найти в Capture Stats Metadata Attributes
Приоритет фокуса
Идентификатор свойства KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUSPRIORITY — это единственный элемент управления, который связан с DDI приоритета фокуса.
Состояние фокуса
Идентификатор свойства KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUSSTATE — единственный элемент управления, связанный с DDI состояния фокуса.
Расширенная область интереса (ROI)
Следующие идентификаторы свойств являются элементами управления, связанными с ROI DDI:
Подтверждение фотографии
Идентификатор свойства KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOCONFIRMATION — единственный элемент управления, связанный с DDI подтверждения фотографии.
Режим последовательного фотосъемки
Идентификатор свойства KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOMODE является единственным элементом управления, связанным с DDI последовательности фотографий.
Кодировщик EXIF и HW JPEG
Конвейер не требуется для обработки или искажения данных EXIF для кодировщика HW JPEG; поэтому формат данных EXIF предоставляется драйвером, MFT0 и OEM HW JPEG кодировщиком. Партнеры OEM могут определить любой GUID пользовательского атрибута и тип варианта для атрибута EXIF и присоединить его к контейнеру атрибутов MFSampleExtension_CaptureMetaData, чтобы он мог быть использован компонентами OEM. Если аппаратный кодировщик JPEG доступен, компонент приемника фотографий в конвейере загружает этот кодировщик и устанавливает данные EXIF, содержащиеся в описателе MFSampleExtension_CaptureMetaData, в качестве параметра для кодировщика EXIF при помощи метода IPropertyBag2::Write.
Контейнер свойств параметра кодировщика содержит массив PROPBAG2 структур, указывающих доступные свойства параметра кодирования. Параметр кодировщика EXIF для кодировщика HW JPEG определяется следующим свойством в контейнере свойств параметра кодировщика:
| Название свойства | Тип переменной | Ценность | Применимые кодеки |
|---|---|---|---|
| SampleMetaData | VT_UNKNOWN | Указатель на интерфейс IMFAttributes для набора атрибутов MFSampleExtension_CaptureMetaData, который содержит податрибут OEM с данными EXIF. | JPEG |
Контейнер атрибутов MFSampleExtension_CaptureMetaData может содержать исключительно произвольно определенные производителем вложенные атрибуты EXIF, которые кодировщик MFT0 и HW JPEG могут считывать для хранения данных EXIF. Чтобы передать данные EXIF от драйвера в кодировщик HW JPEG, драйвер и MFT0 должны выполнить следующие действия:
Драйвер предоставляет пользовательские метаданные EXIF в буфере метаданных, предоставленном конвейером. Это присоединено к MFSampleExtension_CaptureMetadata как атрибут IMF MF_CAPTURE_METADATA_FRAME_RAWSTREAM DevProxy, когда образец возвращается обратно DevProxy.
Когда MFT0 получает IMFSample, он извлекает необработанный буфер метаданных из MF_CAPTURE_METADATA_FRAME_RAWSTREAM, анализирует пользовательский элемент метаданных EXIF, преобразует его в атрибут IMF, определенный OEM, и прикрепляет его к контейнеру атрибутов MFSampleExtension_CaptureMetadata.
Чтобы передать данные EXIF из MFT0 в кодировщик HW JPEG, узел обработки фотографий в конвейере выполняет следующее:
Вызывается GetUnknown на MFSampleExtension_CaptureMetadata из IMFSample, чтобы получить интерфейс IMFAttributes для контейнера атрибутов при получении IMFSample.
Вызывает IPropertyBag2::Write , чтобы задать свойство параметра кодировщика, идентифицируемое по SampleMetadata, для HW JPEG кодировщика. Свойство параметра кодировщика содержит интерфейс IMFAttributes, который был получен на предыдущем шаге. Этот интерфейс содержит все настраиваемые вложенные атрибуты, включая вложенный атрибут OEM EXIF, и стандартизированные вложенные атрибуты в разделе метаданных , описанном ранее в этом разделе.
Чтобы получить данные EXIF для дальнейшей обработки, кодировщик JPEG HW выполняет следующее:
Вызывает IPropertyBag2::Read , чтобы получить значение свойства для свойства, определенного именем свойства SampleMetadata и типом VT_UNKNOWN . При возврате VARIANT.punkVal получает интерфейс IMFAttributes для MFSampleExtension_CaptureMetadata.
Вызывает GetBlob или GetUnknown на податрибута OEM EXIF из интерфейса, полученного на предыдущем шаге, чтобы получить бинарный объект данных EXIF на основе GUID и типа данных податрибута OEM EXIF.
Миниатюра изображения
MFT0 не требуется для создания эскиза драйвера камеры. Ожидается, что приложение камеры создаст собственный эскиз. Эскиз может быть создан на основе изображения, подтверждающего фотографию, аппаратного кодировщика JPEG или изменения размера полного изображения. Это зависит от разработчиков приложений. Для обеспечения совместимости API и приложений с приложениями Windows 8.1 драйвер камеры не должен реализовать элемент управления KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOTHUMBNAIL .
Целое число ISO
Идентификатор свойства KSPROPERTY_CAMERACONTROL_EXTENDED_ISO_ADVANCED является единственным элементом управления, связанным с целым числом ISO DDI.
Продвинутое фокусирование
Идентификатор свойства KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUSMODE является единственным элементом управления, связанным с целым числом ISO DDI.
Вспышка
Идентификатор свойства KSPROPERTY_CAMERACONTROL_EXTENDED_FLASHMODE является единственным элементом управления, связанным с флэш-DDI.
Zoom / Увеличить
Идентификатор свойства KSPROPERTY_CAMERACONTROL_EXTENDED_ZOOM — единственный элемент управления, связанный с DDI масштабирования.
Режим сцены
Идентификатор свойства KSPROPERTY_CAMERACONTROL_EXTENDED_SCENEMODE является единственным элементом управления, связанным с DDI режима сцены.