Nutzlasten für erweiterte Kamerasteuerung
Die Steuerelementeigenschaften innerhalb des KSPROPERTYSETID_ExtendedCameraControl-Eigenschaftssatzes verwenden ein allgemeines Nutzlastformat zum Abrufen und Festlegen der Eigenschaftendaten.
Header für erweiterte Kameraeigenschaften
Alle Nutzlasten beginnen mit einer KSCAMERA_EXTENDEDPROP_HEADER-Struktur . Diese Struktur enthält das PIN-Ziel mit den zugehörigen Steuerelementflags und -funktionen. Abhängig vom jeweiligen Steuerelement enthält das Capabilities-Element eine Reihe von Funktionen, die vom Steuerelement bereitgestellt werden. Das Flags-Element enthält die tatsächlichen Funktionen, die derzeit für das Steuerelement festgelegt oder festgelegt werden sollen.
Das PinId-Element gibt das Ziel an, bei dem es sich entweder um die Kamera-PIN oder die Filter-PIN handelt. Wenn die Eigenschaft ein Filterebenensteuerelement ist, wird PinId auf KSCAMERA_EXTENDEDPROP_FILTERSCOPE festgelegt.
Ein Eigenschaftssteuerelement ist entweder synchron oder asynchron. Wenn das Steuerelement synchron ist, wird das Flag KSCAMERA_EXTENDEDPROP_CAPS_ASYNCCONTROL unter Funktionen festgelegt. Wenn das Steuerelement abgebrochen werden kann, enthält das Capabilities-Element außerdem das flag KSCAMERA_EXTENDEDPROP_CAPS_CANCELLABLE.
Die Nutzlastgröße wird im Member Größe festgelegt. Der Wert für Size ist die gesamte Größe der Nutzlast. Wenn die -Eigenschaft nur den Header verwendet, dann Size = sizeof(KSCAMERA_EXTENDEDPROP_HEADER). Andernfalls sizeof = (KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(steuerelementspezifische Daten).
Steuern bestimmter Daten
Einige Eigenschaftensteuerelemente verwenden eine zusätzliche Struktur, um zusätzliche Daten zu enthalten. Wenn einzelne Datenwerte verwendet werden, enthalten die Eigenschaftendaten nach KSCAMERA_EXTENDEDPROP_HEADER eine KSCAMERA_EXTENDEDPROP_VALUE-Struktur. Die KSCAMERA_EXTENDEDPROP_VALUE-Struktur ermöglicht es der -Eigenschaft, einen einzelnen Wert als einen von mehreren Datentypen auszudrücken.
Um zusätzliche Daten abzurufen oder festzulegen, verfügt eine Eigenschaft nach dem KSCAMERA_EXTENDEDPROP_HEADER über eine eigene spezielle Datenstruktur. Das folgende Beispiel zeigt ein Treibercodefragment, das die eigenschaftenspezifischen Daten für eine KSPROPERTY_TYPE_GET Anforderung der KSPROPERTY_CAMERACONTROL_EXTENDED_FIELDOFVIEW-Eigenschaft festlegt.
#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;