private void Process(CaptureResult result) { switch (owner.mState) { case CameraState.STATE_WAITING_LOCK: { Integer afState = (Integer)result.Get(CaptureResult.ControlAfState); if (afState == null) { owner.CaptureStillPicture(); } else if ((afState.IntValue() == ((int)ControlAFState.FocusedLocked)) || (afState.IntValue() == ((int)ControlAFState.NotFocusedLocked))) { // ControlAeState can be null on some devices Integer aeState = (Integer)result.Get(CaptureResult.ControlAeState); if (aeState == null || aeState.IntValue() == ((int)ControlAEState.Converged)) { owner.mState = CameraState.STATE_PICTURE_TAKEN; owner.CaptureStillPicture(); } else { owner.RunPrecaptureSequence(); } } break; } case CameraState.STATE_WAITING_PRECAPTURE: { // ControlAeState can be null on some devices Integer aeState = (Integer)result.Get(CaptureResult.ControlAeState); if (aeState == null || aeState.IntValue() == ((int)ControlAEState.Precapture) || aeState.IntValue() == ((int)ControlAEState.FlashRequired)) { owner.mState = CameraState.STATE_WAITING_NON_PRECAPTURE; } break; } case CameraState.STATE_WAITING_NON_PRECAPTURE: { // ControlAeState can be null on some devices Integer aeState = (Integer)result.Get(CaptureResult.ControlAeState); if (aeState == null || aeState.IntValue() != ((int)ControlAEState.Precapture)) { owner.mState = CameraState.STATE_PICTURE_TAKEN; owner.CaptureStillPicture(); } break; } case CameraState.STATE_PICTURE_TAKEN: { System.Diagnostics.Debug.WriteLine("STATE_PICTURE_TAKEN"); break; } } }