Charges utiles de contrôle de la caméra étendue
Les propriétés de contrôle dans le jeu de propriétés KSPROPERTYSETID_ExtendedCameraControl utilisent un format de charge utile commun pour obtenir et définir les données de propriété.
En-tête de propriété de caméra étendue
Toutes les charges utiles commencent par une structure KSCAMERA_EXTENDEDPROP_HEADER . Cette structure contient la cible de code confidentiel avec les indicateurs de contrôle et les fonctionnalités associés. Selon le contrôle particulier, le membre Capabilities contient un ensemble de fonctionnalités fournies par le contrôle. Le membre Flags contient les fonctionnalités réelles actuellement définies ou à définir pour le contrôle.
Le membre PinId spécifie la cible qui est le code pin de l’appareil photo ou le code confidentiel du filtre. Si la propriété est un contrôle de niveau filtre, PinId est défini sur KSCAMERA_EXTENDEDPROP_FILTERSCOPE.
Un contrôle de propriété est synchrone ou asynchrone. Si le contrôle est synchrone, l’indicateur KSCAMERA_EXTENDEDPROP_CAPS_ASYNCCONTROL est défini dans Fonctionnalités. En outre, si le contrôle est annulable, le membre Capabilities inclut l’indicateur KSCAMERA_EXTENDEDPROP_CAPS_CANCELLABLE.
La taille de la charge utile est définie dans le membre Taille. La valeur de Size correspond à la taille entière de la charge utile. Si la propriété utilise uniquement l’en-tête, sizeof = (KSCAMERA_EXTENDEDPROP_HEADER). Sinon, sizeof = (KSCAMERA_EXTENDEDPROP_HEADER) + sizeof(control specific data).
Contrôler des données spécifiques
Certains contrôles de propriété utilisent une structure supplémentaire pour contenir des données supplémentaires. Lorsque des valeurs de données uniques sont utilisées, les données de propriété contiennent une structure KSCAMERA_EXTENDEDPROP_VALUE après KSCAMERA_EXTENDEDPROP_HEADER. La structure KSCAMERA_EXTENDEDPROP_VALUE permet à la propriété d’exprimer une valeur unique comme l’un des types de données.
Pour obtenir ou définir des données supplémentaires, une propriété aura sa propre structure de données spéciale suivant la KSCAMERA_EXTENDEDPROP_HEADER. L’exemple suivant montre un fragment de code de pilote définissant les données spécifiques à la propriété pour une requête KSPROPERTY_TYPE_GET de la propriété 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;