From f9739a380ecfb39a9c601c8dd47dbda89b21a470 Mon Sep 17 00:00:00 2001 From: Ethan Chen Date: Wed, 20 Apr 2016 17:30:40 -0700 Subject: Revert "Snap: Improve focusing" This reverts commit 57799db3c1757618e00d331fe659ac4058624352. Change-Id: I6027d853c9791a1b14c0dffcce038b450019735a --- src/com/android/camera/FocusOverlayManager.java | 92 ------------------------- src/com/android/camera/PhotoModule.java | 59 ++++------------ src/com/android/camera/PhotoUI.java | 1 + src/com/android/camera/VideoModule.java | 51 ++++---------- src/com/android/camera/VideoUI.java | 1 + 5 files changed, 28 insertions(+), 176 deletions(-) diff --git a/src/com/android/camera/FocusOverlayManager.java b/src/com/android/camera/FocusOverlayManager.java index d7005c7fe..4b2d87c1d 100644 --- a/src/com/android/camera/FocusOverlayManager.java +++ b/src/com/android/camera/FocusOverlayManager.java @@ -27,7 +27,6 @@ import android.util.Log; import com.android.camera.ui.focus.CameraCoordinateTransformer; import com.android.camera.ui.focus.FocusRing; -import com.android.camera.ui.motion.LinearScale; import com.android.camera.util.CameraUtil; import com.android.camera.util.UsageStatistics; @@ -107,7 +106,6 @@ public class FocusOverlayManager { public void startFaceDetection(); public void stopFaceDetection(); public void setFocusParameters(); - public void setFocusRatio(float ratio); } private class MainHandler extends Handler { @@ -264,7 +262,6 @@ public class FocusOverlayManager { } public void onAutoFocus(boolean focused, boolean shutterButtonPressed) { - updateFocusDistance(); if (mState == STATE_FOCUSING_SNAP_ON_FINISH) { // Take the picture no matter focus succeeds or fails. No need // to play the AF sound if we're about to play the shutter @@ -325,7 +322,6 @@ public class FocusOverlayManager { mFocusRing.stopFocusAnimations(); mIsAFRunning = false; } - updateFocusDistance(); mPreviousMoving = moving; } @@ -597,92 +593,4 @@ public class FocusOverlayManager { return mTouchAFRunning; } - private static class FocusInfo { - public final float near; - public final float far; - public final float current; - - public FocusInfo(float _near, float _far, float _current) { - near = _near; - far = _far; - current = _current; - } - } - - private FocusInfo getFocusInfoFromParameters( - String currentParam, String minParam, String maxParam) { - try { - String current = mParameters.get(currentParam); - if (current != null) { - float min = Float.parseFloat(mParameters.get(minParam)); - float max = Float.parseFloat(mParameters.get(maxParam)); - if (!(min == 0.0f && max == 0.0f)) { - return new FocusInfo(min, max, Float.parseFloat(current)); - } - } - } catch (Exception e) { - // skip it - } - return null; - } - - private FocusInfo getFocusInfo() { - // focus positon is horrifically buggy on some HALs. try to - // make the best of it and attempt a few different techniques - // to get an accurate measurement - - // older QCOM (Bacon) - FocusInfo info = getFocusInfoFromParameters("current-focus-position", - "min-focus-pos-index", "max-focus-pos-index"); - if (info != null) { - return info; - } - - // newer QCOM (Crackling) - info = getFocusInfoFromParameters("cur-focus-scale", - "min-focus-pos-ratio", "max-focus-pos-ratio"); - if (info != null) { - return info; - } - - return null; - } - - /** - * Compute the focus range from the camera characteristics and build - * a linear scale model that maps a focus distance to a ratio between - * the min and max range. - */ - private LinearScale getDiopterToRatioCalculator(FocusInfo focusInfo) { - // From the android documentation: - // - // 0.0f represents farthest focus, and LENS_INFO_MINIMUM_FOCUS_DISTANCE - // represents the nearest focus the device can achieve. - // - // Example: - // - // Infinity Hyperfocal Minimum Camera - // <----------|-----------------------------| | - // [0.0] [0.31] [14.29] - if (focusInfo.near == 0.0f && focusInfo.far == 0.0f) { - return new LinearScale(0, 0, 0, 0); - } - - if (focusInfo.near > focusInfo.far) { - return new LinearScale(focusInfo.far, focusInfo.near, 0, 1); - } - - return new LinearScale(focusInfo.near, focusInfo.far, 0, 1); - } - - private void updateFocusDistance() { - final FocusInfo focusInfo = getFocusInfo(); - if (focusInfo != null) { - LinearScale range = getDiopterToRatioCalculator(focusInfo); - if (range.isInDomain(focusInfo.current) && (mFocusRing.isPassiveFocusRunning() || - mFocusRing.isActiveFocusRunning())) { - mListener.setFocusRatio(range.scale(focusInfo.current)); - } - } - } } diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java index 65f0d61a9..dc372a303 100644 --- a/src/com/android/camera/PhotoModule.java +++ b/src/com/android/camera/PhotoModule.java @@ -141,13 +141,11 @@ public class PhotoModule private static final int SWITCH_TO_GCAM_MODULE = 12; private static final int ON_PREVIEW_STARTED = 13; private static final int UPDATE_GESTURES_UI = 14; - private static final int SET_FOCUS_RATIO = 15; // The subset of parameters we need to update in setCameraParameters(). private static final int UPDATE_PARAM_INITIALIZE = 1; private static final int UPDATE_PARAM_ZOOM = 2; private static final int UPDATE_PARAM_PREFERENCE = 4; - private static final int UPDATE_PARAM_FOCUS = 8; private static final int UPDATE_PARAM_ALL = -1; // This is the delay before we execute onResume tasks when coming @@ -492,11 +490,6 @@ public class PhotoModule updateGesturesUI(); break; } - - case SET_FOCUS_RATIO: { - mUI.getFocusRing().setRadiusRatio((Float)msg.obj); - break; - } } } } @@ -942,14 +935,6 @@ public class PhotoModule } } - @Override - public void setFocusRatio(float ratio) { - mHandler.removeMessages(SET_FOCUS_RATIO); - Message m = mHandler.obtainMessage(SET_FOCUS_RATIO); - m.obj = ratio; - mHandler.sendMessage(m); - } - // TODO: need to check cached background apps memory and longshot ION memory private boolean isLongshotNeedCancel() { if (SECONDARY_SERVER_MEM == 0) { @@ -1465,8 +1450,6 @@ public class PhotoModule @Override public void onAutoFocusMoving( boolean moving, CameraProxy camera) { - mCameraDevice.refreshParameters(); - mFocusManager.setParameters(mCameraDevice.getParameters()); mFocusManager.onAutoFocusMoving(moving); } } @@ -1682,7 +1665,7 @@ public class PhotoModule @Override public void setFocusParameters() { - setCameraParameters(UPDATE_PARAM_FOCUS); + setCameraParameters(UPDATE_PARAM_PREFERENCE); } private Location getLocationAccordPictureFormat(String pictureFormat) { @@ -2541,7 +2524,7 @@ public class PhotoModule mCameraDevice.cancelAutoFocus(); setCameraState(IDLE); mFocusManager.setAeAwbLock(false); - setFocusParameters(); + setCameraParameters(UPDATE_PARAM_PREFERENCE); } } @@ -3438,7 +3421,7 @@ public class PhotoModule // initialize focus mode if ((mManual3AEnabled & MANUAL_FOCUS) == 0) { mFocusManager.overrideFocusMode(null); - updateCameraParametersFocus(); + mParameters.setFocusMode(mFocusManager.getFocusMode(false)); } // Set picture size. @@ -3667,33 +3650,25 @@ public class PhotoModule } } - enableAutoFocusMoveCallback(); - + if (mContinuousFocusSupported && ApiHelper.HAS_AUTO_FOCUS_MOVE_CALLBACK) { + updateAutoFocusMoveCallback(); + } //QCom related parameters updated here. qcomUpdateCameraParametersPreference(); return doGcamModeSwitch; } @TargetApi(Build.VERSION_CODES.JELLY_BEAN) - private void enableAutoFocusMoveCallback() { - if (mContinuousFocusSupported && ApiHelper.HAS_AUTO_FOCUS_MOVE_CALLBACK) { - if (mParameters.getFocusMode().equals(CameraUtil.FOCUS_MODE_CONTINUOUS_PICTURE)) { - mCameraDevice.setAutoFocusMoveCallback(mHandler, - (CameraAFMoveCallback) mAutoFocusMoveCallback); - } else { - mCameraDevice.setAutoFocusMoveCallback(null, null); - } + private void updateAutoFocusMoveCallback() { + if (mParameters.getFocusMode().equals(CameraUtil.FOCUS_MODE_CONTINUOUS_PICTURE) || + mParameters.getFocusMode().equals(CameraUtil.FOCUS_MODE_MW_CONTINUOUS_PICTURE)) { + mCameraDevice.setAutoFocusMoveCallback(mHandler, + (CameraAFMoveCallback) mAutoFocusMoveCallback); + } else { + mCameraDevice.setAutoFocusMoveCallback(null, null); } } - private void updateCameraParametersFocus() { - setAutoExposureLockIfSupported(); - setAutoWhiteBalanceLockIfSupported(); - setFocusAreasIfSupported(); - setMeteringAreasIfSupported(); - mParameters.setFocusMode(mFocusManager.getFocusMode(false)); - } - // We separate the parameters into several subsets, so we can update only // the subsets actually need updating. The PREFERENCE set needs extra // locking because the preference can be changed from GLThread as well. @@ -3716,14 +3691,8 @@ public class PhotoModule doModeSwitch = updateCameraParametersPreference(); } - if ((updateSet & UPDATE_PARAM_FOCUS) != 0) { - updateCameraParametersFocus(); - } - - mCameraDevice.setParameters(mParameters); - mParameters = mCameraDevice.getParameters(); - mFocusManager.setParameters(mParameters); CameraUtil.dumpParameters(mParameters); + mCameraDevice.setParameters(mParameters); // Switch to gcam module if HDR+ was selected if (doModeSwitch && !mIsImageCaptureIntent) { diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java index 2aaf19d6d..c26664c2f 100644 --- a/src/com/android/camera/PhotoUI.java +++ b/src/com/android/camera/PhotoUI.java @@ -64,6 +64,7 @@ import com.android.camera.ui.CameraRootView; import com.android.camera.ui.CountDownView; import com.android.camera.ui.CountDownView.OnCountDownFinishedListener; import com.android.camera.ui.FaceView; +import com.android.camera.ui.FocusIndicator; import com.android.camera.ui.ListSubMenu; import com.android.camera.ui.ModuleSwitcher; import com.android.camera.ui.PieRenderer; diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java index 6a1e3e326..5121a032f 100644 --- a/src/com/android/camera/VideoModule.java +++ b/src/com/android/camera/VideoModule.java @@ -96,7 +96,6 @@ public class VideoModule implements CameraModule, private static final int SHOW_TAP_TO_SNAPSHOT_TOAST = 7; private static final int SWITCH_CAMERA = 8; private static final int SWITCH_CAMERA_START_ANIMATION = 9; - private static final int SET_FOCUS_RATIO = 10; private static final int SCREEN_DELAY = 2 * 60 * 1000; @@ -392,11 +391,6 @@ public class VideoModule implements CameraModule, break; } - case SET_FOCUS_RATIO: { - mUI.getFocusRing().setRadiusRatio((Float)msg.obj); - break; - } - default: Log.v(TAG, "Unhandled message: " + msg.what); break; @@ -552,27 +546,15 @@ public class VideoModule implements CameraModule, @Override public void setFocusParameters() { - updateCameraParametersFocus(); - mCameraDevice.setParameters(mParameters); - } - - private void updateCameraParametersFocus() { - setAutoExposureLockIfSupported(); - setAutoWhiteBalanceLockIfSupported(); - setFocusAreasIfSupported(); - setMeteringAreasIfSupported(); - mParameters.setFocusMode(mFocusManager.getFocusMode(true)); - } - - private void setFocusAreasIfSupported() { - if (mFocusAreaSupported) { + if (mFocusAreaSupported) mParameters.setFocusAreas(mFocusManager.getFocusAreas()); - } - } - - private void setMeteringAreasIfSupported() { - if (mMeteringAreaSupported) { + if (mMeteringAreaSupported) mParameters.setMeteringAreas(mFocusManager.getMeteringAreas()); + setAutoExposureLockIfSupported(); + setAutoWhiteBalanceLockIfSupported(); + if (mFocusAreaSupported || mMeteringAreaSupported) { + mParameters.setFocusMode(mFocusManager.getFocusMode(true)); + mCameraDevice.setParameters(mParameters); } } @@ -858,22 +840,14 @@ public class VideoModule implements CameraModule, @Override public void onAutoFocus( boolean focused, CameraProxy camera) { + Log.v(TAG, "AutoFocusCallback, mPaused=" + mPaused); if (mPaused) return; - mCameraDevice.refreshParameters(); - mFocusManager.setParameters(mCameraDevice.getParameters()); + //setCameraState(IDLE); mFocusManager.onAutoFocus(focused, false); } } - @Override - public void setFocusRatio(float ratio) { - mHandler.removeMessages(SET_FOCUS_RATIO); - Message m = mHandler.obtainMessage(SET_FOCUS_RATIO); - m.obj = ratio; - mHandler.sendMessage(m); - } - private void readVideoPreferences() { // The preference stores values from ListPreference and is thus string type for all values. // We need to convert it to int manually. @@ -2564,10 +2538,6 @@ public class VideoModule implements CameraModule, mParameters.setPreviewFrameRate(mProfile.videoFrameRate); } - // Set focus mode - mFocusManager.overrideFocusMode(null); - updateCameraParametersFocus(); - forceFlashOffIfSupported(!mPreviewFocused); videoWidth = mProfile.videoFrameWidth; videoHeight = mProfile.videoFrameHeight; @@ -2607,6 +2577,9 @@ public class VideoModule implements CameraModule, mParameters.setZoom(mZoomValue); } + // Set focus mode + mParameters.setFocusMode(mFocusManager.getFocusMode(true)); + mParameters.set(CameraUtil.RECORDING_HINT, CameraUtil.TRUE); // Enable video stabilization. Convenience methods not available in API diff --git a/src/com/android/camera/VideoUI.java b/src/com/android/camera/VideoUI.java index 30ecffbad..0883f5fac 100644 --- a/src/com/android/camera/VideoUI.java +++ b/src/com/android/camera/VideoUI.java @@ -48,6 +48,7 @@ import com.android.camera.CameraPreference.OnPreferenceChangedListener; import com.android.camera.ui.AbstractSettingPopup; import com.android.camera.ui.CameraControls; import com.android.camera.ui.CameraRootView; +import com.android.camera.ui.FocusIndicator; import com.android.camera.ui.ListSubMenu; import com.android.camera.ui.ModuleSwitcher; import com.android.camera.ui.PieRenderer; -- cgit v1.2.3