共用方式為


擴展相機控制負載

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;