So, I managed to create the functionality i wanted with the old camera the way I wanted it.
With mCamera.autoFocus(autoFocusCallback); i detect when I have focus and run the required code while in preview-mode.
Now I have a hard time grasping how to do the same in camera2 API. My first idea was that i'd use
private void process(CaptureResult result) {
switch (mState) {
case STATE_PREVIEW: {
// We have nothing to do when the camera preview is working normally.
int afState = result.get(CaptureResult.CONTROL_AF_STATE);
//if (CaptureResult.CONTROL_AF_STATE == afState) {
Log.d("SOME KIND OF FOCUS", "WE HAVE");
//}
break;
}
}
but I fail to find some kind of state that tells me we have gotten focus. Does someone have any idea how this can be done with Camera2 API?
You've basically got it. The list of states you can check for and their transitions can be found here.
It depends on what
CONTROL_AF_MODE
you are using, but generally you check forFOCUSED_LOCKED
or perhapsPASSIVE_FOCUSED
, though you may want to have cases forNOT_FOCUSED_LOCKED
andPASSIVE_UNFOCUSED
in case the camera just cannot focus on the scene.For those interested I ended up with a mix of this:
It works good enough :)