From b233caa56d770ea242ae57f430eb3c8941f57f3a Mon Sep 17 00:00:00 2001 From: Emilian Peev Date: Thu, 23 Sep 2021 13:21:52 -0700 Subject: [PATCH] Camera: Switch the jpeg orientation when using the native encoder The native Jpeg encoder expects rotation in counter clockwise direction. However according to the Camera2 specification clients need to pass the Jpeg rotation in clockwise direction. Flip the client rotation value before passing to the Jpeg encoder. Bug: 200890552 Test: Manual using sample application, atest -c cts/tests/camera/src/android/hardware/camera2/cts/CameraExtensionSessionTest.java Change-Id: Ib70a8f5b5165d8319d89c2ed4b7509929c2faa71 --- .../hardware/camera2/impl/CameraExtensionJpegProcessor.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/java/android/hardware/camera2/impl/CameraExtensionJpegProcessor.java b/core/java/android/hardware/camera2/impl/CameraExtensionJpegProcessor.java index 3b1cb94a6619e..425f22c313066 100644 --- a/core/java/android/hardware/camera2/impl/CameraExtensionJpegProcessor.java +++ b/core/java/android/hardware/camera2/impl/CameraExtensionJpegProcessor.java @@ -58,7 +58,7 @@ public class CameraExtensionJpegProcessor implements ICaptureProcessorImpl { private static final class JpegParameters { public HashSet mTimeStamps = new HashSet<>(); - public int mRotation = JPEG_DEFAULT_ROTATION; // CCW multiple of 90 degrees + public int mRotation = JPEG_DEFAULT_ROTATION; // CW multiple of 90 degrees public int mQuality = JPEG_DEFAULT_QUALITY; // [0..100] } @@ -100,7 +100,8 @@ public class CameraExtensionJpegProcessor implements ICaptureProcessorImpl { Integer orientation = captureBundles.get(0).captureResult.get( CaptureResult.JPEG_ORIENTATION); if (orientation != null) { - ret.mRotation = orientation / 90; + // The jpeg encoder expects CCW rotation, convert from CW + ret.mRotation = (360 - (orientation % 360)) / 90; } else { Log.w(TAG, "No jpeg rotation set, using default: " + JPEG_DEFAULT_ROTATION); }