From bb39c858c7457b128b12e004915ef7c6c6a1f63f Mon Sep 17 00:00:00 2001 From: Sheng-Hao Tsao Date: Thu, 10 Aug 2017 13:41:20 +0800 Subject: Fix a bug that SurfaceView loses transformation SurfaceView created for on-screen preview sometimes loses transformation information in the Camera2 API with HALv1 environment, and therefore produced wrongly transformed frames. It's because in RequestThreadManager.configureOutputs(), the transformation set by LegacyCameraDevice.setSurfaceOrientation() is cleared at mGLThreadManager.setConfigurationAndWait(). The bug is fixed by setting transformation information again after mGLThreadManager.setConfigurationAndWait(). BUG=63313861 TEST=Check on minnie with GCA and CameraIQTesting app. Preview always displays correct transformation in Camera2<=>HALv1 environment. Change-Id: Ic395047a120a21b3968dedb4314bdbe519c932e6 --- .../android/hardware/camera2/legacy/RequestThreadManager.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java index da62f5445daa..e8f34cc0b593 100644 --- a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java +++ b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java @@ -504,6 +504,15 @@ public class RequestThreadManager { previews.add(new Pair<>(p, previewSizeIter.next())); } mGLThreadManager.setConfigurationAndWait(previews, mCaptureCollector); + + for (Surface p : mPreviewOutputs) { + try { + LegacyCameraDevice.setSurfaceOrientation(p, facing, orientation); + } catch (LegacyExceptionUtils.BufferQueueAbandonedException e) { + Log.e(TAG, "Surface abandoned, skipping setSurfaceOrientation()", e); + } + } + mGLThreadManager.allowNewFrames(); mPreviewTexture = mGLThreadManager.getCurrentSurfaceTexture(); if (mPreviewTexture != null) { -- cgit v1.2.3-59-g8ed1b