扩展的相机控件有效负载
KSPROPERTYSETID_ExtendedCameraControl 属性集中的控件属性使用通用有效负载格式来获取和设置属性数据。
扩展相机属性标头
所有有效负载都以 KSCAMERA_EXTENDEDPROP_HEADER 结构开头。 此结构包含具有关联控件标志和功能的 PIN 目标。 根据特定控件, Capabilities 成员将包含控件提供的一组功能。 Flags 成员将包含当前为控件设置或要设置的实际功能。
PinId 成员指定相机 PIN 或筛选器 PIN 的目标。 如果 属性是筛选器级别控件,则将 PinId 设置为 KSCAMERA_EXTENDEDPROP_FILTERSCOPE。
属性控件是同步的或异步的。 如果控件是同步的,则在 “功能”中设置KSCAMERA_EXTENDEDPROP_CAPS_ASYNCCONTROL标志。 此外,如果控件可取消,则 Capabilities 成员包括 KSCAMERA_EXTENDEDPROP_CAPS_CANCELLABLE 标志。
有效负载大小在 Size 成员中设置。 Size 的值是有效负载的整个大小。 如果 属性仅使用 标头,则 Size = sizeof (KSCAMERA_EXTENDEDPROP_HEADER) 。 否则, size = sizeof (KSCAMERA_EXTENDEDPROP_HEADER) + sizeof (控制特定数据) 。
控制特定数据
某些属性控件使用附加结构来保存其他数据。 如果使用单个数据值,属性数据将在 KSCAMERA_EXTENDEDPROP_HEADER 后包含 KSCAMERA_EXTENDEDPROP_VALUE结构。 KSCAMERA_EXTENDEDPROP_VALUE 结构允许 属性将单个值表示为多种数据类型之一。
若要获取或设置其他数据,属性将在 KSCAMERA_EXTENDEDPROP_HEADER后具有自己的特殊数据结构。 以下示例演示为 KSPROPERTY_CAMERACONTROL_EXTENDED_FIELDOFVIEW 属性的KSPROPERTY_TYPE_GET请求 设置属性特定 数据的驱动程序代码片段。
#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;