OSDN Git Service

Enable progress reporting for modules like HDR+.
authorSascha Haeberling <haeberling@google.com>
Wed, 20 Aug 2014 23:14:29 +0000 (16:14 -0700)
committerSascha Haeberling <haeberling@google.com>
Wed, 20 Aug 2014 23:26:14 +0000 (16:26 -0700)
  Bug: 16945820

Change-Id: If6aba8ff5d2b973f4ea8112110695a84f897d881

src/com/android/camera/CaptureModule.java
src/com/android/camera/one/OneCamera.java
src/com/android/camera/one/OneCameraManager.java
src/com/android/camera/one/v2/OneCameraManagerImpl.java
src/com/android/camera/ui/ProgressRenderer.java
src_pd/com/android/camera/one/v2/OneCameraCreator.java

index 71f2cd1..e0d8c43 100644 (file)
@@ -64,7 +64,6 @@ import com.android.camera.ui.PreviewStatusListener;
 import com.android.camera.ui.TouchCoordinate;
 import com.android.camera.util.CameraUtil;
 import com.android.camera.util.Size;
-import com.android.camera.util.SystemProperties;
 import com.android.camera.util.UsageStatistics;
 import com.android.camera2.R;
 import com.android.ex.camera2.portability.CameraAgent.CameraProxy;
@@ -745,8 +744,8 @@ public class CaptureModule extends CameraModule
     }
 
     @Override
-    public void onTakePictureProgress(int progressPercent) {
-        // TODO once we have HDR+ hooked up.
+    public void onTakePictureProgress(float progress) {
+        mUI.setPictureTakingProgress((int)(progress * 100));
     }
 
     @Override
index 809f5c4..f06be7e 100644 (file)
@@ -157,13 +157,14 @@ public interface OneCamera {
         public void onPictureTakenFailed();
 
         /**
-         * Called if the capture session requires processing to update the the
-         * implementer about the current progress.
+         * Called when capture session is reporting a processing update. This
+         * should only be called by capture sessions that require the user to
+         * hold still for a while.
          *
-         * @param progressPercent a value from 0-100, indicating the current
-         *            processing progress.
+         * @param progress a value from 0...1, indicating the current processing
+         *            progress.
          */
-        public void onTakePictureProgress(int progressPercent);
+        public void onTakePictureProgress(float progress);
     }
 
     /**
@@ -348,7 +349,8 @@ public interface OneCamera {
     /**
      * This function sets the current zoom ratio value.
      * <p>
-     * The zoom range must be [1.0, maxZoom]. The maxZoom can be queried by {@link #getMaxZoom}.
+     * The zoom range must be [1.0, maxZoom]. The maxZoom can be queried by
+     * {@link #getMaxZoom}.
      *
      * @param zoom Zoom ratio value passed to scaler.
      */
index a61b706..ec2a5be 100644 (file)
@@ -20,6 +20,8 @@ import android.content.Context;
 import android.hardware.camera2.CameraAccessException;
 import android.hardware.camera2.CameraCharacteristics;
 import android.hardware.camera2.CameraManager;
+import android.util.DisplayMetrics;
+import android.view.WindowManager;
 
 import com.android.camera.CameraActivity;
 import com.android.camera.debug.Log;
@@ -77,12 +79,14 @@ public abstract class OneCameraManager {
      * or otherwise uses the portability API.
      */
     private static OneCameraManager create(CameraActivity activity) {
+        DisplayMetrics displayMetrics = getDisplayMetrics(activity);
         CameraManager cameraManager = (CameraManager) activity
                 .getSystemService(Context.CAMERA_SERVICE);
         int maxMemoryMB = activity.getServices().getMemoryManager()
                 .getMaxAllowedNativeMemoryAllocation();
         if (cameraManager != null && isCamera2FullySupported(cameraManager)) {
-            return new com.android.camera.one.v2.OneCameraManagerImpl(cameraManager, maxMemoryMB);
+            return new com.android.camera.one.v2.OneCameraManagerImpl(cameraManager, maxMemoryMB,
+                    displayMetrics);
         } else {
             return new com.android.camera.one.v1.OneCameraManagerImpl();
         }
@@ -108,4 +112,15 @@ public abstract class OneCameraManager {
             return false;
         }
     }
+
+    private static DisplayMetrics getDisplayMetrics(Context context) {
+        DisplayMetrics displayMetrics = new DisplayMetrics();
+        WindowManager wm = (WindowManager)
+                context.getSystemService(Context.WINDOW_SERVICE);
+        if (wm != null) {
+            displayMetrics = new DisplayMetrics();
+            wm.getDefaultDisplay().getMetrics(displayMetrics);
+        }
+        return displayMetrics;
+    }
 }
index d2a6fee..32e2d6b 100644 (file)
@@ -20,6 +20,7 @@ import android.hardware.camera2.CameraAccessException;
 import android.hardware.camera2.CameraCharacteristics;
 import android.hardware.camera2.CameraDevice;
 import android.hardware.camera2.CameraManager;
+import android.util.DisplayMetrics;
 
 import com.android.camera.debug.Log;
 import com.android.camera.debug.Log.Tag;
@@ -36,6 +37,7 @@ public class OneCameraManagerImpl extends OneCameraManager {
     private static final Tag TAG = new Tag("OneCameraMgrImpl2");
     private final CameraManager mCameraManager;
     private final int mMaxMemoryMB;
+    private final DisplayMetrics mDisplayMetrics;
 
     /**
      * Instantiates a new {@link OneCameraManager} for Camera2 API.
@@ -44,9 +46,11 @@ public class OneCameraManagerImpl extends OneCameraManager {
      * @param maxMemoryMB maximum amount of memory opened cameras should consume
      *            during capture and processing, in megabytes.
      */
-    public OneCameraManagerImpl(CameraManager cameraManager, int maxMemoryMB) {
+    public OneCameraManagerImpl(CameraManager cameraManager, int maxMemoryMB,
+            DisplayMetrics displayMetrics) {
         mCameraManager = cameraManager;
         mMaxMemoryMB = maxMemoryMB;
+        mDisplayMetrics = displayMetrics;
     }
 
     @Override
@@ -73,7 +77,7 @@ public class OneCameraManagerImpl extends OneCameraManager {
                                 .getCameraCharacteristics(device.getId());
                         // TODO: Set boolean based on whether HDR+ is enabled.
                         OneCamera oneCamera = OneCameraCreator.create(true, device,
-                                characteristics, pictureSize, mMaxMemoryMB);
+                                characteristics, pictureSize, mMaxMemoryMB, mDisplayMetrics);
                         openCallback.onCameraOpened(oneCamera);
                     } catch (CameraAccessException e) {
                         Log.d(TAG, "Could not get camera characteristics");
index f89eb6d..f2e6c6e 100644 (file)
@@ -19,7 +19,6 @@ package com.android.camera.ui;
 import android.content.Context;
 import android.graphics.Canvas;
 import android.graphics.Color;
-import android.graphics.PorterDuff.Mode;
 import android.graphics.Paint;
 import android.graphics.RectF;
 import android.view.View;
@@ -30,7 +29,6 @@ import com.android.camera2.R;
  * Renders a circular progress bar on the screen.
  */
 public class ProgressRenderer {
-
     private final int mProgressRadius;
     private final Paint mProgressBasePaint;
     private final Paint mProgressPaint;
@@ -38,7 +36,13 @@ public class ProgressRenderer {
     private RectF mArcBounds = new RectF(0, 0, 1, 1);
     private int mProgressAngleDegrees = 270;
     private boolean mVisible = false;
-    private View mParentView;
+    private final View mParentView;
+    private final Runnable mInvalidateParentViewRunnable = new Runnable() {
+        @Override
+        public void run() {
+            mParentView.invalidate();
+        }
+    };
 
     /**
      * After we reach 100%, keep on painting the progress for another x milliseconds
@@ -58,6 +62,8 @@ public class ProgressRenderer {
     /**
      * Shows a progress indicator. If the progress is '100', the progress
      * indicator will be hidden.
+     * <p>
+     * Can be called from any thread.
      *
      * @param percent the progress in percent (0-100).
      */
@@ -70,7 +76,7 @@ public class ProgressRenderer {
         if (percent < 100) {
             mVisible = true;
         }
-        mParentView.invalidate();
+        mParentView.post(mInvalidateParentViewRunnable);
     }
 
     /**
index 39f14ab..bec66d8 100644 (file)
@@ -18,13 +18,15 @@ package com.android.camera.one.v2;
 
 import android.hardware.camera2.CameraCharacteristics;
 import android.hardware.camera2.CameraDevice;
+import android.util.DisplayMetrics;
 
 import com.android.camera.one.OneCamera;
 import com.android.camera.util.Size;
 
 public class OneCameraCreator {
     public static OneCamera create(boolean enableHdrPlus, CameraDevice device,
-            CameraCharacteristics characteristics, Size pictureSize, int maxMemoryMB) {
+            CameraCharacteristics characteristics, Size pictureSize, int maxMemoryMB,
+            DisplayMetrics displayMetrics) {
         return new OneCameraImpl(device, characteristics, pictureSize);
     }
 }