Dela via


Utökade laster för kamerakontroll

Kontrollegenskaperna i egenskapsuppsättningen KSPROPERTYSETID_ExtendedCameraControl använder ett vanligt nyttolastformat för att hämta och ange egenskapsdata.

Utökad kameraegenskapsrubrik

Alla nyttolaster börjar med strukturen KSCAMERA_EXTENDEDPROP_HEADER. Den här strukturen innehåller PIN-målet med tillhörande kontrollflaggor och funktioner. Beroende på den specifika kontrollen innehåller capabilities-medlemmen en uppsättning funktioner som tillhandahålls av kontrollen. Flags-medlemmen innehåller de faktiska kapaciteter som för närvarande är inställda eller som ska ställas in för kontrollelementet.

PinId-medlemmen anger målet som antingen är kamerans PIN-kod eller filtrets PIN-kod. Om egenskapen är en filternivåkontroll är PinId inställt på KSCAMERA_EXTENDEDPROP_FILTERSCOPE.

En egenskapskontroll är antingen synkron eller asynkron. Om kontrollen är synkron anges flaggan KSCAMERA_EXTENDEDPROP_CAPS_ASYNCCONTROL i Funktioner. Om kontrollen kan avbrytas, innehåller medlemmen Capabilities dessutom flaggan KSCAMERA_EXTENDEDPROP_CAPS_CANCELLABLE.

Nyttolaststorleken anges i medlemmen Storlek. Värdet för Storlek är hela nyttolastens storlek. Om egenskapen endast använder huvudet,storleksstorlek = (KSCAMERA_EXTENDEDPROP_HEADER). Annars Size = sizeof(KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(kontrollspecifik data).

Kontrollera specifika data

Vissa egenskapskontroller använder ytterligare en struktur för att lagra ytterligare data. När enkla datavärden används innehåller egenskapsdata en KSCAMERA_EXTENDEDPROP_VALUE struktur efter KSCAMERA_EXTENDEDPROP_HEADER. Med KSCAMERA_EXTENDEDPROP_VALUE struktur kan egenskapen uttrycka ett enda värde som en av flera datatyper.

För att hämta eller ange ytterligare data har en egenskap en egen speciell datastruktur efter KSCAMERA_EXTENDEDPROP_HEADER. I följande exempel visas ett drivrutinskodfragment som anger egenskapsspecifika data för en KSPROPERTY_TYPE_GET begäran av egenskapen 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;