Compartir a través de


Cargas de control de cámara extendidas

Las propiedades de control del conjunto de propiedades KSPROPERTYSETID_ExtendedCameraControl usan un formato de carga común para obtener y establecer los datos de propiedad.

Encabezado de propiedad de cámara extendida

Todas las cargas comienzan con una estructura de KSCAMERA_EXTENDEDPROP_HEADER . Esta estructura contiene el destino de PIN con las marcas de control y las funcionalidades asociadas. Según el control concreto, el miembro Capabilities contendrá un conjunto de funcionalidades proporcionadas por el control. El miembro Flags contendrá las funcionalidades reales establecidas actualmente o que se establecerán para el control.

El miembro PinId especifica el destino que es el PIN de la cámara o el PIN de filtro. Si la propiedad es un control de nivel de filtro, PinId se establece en KSCAMERA_EXTENDEDPROP_FILTERSCOPE.

Un control de propiedad es sincrónico o asincrónico. Si el control es sincrónico, la marca de KSCAMERA_EXTENDEDPROP_CAPS_ASYNCCONTROL se establece en Funcionalidades. Además, si el control es cancelable, el miembro Capabilities incluye la marca KSCAMERA_EXTENDEDPROP_CAPS_CANCELLABLE.

El tamaño de carga se establece en el miembro Size. El valor de Size es el tamaño completo de la carga útil. Si la propiedad usa solo el encabezado , sizeof = (KSCAMERA_EXTENDEDPROP_HEADER). De lo contrario, Sizeof = (KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(controlar datos específicos).

Controlar datos específicos

Algunos controles de propiedad usan una estructura adicional para contener datos adicionales. Cuando se usan valores de datos únicos, los datos de propiedad contendrán una estructura de KSCAMERA_EXTENDEDPROP_VALUE después de KSCAMERA_EXTENDEDPROP_HEADER. La estructura KSCAMERA_EXTENDEDPROP_VALUE permite que la propiedad exprese un único valor como uno de varios tipos de datos.

Para obtener o establecer datos adicionales, una propiedad tendrá su propia estructura de datos especial después del KSCAMERA_EXTENDEDPROP_HEADER. En el ejemplo siguiente se muestra un fragmento de código de controlador que establece los datos específicos de la propiedad para una solicitud de KSPROPERTY_TYPE_GET de la propiedad 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;