Compartir a través de


Cargas de control de cámara extendidas

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

Encabezado de propiedades extendidas de cámara

Todas las cargas comienzan con una estructura KSCAMERA_EXTENDEDPROP_HEADER. Esta estructura contiene el destino de PIN con las características y marcas de control asociadas. Según el control concreto, el miembro Capabilities contendrá un conjunto de funcionalidades proporcionadas por el control. El miembro Flags contendrá las capacidades reales actualmente establecidas 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 KSCAMERA_EXTENDEDPROP_CAPS_ASYNCCONTROL se establece en Capacidades. Además, si el control se puede cancelar, 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, entonces Size = sizeof(KSCAMERA_EXTENDEDPROP_HEADER). De lo contrario, Size = sizeof(KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(datos específicos de control).

Control de 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 KSCAMERA_EXTENDEDPROP_VALUE después de KSCAMERA_EXTENDEDPROP_HEADER. La estructura KSCAMERA_EXTENDEDPROP_VALUE permite que la propiedad exprese un solo valor como uno de varios tipos de datos.

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