Полезные данные расширенного управления камерой
Свойства элемента управления в наборе свойств 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;