KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET
Идентификатор свойства KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET , определенный в KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_PROPERTY , используется для установки параметров для каждого кадра в драйвере.
Сводка использования
Чтобы задать параметры для каждого кадра, элемент управления свойством KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET отправляется драйверу вместе с полезными данными параметров каждого кадра.
Это свойство может быть прочитано или записано. Хотя вызов GET можно использовать для возврата последних параметров кадра, заданных в драйвере, вызов GET не предоставляется клиенту приложения и выполняется только во время инициализации, когда элемент управления параметрами для каждого кадра создается конвейером MF, где драйвер должен вернуть STATUS_BUFFER_OVERFLOW с размером буфера 0.
В вызове GET сначала драйверу отправляется буфер нулевой длины, чтобы узнать необходимый размер буфера данных для хранения всех параметров каждого кадра, заданных драйвером. В ответ на этот вызов драйвер должен вернуть STATUS_BUFFER_OVERFLOW с требуемым размером буфера параметров для каждого кадра, который должен быть равным 0, если параметры для каждого кадра никогда не были заданы, или по крайней мере размер KSCAMERA_PERFRAMESETTING_HEADER в противном случае.
Полезные данные для каждого кадра должны начинаться с KSCAMERA_PERFRAMESETTING_HEADER, за которым следует один или несколько параметров кадра. Количество параметров кадра указывается в frameCount. Параметры для каждого кадра должны начинаться с KSCAMERA_PERFRAMESETTING_FRAME_HEADER, за которым следует ноль или более параметров элемента. Количество параметров элемента указывается в параметре ItemCount. Параметры для каждого элемента, если таковые должны начинаться с KSCAMERA_PERFRAMESETTING_ITEM_HEADER.
Если для параметров для каждого элемента есть полезные данные Value, за KSCAMERA_PERFRAMESETTING_ITEM_HEADER следует KSCAMERA_EXTENDEDPROP_VALUE. Если пользовательский элемент присутствует, за KSCAMERA_PERFRAMESETTING_ITEM_HEADER должен следовать KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM, а затем пользовательские данные, связанные с идентификатором GUID, указанным в KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM.
Если frameCount имеет значение 0, драйвер должен отклонить полезные данные параметров для каждого кадра. Если itemCount имеет значение 0, параметры фрейма не указываются. Драйвер должен применить глобальные параметры к связанному кадру. Например, FrameCount = 1 и ItemCount = 0 подразумевает одну последовательность фотографий с переменной кадра с глобальными параметрами.
На рисунке ниже показан макет структуры данных для конфигурации полезных данных параметров кадра. В приведенном ниже примере параметры для каждого кадра для четырех кадров настраиваются с кадром 0, содержащим три элемента, два без полезных данных и один с полезными данными Value; кадр 1, содержащий два элемента, один без полезных данных, а другой с полезными данными значения; кадр 2, содержащий элемент 0, который подразумевает глобальные параметры для кадра 2; Кадр 3, содержащий четыре элемента, один с полезными данными значения, два с пользовательским элементом и пользовательскими полезными данными, и один без полезных данных.
Размер в заголовке параметров для каждого кадра представляет общий размер полезных данных для заполнения KSCAMERA_PERFRAMESETTING_HEADER. Размер
Размер в кадре параметров кадра представляет размер, который необходимо заполнить KSCAMERA_PERFRAMESETTING_FRAME_HEADER. Размер кадра.
Размер элемента представляет размер, который необходимо заполнить в KSCAMERA_PERFRAMESETTING_ITEM_HEADER. Размер элемента.
Размер настраиваемого элемента представляет размер, который необходимо заполнить в KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM. Размер настраиваемого элемента.
Время экспозиции параметров для каждого кадра
Если время экспозиции вручную указано в параметрах кадра, KSCAMERA_EXTENDEDPROP_VALUE. Value.ll будет содержать требуемое время экспозиции в вызове SET и текущее время экспозиции, используемое в вызове GET .
Компенсация параметров для каждого кадра
Если в параметрах кадра указана компенсация параметров вручную, KSCAMERA_EXTENDEDPROP_VALUE. Value.l будет содержать требуемую компенсацию экспозиции в вызове SET и текущую компенсацию экспозиции, используемую в вызове GET .
Фокус параметров для каждого кадра
Если в параметрах кадра указан параметр вручную для каждого кадра, KSCAMERA_EXTENDEDPROP_VALUE. Value.ul будет содержать нужную позицию объектива в вызове SET и текущую позицию объектива, используемую в вызове GET .
Параметры iso для каждого кадра
Если драйвер не поддерживает KSCAMERA_EXTENDEDPROP_ISO_MANUAL, полезные данные Значения не включаются. В противном случае за заголовком элемента настройки кадра должен следовать KSCAMERA_EXTENDEDPROP_VALUE. В вызове SETKSCAMERA_EXTENDEDPROP_VALUE. Value.ul содержит требуемую скорость ISO, если KSCAMERA_EXTENDEDPROP_ISO_MANUAL поддерживается и указан в KSCAMERA_PERFRAMESETTING_ITEM_HEADER. Флаги.
Ниже показано, как должны выглядеть заголовок элемента и полезные данные value, если параметры ISO для каждого кадра KSCAMERA_EXTNDEDPROP_ISO_AUTO, KSCAMERA_EXTENDEDPROP_ISO_MANUAL (мин = 30, максимум = 210, шаг =20) следующим образом:
KSCAMERA_EXTNDEDPROP_ISO_AUTO,
KSCAMERA_EXTENDEDPROP_ISO_MANUAL (min = 30, max = 210, step =20)
Если скорость ISO составляет 70
KSCAMERA_PERFRAMESETTING_ITEM_HEADER.Flags = KSCAMERA_EXTENDEDPROP_ISO_MANUAL KSCAMERA_EXTENDEDPROP_VALUE.Value.ul = 70
Если скорость ISO составляет 50
KSCAMERA_PERFRAMESETTING_ITEM_HEADER.Flags = KSCAMERA_EXTENDEDPROP_ISO_MANUAL KSCAMERA_EXTENDEDPROP_VALUE.Value.ul = 50
В следующей таблице перечислены доступные элементы управления и значения для параметров для каждого кадра. Фактическая доступность определяется фактической возможностью драйвера, которую можно получить с помощью KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_CAPABILITY.
Имя | Доступные значения |
---|---|
Время выдержки |
Автоматически или время в 100 наносекундах. |
Мигание |
Включение и выключение, автоматическое включение и выключение красных глаз, мощность вспышки в процентах. |
Коррекция экспозиции |
Значение автоматического или компенсационного шага. |
Скорость ISO |
Автоматически или вручную с целочисленным значением ISO. |
Фокус |
Положение автоматического или логического объектива. Это значение не имеет определенной единицы измерения. |
Пользовательские свойства |
Изготовитель оборудования определяет это с помощью пользовательского GUID и данных свойств. |
Изображение подтверждения |
Вкл./выкл. |
Чтобы передать данные пользовательских свойств в параметры для каждого кадра, приложение выполняет следующие действия:
Вызывает QueryInterface в IFrameSettingsControls, чтобы получить интерфейс IMFGetServices, связанный с параметрами для каждого кадра.
Вызывает GetService из интерфейса IMFGetServices для создания пользовательского интерфейса IMFAttributes в параметрах для каждого кадра.
Вызывает методы SetUINT32, SetBlob и т. д. для guid пользовательского свойства, чтобы задать данные настраиваемых свойств в атрибутах IMFAttributes, связанных с параметрами для каждого кадра.
Платформа будет искать пользовательские атрибуты IMFAttributes для создания полезных данных пользовательских элементов, если таковые имеются при сборке полезных данных параметров для каждого кадра, которые будут установлены в драйвере.
Поле LoopCount в KSCAMERA_PERFRAMESETTING_HEADER указывает количество повторов, которые должны применяться к будущим кадрам, которые будут захвачены в последовательности фотографий. Значение LoopCount жестко закодировано конвейером как 1 (например, параметры для каждого кадра будут применяться только один раз без дальнейших повторений). Поле FrameCount в KSCAMERA_PERFRAMESETTING_HEADER указывает количество параметров кадра, которые должны применяться к кадрам в каждом повторе.
Поле ItemCount в KSCAMERA_PERFRAMESETTING_FRAME_HEADER указывает количество параметров элемента, которые должны применяться к соответствующему кадру. Если ItemCount имеет значение 0, к соответствующему кадру должны применяться глобальные параметры.
В таблице ниже перечислены возможные конфигурации и соответствующие типы последовательностей фотографий.
LoopCount | FrameCount | ItemCount | Тип |
---|---|---|---|
L(L=1) |
N(N>0) |
S(S>=0) |
Конечная переменная последовательность фотографий |
L(L=1) |
1 |
0 |
Один кадр конечной переменной последовательности фотографий с глобальными параметрами |
L(L=1) |
0 |
S |
Недопустимая конфигурация |
Переменная последовательность фотографий была упрощена для выполнения конечных снимков только с одним повтором. Последовательность фотографий с параметрами кадра всегда помечается как переменная последовательность фотографий, а полезные данные параметров для каждого кадра всегда требуются.
Если число циклов — L (L = 1), а число кадров — N (N > 0), это конечная переменная последовательность фотографий. Параметры для каждого кадра будут повторяться L = 1 раз, а параметры N кадров будут применены к следующим N будущим кадрам в каждом повторе.
Если число циклов равно L (L = 1), количество кадров равно 1, а число элементов равно 0, это последовательность фотографий с конечной переменной одного кадра с глобальными параметрами.
Переменная последовательность фотографий дополнительно упрощается, чтобы не запрашивать какие-либо прошлые кадры. Конвейер жестко закодирует запрошенное число последних фотографий (например, RequestedHistoryFrames) до 0. Драйвер доставляет только будущие кадры в переменной последовательности фотографий. На следующем рисунке показано ожидаемое количество кадров, доставляемых драйвером в переменной последовательности фотографий. Число прошлых фотографий указывается в KSCAMERA_EXTENDEDPROP_PHOTOMODE. RequestedHistoryFrames с помощью KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOMODE расширенного элемента управления свойством, который в конвейере жестко закодирован до 0.
N : Frame Count
L : Loop Count
P : Past Photos Requested
T : Total number of frame delivered by driver
L = 1
P = 0
T = (N * L) + P
Для конечной переменной последовательности фотографий драйвер должен пометить KSSTREAM_HEADER. OptionsFlags для последнего кадра с флагом KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE . Это гарантирует, что драйвер автоматически прекратит доставку кадров обратно в конвейер MF после того, как будет доставлено ожидаемое количество будущих кадров. Это фактически останавливает последовательность фотографий и уведомляет клиента приложения о завершении последовательности фотографий. Это происходит, когда драйвер завершает захват последнего кадра в конечной переменной последовательности фотографий.
Требования
Заголовок |
Ksmedia.h |