OSDN Git Service

portability layer doesn't work well with startPreviewWithCallback()
authorSpike Sprague <spikuru@google.com>
Fri, 19 Sep 2014 02:44:07 +0000 (19:44 -0700)
committerSpike Sprague <spikuru@google.com>
Fri, 19 Sep 2014 03:29:36 +0000 (20:29 -0700)
here's a dirty dirty workaround.

bug: 17576554
Change-Id: Ief40b65ce49712153f6ef604a3513348e493d4d9

src/com/android/camera/PhotoModule.java

index cbaa01b..ffa5601 100644 (file)
@@ -1992,18 +1992,27 @@ public class PhotoModule
             mCameraDevice.setPreviewTexture(mActivity.getCameraAppUI().getSurfaceTexture());
 
             Log.i(TAG, "startPreview");
-            mCameraDevice.startPreviewWithCallback(new Handler(Looper.getMainLooper()),
-                    new CameraAgent.CameraStartPreviewCallback() {
-                @Override
-                public void onPreviewStarted() {
-                    mFocusManager.onPreviewStarted();
-                    PhotoModule.this.onPreviewStarted();
-                    SessionStatsCollector.instance().previewActive(true);
-                    if (mSnapshotOnIdle) {
-                        mHandler.post(mDoSnapRunnable);
+            // If we're using API2 in portability layers, don't use startPreviewWithCallback()
+            // b/17576554
+            CameraAgent.CameraStartPreviewCallback startPreviewCallback =
+                new CameraAgent.CameraStartPreviewCallback() {
+                    @Override
+                    public void onPreviewStarted() {
+                        mFocusManager.onPreviewStarted();
+                        PhotoModule.this.onPreviewStarted();
+                        SessionStatsCollector.instance().previewActive(true);
+                        if (mSnapshotOnIdle) {
+                            mHandler.post(mDoSnapRunnable);
+                        }
                     }
-                }
-            });
+                };
+            if (GservicesHelper.useCamera2ApiThroughPortabilityLayer(mActivity)) {
+                mCameraDevice.startPreview();
+                startPreviewCallback.onPreviewStarted();
+            } else {
+                mCameraDevice.startPreviewWithCallback(new Handler(Looper.getMainLooper()),
+                        startPreviewCallback);
+            }
         } finally {
             mStartPreviewLock = false;
         }