2016-05-24 8 views
1
nicht funktioniert

Ich bin mit dem neuen camera2 api auf Android 6.1, sdk 23.Android camera2 manuellen Blitz immer

Ich habe zwei Anfragen: eine Vorschau und ein Standbild-Erfassungs-Anfrage. Ich möchte es so machen, dass der Blitz bei jeder Standbildanforderung auslöst, aber ohne Vorblitz. Gerade jetzt, meine Anfrage sieht wie folgt aus:

CaptureRequest.Builder requester = mCameraDevice.createCaptureRequest(mCameraDevice.TEMPLATE_STILL_CAPTURE); 
     requester.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH); 
     requester.set(CaptureRequest.CONTROL_CAPTURE_INTENT, CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE); 
     requester.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, CaptureRequest.CONTROL_AE_STATE_FLASH_REQUIRED); 
     requester.set(CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER, CaptureRequest.CONTROL_AE_PRECAPTURE_TRIGGER_CANCEL); 
     requester.addTarget(mCaptureBuffer.getSurface()); 

mCaptureSession.capture(requester.build(), null, null); 

Es scheint auf einem Handy (Motorola Moto G), aber nicht auf einem anderen zu arbeiten (ein Nexus 5 - der Blitz lässt sich nicht überhaupt). Ich weiß, dass der Blitz des Nexus funktioniert, weil ich ihn mit anderen Kamera-Apps auslösen kann, also vermute ich, dass es einige Standardeinstellungen gibt, die ich nicht einstelle.

Gibt es einen anderen Weg, wie ich das tun kann/mehr Flags kann ich einstellen?

Danke!

Edit:


Es stellt sich heraus, dass viele der Probleme Ich wurde aus der Arbeit mit Geräten stammten, die nur LIMITED Unterstützung für camera2 hatte. Nur weil Sie mit der Kamera 2 auf die Kamera zugreifen können, bedeutet das nicht, dass Sie alle Funktionen steuern können. Check out this Antwort für mehr

+0

vielleicht haben Sie ein Beispiel? oder sag mir einfach, wo genau ich diese Codezeilen einbeziehen soll? auf 'stillCapture()' oder 'onConfigurate()' oder 'unlockFocus()' medhod? weil ich nichts finden kann, der meinen Code arbeiten lassen könnte ... –

Antwort

2

Flash_Mode und CONTROL_AE_MODE manchmal einige Probleme haben, wenn sie zur gleichen Zeit aktiv sind, so empfehle ich Ihnen, sie zu trennen, halten off FLASH_MODE ausgeschaltet und steuern den Blitz mit CONTROL_AE_MODE. So können Sie die verschiedenen Blitzmodi, so etwas wie folgt verwenden:

int flashMode = yourDesireFlashModeKey; 
     if (flashMode == CameraMetadata.FLASH_MODE_OFF) { 
      builder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON); 
      builder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF); 

     } else if (flashMode == CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH) { 
      builder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH); 
      builder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF); 

     } else if (flashMode == CameraMetadata.CONTROL_AE_MODE_ON_ALWAYS_FLASH) { 
      builder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_ALWAYS_FLASH); 
      builder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF); 

     } else if (flashMode == CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE) { 
      builder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE); 
      builder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF); 
     } 
     else if (flashMode == CameraMetadata.FLASH_MODE_OFF || flashMode == CameraMetadata.CONTROL_AE_MODE_ON_AUTO_FLASH) { 

      builder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF); 
     } 
     else if (flashMode == CameraMetadata.CONTROL_AE_MODE_ON_ALWAYS_FLASH) { 

      builder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_SINGLE); 
     } 

FLASH_MODE in SINGLE Halten Sie für ALWAYS_FLASH, und OFF, wenn Sie die AE_MODE_FLASH Modi verwenden.

Sie können mehr darüber in der nächsten link lesen.

Ich hoffe, es wird Ihnen helfen;)

+0

vielleicht hast du Stück des Beispiels? oder sag mir einfach, wo genau ich diese Codezeilen einbeziehen soll? auf 'stillCapture()' oder 'onConfigurate()' oder 'unlockFocus()' medhod? weil ich nicht anythink finden kann, das meinen Code arbeiten lassen kann ... –

+0

Auto-Blitz arbeitet immer noch nicht für Videoaufnahme .. irgendeine andere Wahl? pls help – iMDroid

+0

Ich denke, die 2 letzten 'else if' Blöcke werden nie ausgeführt, so dass ich nicht verstehe, warum es hier ist. – Max