android camera setfocusareas,Android setFocusArea and Auto Focus

管弘
2023-12-01

I've been battling with this feature for couple of days now...

It seems, that camera is ignoring(?) focus areas that I've defined. Here is snippets of the code:

Focusing:

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);

}

}

Focus area calculation:

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);

}

Couple of log events from 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)

Visually it looks like focus succeeds on logged area, but the suddenly it loses focus and focus on center (0, 0), or what takes bigger part of SurfaceView is obtained.

focusAreaSize used in calculation is about 210px (96dp).

Testing on HTC One where Camera.getParameters().getMaxNumFocusAreas() is 1.

Initial focus mode (before first tap) is set to FOCUS_MODE_CONTINUOUS_PICTURE.

Am I doing something wrong here?

Tinkering with Camera.Area rectangle size or weight doesn't show any noticeable effect.

 类似资料:

相关阅读

相关文章

相关问答