OSDN Git Service

Fix focus ring radius responses.
authorPaul Rohde <codelogic@google.com>
Fri, 27 Feb 2015 21:06:16 +0000 (13:06 -0800)
committerPaul Rohde <codelogic@google.com>
Fri, 27 Feb 2015 23:05:36 +0000 (15:05 -0800)
This fixes a scaling problem that was causing the focus controller
to ignore the radius changes on devices that supported providing
lens position. It also removes redundant focus indicator clearing
that was causing intermitent and jumpy animations.

Bug: 19527399

Change-Id: I0b2a734aa9dc4030430f1420cc26d75784dcbdf6

src/com/android/camera/CaptureModule.java
src/com/android/camera/captureintent/state/StateReadyForCapture.java
src/com/android/camera/one/OneCamera.java
src/com/android/camera/ui/focus/FocusController.java
src/com/android/camera/ui/focus/LensRangeCalculator.java
src/com/android/camera/ui/motion/LinearScale.java

index d21409e..cb8d80c 100644 (file)
@@ -852,14 +852,15 @@ public class CaptureModule extends CameraModule implements
                 startPassiveFocus();
                 break;
             case ACTIVE_SCAN:
+                // Unused, manual scans are triggered via the UI
                 break;
             case PASSIVE_FOCUSED:
             case PASSIVE_UNFOCUSED:
-                mFocusController.clearFocusIndicator();
+                // Unused
                 break;
             case ACTIVE_FOCUSED:
             case ACTIVE_UNFOCUSED:
-                mFocusController.clearFocusIndicator();
+                // Unused
                 break;
         }
 
index 80e1b91..82aa9f6 100644 (file)
 
 package com.android.camera.captureintent.state;
 
-import com.google.common.base.Optional;
+import android.graphics.Bitmap;
+import android.graphics.Point;
+import android.media.MediaActionSound;
+import android.net.Uri;
 
 import com.android.camera.async.RefCountBase;
 import com.android.camera.captureintent.CaptureIntentConfig;
@@ -31,11 +34,7 @@ import com.android.camera.settings.SettingsManager;
 import com.android.camera.ui.CountDownView;
 import com.android.camera.ui.focus.FocusController;
 import com.android.camera.util.Size;
-
-import android.graphics.Bitmap;
-import android.graphics.Point;
-import android.media.MediaActionSound;
-import android.net.Uri;
+import com.google.common.base.Optional;
 
 /**
  * Represents a state that allows users to take a picture. The capture UI
@@ -289,7 +288,6 @@ public final class StateReadyForCapture extends State {
         return NO_CHANGE;
     }
 
-    @Override
     public Optional<State> processOnCancelShutterButtonClicked() {
         // Cancel in this state means that the countdown was cancelled.
         mIsCountingDown = false;
index 0bec10e..218c1e4 100644 (file)
@@ -249,6 +249,14 @@ public interface OneCamera {
             result = 31 * result + (isActive ? 1 : 0);
             return result;
         }
+
+        @Override
+        public String toString() {
+            return "FocusState{" +
+                  "lensDistance=" + lensDistance +
+                  ", isActive=" + isActive +
+                  '}';
+        }
     }
 
     /**
index ad5e6fe..cfebe95 100644 (file)
@@ -19,6 +19,7 @@ package com.android.camera.ui.focus;
 import android.graphics.RectF;
 
 import com.android.camera.async.MainThread;
+import com.android.camera.debug.Log;
 import com.android.camera.debug.Log.Tag;
 import com.android.camera.one.OneCamera.FocusDistanceListener;
 import com.android.camera.ui.motion.LinearScale;
@@ -48,6 +49,7 @@ public class FocusController implements FocusDistanceListener {
         mMainThread.execute(new Runnable() {
             @Override
             public void run() {
+                Log.v(TAG, "Running showPassiveFocusAtCenter()");
                 mFocusRing.startPassiveFocus();
                 mFocusRing.centerFocusLocation();
             }
@@ -66,6 +68,7 @@ public class FocusController implements FocusDistanceListener {
         mMainThread.execute(new Runnable() {
             @Override
             public void run() {
+                Log.v(TAG, "Running showPassiveFocusAt(" + viewX + ", " + viewY + ")");
                 mFocusRing.startPassiveFocus();
                 mFocusRing.setFocusLocation(viewX, viewY);
             }
@@ -84,6 +87,7 @@ public class FocusController implements FocusDistanceListener {
         mMainThread.execute(new Runnable() {
             @Override
             public void run() {
+                Log.v(TAG, "showActiveFocusAt(" + viewX + ", " + viewY + ")");
                 mFocusRing.startActiveFocus();
                 mFocusRing.setFocusLocation(viewX, viewY);
 
@@ -100,6 +104,7 @@ public class FocusController implements FocusDistanceListener {
         mMainThread.execute(new Runnable() {
             @Override
             public void run() {
+                Log.v(TAG, "clearFocusIndicator()");
                 mFocusRing.stopFocusAnimations();
             }
         });
@@ -114,6 +119,7 @@ public class FocusController implements FocusDistanceListener {
         mMainThread.execute(new Runnable() {
             @Override
             public void run() {
+               Log.v(TAG, "configurePreviewDimensions(" + previewArea + ")");
                mFocusRing.configurePreviewDimensions(previewArea);
             }
         });
@@ -127,6 +133,8 @@ public class FocusController implements FocusDistanceListener {
         mMainThread.execute(new Runnable() {
             @Override
             public void run() {
+                Log.v(TAG, "setFocusRatio(" + ratio + ")");
+
                 if (mFocusRing.isPassiveFocusRunning() ||
                       mFocusRing.isActiveFocusRunning()) {
                     mFocusRing.setRadiusRatio(ratio);
index 5e9f5c4..d2f891b 100644 (file)
@@ -20,8 +20,6 @@ import android.annotation.TargetApi;
 import android.hardware.camera2.CameraCharacteristics;
 import android.os.Build.VERSION_CODES;
 
-import com.android.camera.debug.Log;
-import com.android.camera.debug.Log.Tag;
 import com.android.camera.ui.motion.LinearScale;
 
 /**
@@ -45,8 +43,15 @@ public class LensRangeCalculator {
      */
     public static LinearScale getDiopterToRatioCalculator(CameraCharacteristics characteristics) {
         // 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]
         Float nearest = characteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE);
         Float hyperfocal = characteristics.get(CameraCharacteristics.LENS_INFO_HYPERFOCAL_DISTANCE);
 
index 54c0178..5886f68 100644 (file)
@@ -54,9 +54,9 @@ public final class LinearScale {
      */
     public boolean isInDomain(float domainValue) {
         if (mDomainA > mDomainB) {
-            return domainValue >= mDomainA && domainValue <= mDomainB;
+            return domainValue <= mDomainA && domainValue >= mDomainB;
         }
-        return domainValue >= mDomainB && domainValue <= mDomainA;
+        return domainValue >= mDomainA && domainValue <= mDomainB;
     }
 
     /**
@@ -73,4 +73,13 @@ public final class LinearScale {
     public LinearScale inverse() {
         return new LinearScale(mRangeA, mRangeB, mDomainA, mDomainB);
     }
+
+    @Override
+    public String toString() {
+        return "LinearScale{" +
+              "mDomainA=" + mDomainA +
+              ", mDomainB=" + mDomainB +
+              ", mRangeA=" + mRangeA +
+              ", mRangeB=" + mRangeB + "}";
+    }
 }
\ No newline at end of file