2016-10-30 4 views
-1

Il y a une situation étrange. J'ai pris standard google sample camera2API.Pourquoi les lecteurs flash app dans la pile? CONTROL_AE_MODE_ON_ALWAYS_FLASH Camera2API

J'ai besoin que le flash soit travaillé en permanence, quelle que soit la lumière extérieure.

Pour accomplir i ont changé une ligne de code:

private void setAutoFlash(CaptureRequest.Builder requestBuilder) { 
    if (mFlashSupported) { 
//   requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH); 
     requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH); 
    } 
} 

Il a été CONTROL_AE_MODE_ON_AUTO_FLASH je l'ai changé à CONTROL_AE_MODE_ON_ALWAYS_FLASH.

Et j'ai fait face à un problème, quand je clique sur Prenez le bouton, l'appareil photo clignote et c'est tout. App va à la pile ...

Qu'est-ce que je fais mal?

EDIT

je figure sur la prochaine:

i tryed sternes flash sur trois autre appareil Meizu MX5, Samsung S5 et Samsung S6.

Deux d'entre eux Meizu MX5, Samsung S5 fonctionnent correctement avec le code ci-dessus et l'application ne conduit pas en pile.

problème se produire avec Samsung S6, mais ...

Méthode setAutoFlash() invoque du code 3 fois dans des endroits différents

  1. captureStillPicture()
  2. unlockFocus()
  3. onConfigured()

Et astuce est si je désactive setAutoFlash() dans captureStillPicture() pour Samsung S6 il est d'arrêter l'empilement et le flash commence à des œuvres, mais si je tente cette approche pour Meizu MX5, Samsung S5 flash ne fonctionne pas ...

+0

Jetez un coup d'œil à la question [this] (http://stackoverflow.com/q/37144657/6950238) et à celle (http://webcache.googleusercontent.com/search?q=cache:JhfkgFaEFrUJ:crypto .nknu.edu.tw/AOSP/Android6/cts/tests/tests/matériel/src/android/matériel/camera2/cts/CaptureRequestTest.java + & cd = 10 & hl = uk & ct = clnk & gl = ua) exemple. –

+0

@AndriyOmelchenko Ça ne ressemble pas à ce dont j'ai besoin, mais j'ai pensé à des choses intrigantes ... Je les ai ajoutées en question, peut-être que ça peut aider à suspecter quelque chose ... –

+0

"Ça ne ressemble pas que j'ai besoin "- je sais que ce n'est pas la réponse et le poster comme commentaire avec espoir que vous trouverez là quelque chose d'utile) –

Répondre

0

i finalement trouvé la solution

Comme je l'ai dit, méthode

protected final void setAutoFlash(CaptureRequest.Builder requestBuilder) { 
    if (isFlashSupported) { 
     requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH); 
    } 
} 

invoquée à trois endroits différents dans le code.

  1. captureStillPicture()
  2. unlockFocus()
  3. onConfigured()

donc je mis en œuvre cette ligne requestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH); localement dans chaque méthode.

Enfin que je reçois:

  1. unlockFocus() -> mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);
  2. onConfigured() -> mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);

et cette méthode est resté paramètres auto

  1. captureStillPicture() -> captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH);

Mais je ne sais pas la raison pour laquelle je suis arrivé ce problème ... Si quelqu'un connaît la raison s'il vous plaît laissez-moi savoir.