summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Sheng-Hao Tsao <shenghao@google.com> 2017-08-10 13:41:20 +0800
committer Eino-Ville Talvala <etalvala@google.com> 2017-08-11 16:54:20 +0000
commitbb39c858c7457b128b12e004915ef7c6c6a1f63f (patch)
tree5f5a5cd326ff3b65f7e8c252f37a41eb0126dc72
parentf56c63b23fa1fddd11f6bd3defb559fa172ee9ca (diff)
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
-rw-r--r--core/java/android/hardware/camera2/legacy/RequestThreadManager.java9
1 files changed, 9 insertions, 0 deletions
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) {