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


Полезные данные расширенного управления камерой

Свойства элемента управления в наборе свойств KSPROPERTYSETID_ExtendedCameraControl используют общий формат полезных данных для получения и настройки данных свойства.

Расширенный заголовок свойства камеры

Все полезные данные начинаются с KSCAMERA_EXTENDEDPROP_HEADER структуры. Эта структура содержит целевой пин-код с соответствующими флагами и возможностями элементов управления. В зависимости от конкретного элемента управления элемент Capabilities будет содержать набор возможностей, предоставляемых элементом управления . Элемент Flags будет содержать фактические возможности, которые в данный момент заданы или должны быть заданы для элемента управления .

Член PinId указывает целевой объект, который является ПИН-кодом камеры или ПИН-кодом фильтра. Если свойство является элементом управления уровня фильтра, pinId имеет значение KSCAMERA_EXTENDEDPROP_FILTERSCOPE.

Элемент управления свойством является синхронным или асинхронным. Если элемент управления является синхронным, флаг KSCAMERA_EXTENDEDPROP_CAPS_ASYNCCONTROL устанавливается в разделе Возможности. Кроме того, если элемент управления можно отменить, элемент Capabilities включает флаг KSCAMERA_EXTENDEDPROP_CAPS_CANCELLABLE.

Размер полезных данных задается в элементе Размер. Значение параметра Размер — это весь размер полезных данных. Если свойство использует только заголовок, выберите Size = sizeof(KSCAMERA_EXTENDEDPROP_HEADER). В противном случае — Size = sizeof(KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(control specific data).

Управление конкретными данными

Некоторые элементы управления свойствами используют дополнительную структуру для хранения дополнительных данных. Если используются отдельные значения данных, данные свойств будут содержать KSCAMERA_EXTENDEDPROP_VALUE структуру после KSCAMERA_EXTENDEDPROP_HEADER. Структура KSCAMERA_EXTENDEDPROP_VALUE позволяет свойству выразить одно значение как один из нескольких типов данных.

Чтобы получить или задать дополнительные данные, свойство будет иметь собственную специальную структуру данных после KSCAMERA_EXTENDEDPROP_HEADER. В следующем примере показан фрагмент кода драйвера, задающий данные, относящиеся к свойству, для запроса KSPROPERTY_TYPE_GET свойства KSPROPERTY_CAMERACONTROL_EXTENDED_FIELDOFVIEW .

#define FL_WIDE_ANGLE 35
#define FL_NORMAL     50

PBYTE Payload = (PBYTE)PropData;
PKSCAMERA_EXTENDEDPROP_HEADER ExtendedPropHeader = (PKSCAMERA_EXTENDEDPROP_HEADER)Payload;
PKSCAMERA_EXTENDEDPROP_FIELDOFVIEW ExtendedDataFov = (PKSCAMERA_EXTENDEDPROP_FIELDOFVIEW)(Payload + sizeof(KSCAMERA_EXTENDEDPROP_HEADER));

ExtendedPropHeader->Version = 1;
ExtendedPropHeader->PinId = KSCAMERA_EXTENDEDPROP_FILTERSCOPE;
ExtendedPropHeader->Size = sizeof(KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(KSCAMERA_EXTENDEDPROP_FIELDOFVIEW);
ExtendedPropHeader->Result = 0;
ExtendedPropHeader->Flags = 0;
ExtendedPropHeader->Capability = 0;

ExtendedDataFov->NormalizedFocalLengthX = FL_WIDE_ANGLE;
ExtendedDataFov->NormalizedFocalLengthY = FL_WIDE_ANGLE;
ExtendedDataFov->Flag = 0;
ExtendedDataFov->Reserved = 0;