2017-03-20 8 views
1

Ich möchte eine Android Camera App für mich selbst entwickeln (kann es teilen, wenn es interessierte Leute gibt), die einen manuellen Fokus während der Videoaufnahme hat.Manuelle Fokussierung mit Android Kamera2 API

Ich habe eine Google-Stichprobe Camera2 app eine SeekBar hinzugefügt, aber ich kann den Weg zum manuellen Fokus nicht finden.

Ich fand Manual focus in camera2, android, aber es funktioniert nicht auf meinem LG G4. Die Standard-Kamera-App ist fast perfekt, da sie den manuellen Fokus im Videomodus nicht erlaubt.

Hat jemand von euch eine Idee?

EDIT: Hier ist der Code des SeekBar Zuhörer:

@Override 
public void onStopTrackingTouch(SeekBar seekBar) {} 

@Override 
public void onStartTrackingTouch(SeekBar seekBar) { 
    mPreviewBuilder.set(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_OFF); 
} 

@Override 
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
    float minimumLens = characteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE); 
    float num = (((float)progress) * minimumLens/100); 
    mPreviewBuilder.set(CaptureRequest.LENS_FOCUS_DISTANCE, num); 
} 

Antwort

3

Sie müssen überprüfen, ob das Gerät, das Sie laufen lassen tatsächlich manuelle Kontrollen in camera2 unterstützt auf.

Der Schlüssel ist, ob die available capabilities des Kamera-Geräts MANUAL_SENSOR auflistet. Wenn dies der Fall ist, können Sie das Objektiv steuern, indem Sie autofocus mode auf OFF stellen und dann lens focus distance auf den gewünschten Wert einstellen. Wenn MANUAL_SENSOR nicht aufgelistet ist, unterstützt das Gerät höchstwahrscheinlich keine manuelle Fokussteuerung (einige Hersteller verwenden leider private Schnittstellen für ihre Standardkamera-App, um manuelle Fokussteuerung zu implementieren).

Diese sollten alle in die Wiederholungsanfrage, die Sie verwenden, um die Vorschau zu steuern.

+0

Es gibt eine APK (https: //play.google.com/store/apps/details?id=com.sdgsystems.camera2probe), um festzustellen, ob ein Gerät die Camera2-API unterstützt und LG G4 eine vollständige Unterstützung hat und MANUAL_SENSOR aufgeführt ist. Ich habe versucht, den Autofokus-Modus auf AUS zu stellen, aber wenn ich den Fokusabstand des Objektivs auf den Wert der SeekBar stelle, macht das nichts. Ich habe meinen Hauptbeitrag bearbeitet, um den Code hinzuzufügen, den ich habe. – Rallph

+1

Wo rufen Sie mSession.setRepeatingRequest (mPreviewBuilder.build()) auf, nachdem Sie die Preview Builder-Werte aktualisiert haben? –

+0

Ich nenne es eigentlich nicht, aber es funktioniert, wenn ich es in 'onProgressChanged()' versuchte, vielen Dank! – Rallph

0

Eddy Talvala beschrieben alles richtig in seiner Antwort, aber wenn Sie immer noch kompliziert fühlen, hier ist ein Code-Snippet, das den Fokus auf unendlich setzt (der Wert 0f hat):

CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); 
int[] capabilities = characteristics 
    .get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES); 

boolean isManualFocusSupported = IntStream.of(capabilities) 
    .anyMatch(x -> x == CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR); 

if (isManualFocusSupported) { 
    previewBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_OFF); 
    previewBuilder.set(CaptureRequest.LENS_FOCUS_DISTANCE, 0f); 
} 
Verwandte Themen