J'essaie de verrouiller la mise au point après que mon appareil photo personnalisé a trouvé la mise au point. Tout d'abord, le mode AF réglé sur auto:
builder.set(CaptureRequest.CONTROL_AF_MODE,
CaptureRequest.CONTROL_AF_MODE_AUTO);
Et après avoir touché l'aperçu, il trouve la distance de mise au point, et je dois verrouiller AF et AE en utilisant ce code:
builder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
builder.set(CaptureRequest.CONTROL_AE_LOCK, true);
Le verrouillage AE fonctionne correctement sur tous les appareils. Locking AF fonctionne sur Nexus5 et Nexus 5x. Mais comme pour Samsung S5 et S6, il continue d'essayer de se concentrer.
Quelle est la meilleure façon de verrouiller la mise au point?
Afin de verrouiller l'AF, vous devez prendre soin de ne demander le AF_TRIGGER
Qu'une seule fois en utilisant capture()
au lieu de repeatingRequest()
(sinon il entre dans une boucle de demande af et reste toujours à essayer de se concentrer, mais certains ne corrigent pas cela dans son FW, donc certains appareils comme Nexus 5
se concentrent bien même si cela ne devrait pas)
Ainsi, l'ordre correct sera:
Réglez CONTROL_AF_MODE
Sur CONTROL_AF_MODE_AUTO
(Via session.setRepeatingRequest()
) et le AF_REGIONS
Et le AE_REGIONS
Si vous le souhaitez
Attendez de vérifier que le CONTROL_AF_MODE
Est déjà en mode automatique en vérifiant le totalCaptureRequest
du CaptureCallback
.
Définissez le AF_TRIGGER_START
Dans le générateur avec le CONTROL_AF_MODE_AUTO
Mais cette fois au lieu d'utiliser session.setRepeatingRequest()
utilisez session.capture()
.
Immédiatement après cela, définissez le AF_TRIGGER
Pour définir le AF_TRIGGER_IDLE
(Ne pas annuler!) Une réutilisation session.setRepeatingRequest()
avec le CONTROL_AF_MODE_AUTO
.
Attendez qu'il se soit concentré, vous recevrez FOCUSED_LOCKED
Ou NOT_FOCUSED_LOCKED
.
L'état PASSIVE_FOCUSED
Est uniquement lorsque le CONTROL_AF_MODE
Est en image continue et non en auto!
Prenez soin d'être vraiment en mode de mise au point automatique avant d'effectuer le déclenchement.
Vous devez toujours utiliser session.capture()
avec tous les déclencheurs (avec CONTROL_AE_PRECAPTURE_TRIGGER
Aussi) mais toujours après cela, n'oubliez pas de mettre les déclencheurs à IDLE
(pas annuler) dans une fonction session.repeatingRequest()
Vous ne pouvez pas vous concentrer sur CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE
.
Vous devez mettre votre mode AF sur CONTROL_AF_MODE_AUTO
et attendez FOCUSED_LOCKED
état lors de votre déclenchement AF. Vous pouvez vérifier le fonctionnement de la machine de mise au point Android sur entrez la description du lien ici