Condividi tramite


Payload di controllo della fotocamera estesa

Le proprietà del controllo all'interno del set di proprietà KSPROPERTYSETID_ExtendedCameraControl usano un formato payload comune per ottenere e impostare i dati delle proprietà.

Intestazione della proprietà della fotocamera estesa

Tutti i payload iniziano con una struttura KSCAMERA_EXTENDEDPROP_HEADER . Questa struttura contiene la destinazione DEL PIN con i flag di controllo e le funzionalità associati. A seconda del controllo specifico, il membro Capabilities conterrà un set di funzionalità fornite dal controllo. Il membro Flags conterrà le funzionalità effettive attualmente impostate o da impostare per il controllo.

Il membro PinId specifica la destinazione, ovvero il PIN della fotocamera o il PIN del filtro. Se la proprietà è un controllo a livello di filtro, PinId viene impostato su KSCAMERA_EXTENDEDPROP_FILTERSCOPE.

Un controllo proprietà è sincrono o asincrono. Se il controllo è sincrono, il flag KSCAMERA_EXTENDEDPROP_CAPS_ASYNCCONTROL viene impostato in Funzionalità. Inoltre, se il controllo è annullabile, il membro Capabilities include il flag KSCAMERA_EXTENDEDPROP_CAPS_CANCELLABLE.

Le dimensioni del payload sono impostate nel membro Size. Il valore per Size è l'intera dimensione del payload. Se la proprietà usa solo l'intestazione, sizeof = (KSCAMERA_EXTENDEDPROP_HEADER). In caso contrario, sizeof = (KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(control specific data).

Controllare dati specifici

Alcuni controlli proprietà usano una struttura aggiuntiva per contenere dati aggiuntivi. Dove vengono usati valori di dati singoli, i dati della proprietà conterranno una struttura KSCAMERA_EXTENDEDPROP_VALUE dopo KSCAMERA_EXTENDEDPROP_HEADER. La struttura KSCAMERA_EXTENDEDPROP_VALUE consente alla proprietà di esprimere un singolo valore come uno dei diversi tipi di dati.

Per ottenere o impostare dati aggiuntivi, una proprietà avrà una propria struttura di dati speciale dopo il KSCAMERA_EXTENDEDPROP_HEADER. Nell'esempio seguente viene illustrato un frammento di codice driver che imposta i dati specifici della proprietà per una richiesta di KSPROPERTY_TYPE_GET della proprietà 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;