Android setFocusArea und Autofokus

Ich habe gekämpft, mit dieser Funktion für ein paar Tage jetzt...

Scheint es,, die Kamera zu ignorieren(?) Schwerpunkt Bereiche, die ich definiert habe. Hier ist Schnipsel des Codes:

Fokussierung:

protected void focusOnTouch(MotionEvent event) {
    if (camera != null) {
        Rect rect = calculateFocusArea(event.getX(), event.getY());

        Parameters parameters = camera.getParameters();
        parameters.setFocusMode(Parameters.FOCUS_MODE_AUTO);
        parameters.setFocusAreas(Lists.newArrayList(new Camera.Area(rect, 500)));

        camera.setParameters(parameters);
        camera.autoFocus(this);
    }
}

Schwerpunkt Berechnung:

private Rect calculateFocusArea(float x, float y) {
    int left = clamp(Float.valueOf((x / getSurfaceView().getWidth()) * 2000 - 1000).intValue(), focusAreaSize);
    int top = clamp(Float.valueOf((y / getSurfaceView().getHeight()) * 2000 - 1000).intValue(), focusAreaSize);

    return new Rect(left, top, left + focusAreaSize, top + focusAreaSize);
}

Paar von log-Ereignissen aus Camera.AutoFocusCallback#onAutoFocus

Log.d(TAG, String.format("Auto focus success=%s. Focus mode: '%s'. Focused on: %s",
focused,
camera.getParameters().getFocusMode(),
camera.getParameters().getFocusAreas().get(0).rect.toString()));

08-27 11:19:42.240: DEBUG/MyCameraActivity(26268): Auto focus success=true. Focus mode: 'auto'. Focused on: Rect(-109, 643 - -13, 739)
08-27 11:19:55.514: DEBUG/MyCameraActivity(26268): Auto focus success=true. Focus mode: 'auto'. Focused on: Rect(20, 457 - 116, 553)
08-27 11:19:58.037: DEBUG/MyCameraActivity(26268): Auto focus success=true. Focus mode: 'auto'. Focused on: Rect(-159, 536 - -63, 632)
08-27 11:20:00.129: DEBUG/MyCameraActivity(26268): Auto focus success=true. Focus mode: 'auto'. Focused on: Rect(-28, 577 - 68, 673)

Visuell sieht es wie Fokus erfolgreich auf Bereich angemeldet, aber plötzlich verliert er den Fokus und konzentrieren sich auf die Mitte (0, 0) oder was größeres Teil SurfaceView erhalten.

focusAreaSize Berechnung ist über 210px (96dp).
Tests auf dem HTC One, wo Camera.getParameters().getMaxNumFocusAreas() ist 1.

Anfänglichen Fokus-Modus (vor dem ersten tap) eingestellt ist FOCUS_MODE_CONTINUOUS_PICTURE.

Mache ich etwas falsch hier?
Basteln mit Camera.Area Rechteck Größe oder Gewicht zeigt keinen nennenswerten Effekt.

InformationsquelleAutor der Frage Martynas Jurkus | 2013-08-27

Schreibe einen Kommentar