diff options
author | Jay Wang <jaywang@codeaurora.org> | 2016-07-21 18:20:06 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-07-26 10:44:51 -0700 |
commit | f8374f1c0953a934c97055c3ed0b71517c60669d (patch) | |
tree | bd7cea58ec5621b7b8e2adb4605a9cb96b5e7cc7 /src/com/android | |
parent | b3f7fcacc6cf08b15aa61686a44a612b7ed2ee6f (diff) | |
download | android_packages_apps_Snap-f8374f1c0953a934c97055c3ed0b71517c60669d.tar.gz android_packages_apps_Snap-f8374f1c0953a934c97055c3ed0b71517c60669d.tar.bz2 android_packages_apps_Snap-f8374f1c0953a934c97055c3ed0b71517c60669d.zip |
SnapdragonCamera: Synchronize af & ae states before capturing
When in dual camera mode, synchronize AF and AE states between
the two cameras before issuing capture requests. This allows capture
requests to be issued simultaneously and achieves better temporal
matching.
CRs-Fixed: 993611
Change-Id: I097eae6b95153eefebeed3b22e02d4f4e56d565e
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/camera/CaptureModule.java | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java index 33498f070..f360e371b 100644 --- a/src/com/android/camera/CaptureModule.java +++ b/src/com/android/camera/CaptureModule.java @@ -144,6 +144,10 @@ public class CaptureModule implements CameraModule, PhotoController, * Camera state: Waiting for the touch-to-focus to converge. */ private static final int STATE_WAITING_TOUCH_FOCUS = 5; + /** + * Camera state: Focus and exposure has been locked and converged. + */ + private static final int STATE_AF_AE_LOCKED = 6; private static final String TAG = "SnapCam_CaptureModule"; // Used for check memory status for longshot mode @@ -516,8 +520,7 @@ public class CaptureModule implements CameraModule, PhotoController, // CONTROL_AE_STATE can be null on some devices if (aeState == null || (aeState == CaptureResult .CONTROL_AE_STATE_CONVERGED) && isFlashOff(id)) { - mState[id] = STATE_PICTURE_TAKEN; - captureStillPicture(id); + checkAfAeStatesAndCapture(id); } else { runPrecaptureSequence(id); } @@ -542,8 +545,7 @@ public class CaptureModule implements CameraModule, PhotoController, Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE); Log.d(TAG, "STATE_WAITING_NON_PRECAPTURE id: " + id + " aeState:" + aeState); if (aeState == null || aeState != CaptureResult.CONTROL_AE_STATE_PRECAPTURE) { - mState[id] = STATE_PICTURE_TAKEN; - captureStillPicture(id); + checkAfAeStatesAndCapture(id); } break; } @@ -552,6 +554,22 @@ public class CaptureModule implements CameraModule, PhotoController, } } + private void checkAfAeStatesAndCapture(int id) { + if(isBackCamera() && getCameraMode() == DUAL_MODE) { + mState[id] = STATE_AF_AE_LOCKED; + if(mState[BAYER_ID] == STATE_AF_AE_LOCKED && + mState[MONO_ID] == STATE_AF_AE_LOCKED) { + mState[BAYER_ID] = STATE_PICTURE_TAKEN; + mState[MONO_ID] = STATE_PICTURE_TAKEN; + captureStillPicture(BAYER_ID); + captureStillPicture(MONO_ID); + } + } else { + mState[id] = STATE_PICTURE_TAKEN; + captureStillPicture(id); + } + } + public void startFaceDetection() { mUI.onStartFaceDetection(mDisplayOrientation, mSettingsManager.isFacingFront(getMainCameraId()), |