Partager via


KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET

L’ID de propriété KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET défini dans KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_PROPERTY est utilisé pour définir les paramètres par image dans le pilote.

Récapitulatif de l’utilisation

Pour définir les paramètres par image, le contrôle de propriété KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_SET est envoyé au pilote avec une charge utile de paramètres par image.

Cette propriété peut être lue ou écrite. Bien qu’un appel GET puisse être utilisé pour retourner les derniers paramètres par image qui ont été définis sur le pilote, l’appel GET n’est pas exposé au client d’application et n’est émis qu’au moment de l’initialisation lorsque le contrôle de paramètre par image est construit par le pipeline MF, où le pilote doit retourner STATUS_BUFFER_OVERFLOW avec une taille de mémoire tampon de 0.

Dans un appel GET, une mémoire tampon de longueur nulle est d’abord envoyée au pilote pour déterminer la taille de mémoire tampon de données requise pour contenir l’ensemble des paramètres par image du pilote. En réponse à cet appel, le pilote doit retourner STATUS_BUFFER_OVERFLOW avec la taille de mémoire tampon des paramètres par image requise qui doit être égale à 0 si aucun paramètre par image n’a jamais été défini ou au moins la taille de KSCAMERA_PERFRAMESETTING_HEADER sinon.

La charge utile du paramètre par image doit commencer par un KSCAMERA_PERFRAMESETTING_HEADER, suivi d’un ou de plusieurs paramètres d’image. Le nombre de paramètres d’image est spécifié dans FrameCount. Les paramètres de chaque image doivent commencer par un KSCAMERA_PERFRAMESETTING_FRAME_HEADER, suivi de zéro ou plusieurs paramètres d’élément. Le nombre de paramètres d’élément est spécifié dans ItemCount. Les paramètres de chaque élément, le cas échéant, doivent commencer par un KSCAMERA_PERFRAMESETTING_ITEM_HEADER.

Pour les paramètres de chaque élément, si une charge utile Value est présente, la KSCAMERA_PERFRAMESETTING_ITEM_HEADER doit être suivie d’un KSCAMERA_EXTENDEDPROP_VALUE. Si un élément personnalisé est présent, KSCAMERA_PERFRAMESETTING_ITEM_HEADER doit être suivi d’un KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM, suivi des données personnalisées associées à l’ID GUID spécifié dans KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM.

Si FrameCount a la valeur 0, le pilote doit rejeter la charge utile des paramètres par image. Si ItemCount a la valeur 0, aucun paramètre de frame n’est spécifié. Le pilote doit appliquer des paramètres globaux au frame associé. Par exemple, FrameCount = 1 et ItemCount = 0 impliquent une séquence de photos de variable de cadre unique avec des paramètres globaux.

La figure ci-dessous illustre la disposition de la structure de données d’une configuration de charge utile des paramètres par image. Dans l’exemple ci-dessous, des paramètres par image pour quatre images sont configurés avec le frame 0 contenant trois éléments, deux sans charge utile et un avec une charge utile Value ; cadre 1 contenant deux éléments, l’un sans charge utile et l’autre avec une charge utile de valeur ; l’image 2 contenant 0 élément, ce qui implique les paramètres globaux de l’image 2 ; frame 3 contenant quatre éléments, un avec une charge utile de valeur, deux avec un élément personnalisé et une charge utile de données personnalisées, et un sans charge utile.

structure de perframesetting-header.

  1. La taille dans l’en-tête des paramètres par image représente la taille totale de la charge utile à remplir dans KSCAMERA_PERFRAMESETTING_HEADER. Taille

  2. La taille dans le cadre des paramètres par image représente la taille à remplir dans KSCAMERA_PERFRAMESETTING_FRAME_HEADER. Taille d’un cadre.

  3. La taille de l’élément représente la taille à remplir dans KSCAMERA_PERFRAMESETTING_ITEM_HEADER. Taille d’un élément.

  4. La taille de l’élément personnalisé représente la taille à remplir dans KSCAMERA_PERFRAMESETTING_CUSTOM_ITEM. Taille d’un élément personnalisé.

Durée d’exposition des paramètres par image

Si la durée d’exposition manuelle est spécifiée dans les paramètres par image, KSCAMERA_EXTENDEDPROP_VALUE. Value.ll contient la durée d’exposition souhaitée dans un appel SET et la durée d’exposition actuelle utilisée dans un appel GET .

Compensation des paramètres par image

Si la compensation manuelle des paramètres est spécifiée dans les paramètres par image, KSCAMERA_EXTENDEDPROP_VALUE. Value.l contient la compensation d’exposition souhaitée dans un appel SET et la compensation d’exposition actuelle utilisée dans un appel GET .

Focus sur les paramètres par image

Si les paramètres manuels par image sont spécifiés dans les paramètres par image, KSCAMERA_EXTENDEDPROP_VALUE. Value.ul contient la position de l’objectif souhaitée dans un appel SET et la position actuelle de l’objectif utilisée dans un appel GET .

ISO des paramètres par image

Si le pilote ne prend pas en charge KSCAMERA_EXTENDEDPROP_ISO_MANUAL, la charge utile Value n’est pas incluse. Sinon, l’en-tête d’élément de paramètre par image doit être suivi d’un KSCAMERA_EXTENDEDPROP_VALUE. Dans un appel SET , KSCAMERA_EXTENDEDPROP_VALUE. Value.ul contient la vitesse ISO souhaitée si KSCAMERA_EXTENDEDPROP_ISO_MANUAL est pris en charge et spécifié dans KSCAMERA_PERFRAMESETTING_ITEM_HEADER. Indicateurs.

Voici comment l’en-tête d’élément et la charge utile de valeur doivent ressembler lorsque la fonctionnalité ISO des paramètres par image est KSCAMERA_EXTNDEDPROP_ISO_AUTO, KSCAMERA_EXTENDEDPROP_ISO_MANUAL (min = 30, max = 210, étape =20) comme suit :

KSCAMERA_EXTNDEDPROP_ISO_AUTO, 
KSCAMERA_EXTENDEDPROP_ISO_MANUAL (min = 30, max = 210, step =20)
  1. Si la vitesse ISO est de 70

    KSCAMERA_PERFRAMESETTING_ITEM_HEADER.Flags = KSCAMERA_EXTENDEDPROP_ISO_MANUAL
    KSCAMERA_EXTENDEDPROP_VALUE.Value.ul = 70
    
  2. Si la vitesse ISO est de 50

    KSCAMERA_PERFRAMESETTING_ITEM_HEADER.Flags = KSCAMERA_EXTENDEDPROP_ISO_MANUAL
    KSCAMERA_EXTENDEDPROP_VALUE.Value.ul = 50
    

Le tableau suivant récapitule les contrôles et valeurs disponibles pour les paramètres par image. La disponibilité réelle est déterminée par la capacité réelle du pilote, qui peut être obtenue à l’aide de KSPROPERTY_CAMERACONTROL_PERFRAMESETTING_CAPABILITY.

Nom Valeurs disponibles

Temps d’exposition

Auto ou durée en 100 nanosecondes.

Clignote

On/Off, auto, red eye reduction on/off, flash power in percentage.

Compensation de l’exposition

Valeur de l’étape de compensation ou automatique.

Sensibilité ISO

Automatique ou manuelle avec valeur ISO entière.

Priorité

Position automatique ou logique de l’objectif. Cette valeur n’a pas d’unité spécifique.

Propriétés personnalisées

L’OEM le définit avec un GUID personnalisé et des données de propriété.

Image de confirmation

Actif/inactif

Pour passer les données de propriété personnalisées aux paramètres par image, l’application effectue les opérations suivantes :

  1. Appelle QueryInterface sur IFrameSettingsControls pour obtenir l’interface IMFGetServices associée aux paramètres par image.

  2. Appelle getService à partir de l’interface IMFGetServices pour créer une interface IMFAttributes personnalisée sur les paramètres par image.

  3. Appelle setUINT32, SetBlob, etc. sur le GUID de propriété personnalisée pour définir les données de propriété personnalisée sur les imfAttributes associés aux paramètres par image.

L’infrastructure recherche les attributs IMFAttributes personnalisés pour construire les charges utiles d’élément personnalisées, le cas échéant, lors de l’assemblage de la charge utile des paramètres par image à définir sur le pilote.

Le champ LoopCount dans KSCAMERA_PERFRAMESETTING_HEADER spécifie le nombre de répétitions que les paramètres par image doivent être appliqués aux images futures à capturer dans une séquence de photos. LoopCount est codé en dur sur 1 par le pipeline (par exemple, les paramètres par image ne seront appliqués qu’une seule fois sans répétitions supplémentaires). Le champ FrameCount dans KSCAMERA_PERFRAMESETTING_HEADER spécifie le nombre de paramètres d’image que les paramètres par image doivent être appliqués aux images dans chaque répétition.

Le champ ItemCount dans KSCAMERA_PERFRAMESETTING_FRAME_HEADER spécifie le nombre de paramètres d’élément à appliquer au cadre correspondant. Si ItemCount a la valeur 0, les paramètres globaux doivent être appliqués au frame correspondant.

Le tableau ci-dessous répertorie les configurations possibles et les types de séquences de photos correspondants.

LoopCount FrameCount ItemCount Type

L(L=1)

N(N>0)

S(S>=0)

Séquence de photos variables finies

L(L=1)

1

0

Séquence de photos variables d’une image finie avec des paramètres globaux

L(L=1)

0

S

Configuration non valide

La séquence de photos variables a été simplifiée pour effectuer des captures finies avec une seule répétition. La séquence de photos avec les paramètres par image est toujours marquée comme une séquence de photos variable et la charge utile des paramètres par image est toujours requise.

Si le nombre de boucles est L (L = 1) et le nombre d’images est N (N > 0), il s’agit d’une séquence de photos variable finie. Les paramètres par image sont répétés L = 1 fois avec les paramètres N frame appliqués aux N prochaines images dans chaque répétition.

Si le nombre de boucles est L (L = 1), le nombre d’images est égal à 1 et le nombre d’éléments est égal à 0, il s’agit d’une séquence de photos à variable finie à un cadre avec des paramètres globaux.

La séquence de photos variables est encore simplifiée pour ne pas demander d’images passées. Le pipeline code en dur le nombre de photos passées demandées (par exemple, RequestedHistoryFrames) sur 0. Le pilote fournit uniquement des images futures dans une séquence de photos variables. La figure suivante illustre le nombre attendu d’images à livrer par le pilote dans une séquence de photos variables. Le nombre de photos passées est spécifié dans KSCAMERA_EXTENDEDPROP_PHOTOMODE. RequestedHistoryFrames par le KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOMODE contrôle de propriété étendu codé en dur sur 0 par le pipeline.

N : Frame Count
L : Loop Count
P : Past Photos Requested
T : Total number of frame delivered by driver
L = 1
P = 0
T = (N * L) + P

Pour la séquence de photos variable finie, le pilote doit marquer le KSSTREAM_HEADER. OptionsFlags pour le dernier cadre avec l’indicateur KSSTREAM_HEADER_OPTIONSF_ENDOFPHOTOSEQUENCE . Cela permet de s’assurer que le pilote cesse automatiquement de remettre des images au pipeline MF une fois que la quantité d’images futures attendues a été remise. Cela arrête efficacement la séquence de photos et avertit le client d’application de l’achèvement de la séquence de photos. Cela se produit lorsque le pilote termine la capture du dernier cadre dans la séquence de photos variable finie.

Configuration requise

En-tête

Ksmedia.h