拡張カメラ コントロール ペイロード
KSPROPERTYSETID_ExtendedCameraControl プロパティ セット内の制御プロパティは、プロパティ データを取得および設定するための一般的なペイロード形式を使用します。
拡張カメラ プロパティ ヘッダー
すべてのペイロードは、KSCAMERA_EXTENDEDPROP_HEADER 構造体で始まります。 この構造には、関連する制御フラグと機能を備えたピン ターゲットが含まれています。 特定の制御に応じて、 機能メンバーには、制御によって提供される一連の機能が含まれます。 フラグメンバーには、制御に対して現在設定されている、またはこれから設定される実際の機能が含まれます。
PinId メンバーは、カメラ ピンまたはフィルター ピンのいずれかであるターゲットを指定します。 プロパティがフィルター レベル制御の場合、PinId が KSCAMERA_EXTENDEDPROP_FILTERSCOPE に設定されます。
プロパティ制御は、同期または非同期です。 制御が同期の場合、KSCAMERA_EXTENDEDPROP_CAPS_ASYNCCONTROL フラグは機能に設定されます。 また、制御が取り消し可能な場合、 機能メンバーには KSCAMERA_EXTENDEDPROP_CAPS_CANCELLABLE フラグが含まれます。
ペイロード サイズは、サイズメンバーに設定されます。 サイズの値は、ペイロードの全体のサイズです。 プロパティがヘッダーのみを使用する場合は、この値は Size = sizeof(KSCAMERA_EXTENDEDPROP_HEADER)です。 それ以外の場合は、この値は Size = sizeof(KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(制御固有のデータ)です。
制御固有のデータ
一部のプロパティ制御は、追加のデータを保持するために追加の構造体を使用します。 単一のデータ値を使用する場合、プロパティ データには、KSCAMERA_EXTENDEDPROP_HEADERの 後に KSCAMERA_EXTENDEDPROP_VALUE 構造体が含まれます。 KSCAMERA_EXTENDEDPROP_VALUE 構造体を使用すると、プロパティは 1 つの値を複数のデータ タイプの 1 つとして表すことができます。
追加のデータを取得または設定するために、プロパティには、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;