2017-02-09 2 views
6

J'essaie de verrouiller la mise au point après la mise au point de mon appareil photo personnalisé. D'abord, il mode AF réglé sur Auto:Comment verrouiller se concentrer dans l'appareil photo api2, Android?

builder.set(CaptureRequest.CONTROL_AF_MODE, 
        CaptureRequest.CONTROL_AF_MODE_AUTO); 

et après avoir touché l'aperçu il trouve l'accent distance 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); 

verrouillage AE fonctionne bien dans tous les appareils. Locking AF fonctionne sur Nexus5 et Nexus 5x. Mais comme pour Samsung S5 et S6, il ne cesse d'essayer de chercher le focus.

Quelle est la meilleure façon de verrouiller le focus?

Répondre

9

Pour verrouiller le AF vous devez prendre soin de demander la AF_TRIGGER qu'une seule fois à l'aide capture() au lieu de repeatingRequest() (sinon il entre dans une boucle de demande d'af et reste toujours essayer de se concentrer, mais certains nexus résoudre ce problème dans son FW, de sorte que certains appareils comme Nexus 5 accent bien même il ne devrait pas)

ainsi, l'ordre sera:

  • Set CONTROL_AF_MODE-CONTROL_AF_MODE_AUTO (via session.setRepeatingRequest()) et le AF_REGIONS et la AE_REGIONS si vous voulez

  • Attendez jusqu'à ce que vous vérifiez que le CONTROL_AF_MODE est déjà en auto en cochant la 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() utilisation session.capture().

  • inmediately après, définissez le AF_TRIGGER pour régler la AF_TRIGGER_IDLE (pas annuler!) Une utilisation à nouveau session.setRepeatingRequest() along with the CONTROL_AF_MODE_AUTO`.

  • Attendez que la mise au point ait été effectuée, vous recevrez FOCUSED_LOCKED ou NOT_FOCUSED_LOCKED.

L'état PASSIVE_FOCUSED est que lorsque le CONTROL_AF_MODE est en image continue pas automatique!

Prenez soin d'être vraiment en mode autofocus avant d'effectuer le déclenchement.

Vous devriez toujours utiliser session.capture() avec tous les déclencheurs (avec CONTROL_AE_PRECAPTURE_TRIGGER trop), mais toujours après de mettre les rappeler à déclencheurs IDLE (pas annuler) dans un session.repeatingRequest()

+0

Très impressionnant explication! Je vous remercie. – imudin07

+0

Ce serait vraiment génial si vous jetez un oeil à cette question http://stackoverflow.com/questions/42090124/searching-focus-keeps-failing-with-external-lens-camera2-api-in-android – imudin07

+0

Mmm, Désolé, je n'ai pas travaillé avec un objectif externe, je ne peux pas vous aider :( – Yamidragut

2

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 attendre l'état FOCUSED_LOCKED pendant votre déclenchement AF. Vous pouvez vérifier la machine de mise au point Android fonctionne sur enter link description here

+0

Oui, je fais aussi même. D'abord, il s'agit de 'CONTROL_AF_MODE_AUTO', et attendez que l'état AF soit' FOCUSED_LOCKED' ou 'PASSIVE_FOCUSED'.Et puis j'ai mis le déclencheur AF à 'CONTROL_AF_TRIGGER_CANCEL', le mode AF à' CONTROL_AF_MODE_CONTINUOUS_PICTURE 'pour Nexus,' CONTROL_AF_MODE_OFF' à Samsung s5/s6 – imudin07

+0

Mais je ne suis pas sûr de la bonne façon, car il agit différemment appareil à périphérique. – imudin07

+0

Si je définis sur 'CONTROL_AF_MODE_OFF', cela fonctionne bien pour Samsung. Mais dans Nexus5/5x, il devient flou – imudin07