diff options
author | andralex8 <andralex8@gmail.com> | 2017-05-28 16:56:39 +0200 |
---|---|---|
committer | Arne Coucheron <arco68@gmail.com> | 2017-06-12 19:43:05 +0000 |
commit | d7247ff7c682a46b23bf56a4d8ed4d55a9523f00 (patch) | |
tree | 3fd2f94bb134bc2000acc28cdcb16b23cf0c9548 | |
parent | 78666b57a88587e09178368b82140dc85424745d (diff) | |
download | android_packages_apps_Snap-d7247ff7c682a46b23bf56a4d8ed4d55a9523f00.tar.gz android_packages_apps_Snap-d7247ff7c682a46b23bf56a4d8ed4d55a9523f00.tar.bz2 android_packages_apps_Snap-d7247ff7c682a46b23bf56a4d8ed4d55a9523f00.zip |
Add orientation correction for landscape devices
Snap does not correctly handle devices with a landscape screen as rotation
is 0 when device is in landscape while Snap assume that 0 is portrait.
This lead to a rotated gui and a deformed preview.
This commit:
- Solve the gui rotation for Photo, Video and Panorama modules
- Solve the deformed preview for Photo and Video (Panorama preview was ok with gui fix)
- Solve the PhotoMenu rotation (all devices, it was also broken on portrait devices)
Change-Id: Ic0b95904da6e13946c7e46e2e571b26da498db02
-rw-r--r-- | src/com/android/camera/PhotoModule.java | 5 | ||||
-rw-r--r-- | src/com/android/camera/PhotoUI.java | 4 | ||||
-rw-r--r-- | src/com/android/camera/VideoModule.java | 10 | ||||
-rw-r--r-- | src/com/android/camera/VideoUI.java | 3 | ||||
-rw-r--r-- | src/com/android/camera/WideAnglePanoramaModule.java | 7 |
5 files changed, 23 insertions, 6 deletions
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java index c9fe96006..2a902e22e 100644 --- a/src/com/android/camera/PhotoModule.java +++ b/src/com/android/camera/PhotoModule.java @@ -289,6 +289,7 @@ public class PhotoModule extends BaseModule<PhotoUI> implements private boolean mMirror; private boolean mFirstTimeInitialized; private boolean mIsImageCaptureIntent; + private int mOrientationOffset; private int mCameraState = INIT; private boolean mSnapshotOnIdle = false; @@ -556,6 +557,7 @@ public class PhotoModule extends BaseModule<PhotoUI> implements public void init(CameraActivity activity, View parent) { mActivity = activity; mRootView = parent; + mOrientationOffset = CameraUtil.isDefaultToPortrait(mActivity) ? 0 : 90; mPreferences = ComboPreferences.get(mActivity); if (mPreferences == null) { mPreferences = new ComboPreferences(mActivity); @@ -1704,7 +1706,7 @@ public class PhotoModule extends BaseModule<PhotoUI> implements } // Set rotation and gps data. - int orientation = mOrientation; + int orientation = (mOrientation + mOrientationOffset) % 360; mJpegRotation = CameraUtil.getJpegRotation(mCameraId, orientation); String pictureFormat = mParameters.get(KEY_PICTURE_FORMAT); Location loc = getLocationAccordPictureFormat(pictureFormat); @@ -2181,6 +2183,7 @@ public class PhotoModule extends BaseModule<PhotoUI> implements // the camera then point the camera to floor or sky, we still have // the correct orientation. if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) return; + orientation = (orientation - mOrientationOffset + 360) % 360; int oldOrientation = mOrientation; mOrientation = CameraUtil.roundOrientation(orientation, mOrientation); if (oldOrientation != mOrientation) { diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java index a6d806f8f..0012dd42f 100644 --- a/src/com/android/camera/PhotoUI.java +++ b/src/com/android/camera/PhotoUI.java @@ -303,6 +303,9 @@ public class PhotoUI extends BaseUI implements PieListener, FrameLayout.LayoutParams lp; float scaledTextureWidth, scaledTextureHeight; int rotation = CameraUtil.getDisplayRotation(mActivity); + if(!CameraUtil.isDefaultToPortrait(mActivity)) { + rotation = (rotation - 90) % 360; + } mScreenRatio = CameraUtil.determineRatio(ratio); if (mScreenRatio == CameraUtil.RATIO_16_9 && CameraUtil.determinCloseRatio(ratio) == CameraUtil.RATIO_4_3) { @@ -1189,6 +1192,7 @@ public class PhotoUI extends BaseUI implements PieListener, RotateImageView v = (RotateImageView) mReviewImage; v.setOrientation(orientation, animation); } + mOrientation = orientation; } public void tryToCloseSubList() { diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java index dd9c9bbc5..e4f5bc225 100644 --- a/src/com/android/camera/VideoModule.java +++ b/src/com/android/camera/VideoModule.java @@ -194,6 +194,7 @@ public class VideoModule extends BaseModule<VideoUI> implements // true. private int mDisplayRotation; private int mCameraDisplayOrientation; + private int mOrientationOffset; private int mDesiredPreviewWidth; private int mDesiredPreviewHeight; @@ -543,6 +544,7 @@ public class VideoModule extends BaseModule<VideoUI> implements @Override public void init(CameraActivity activity, View root) { mActivity = activity; + mOrientationOffset = CameraUtil.isDefaultToPortrait(mActivity) ? 0 : 90; mPreferences = ComboPreferences.get(mActivity); if (mPreferences == null) { @@ -690,7 +692,8 @@ public class VideoModule extends BaseModule<VideoUI> implements } // Set rotation and gps data. - int rotation = CameraUtil.getJpegRotation(mCameraId, mOrientation); + int orientation = (mOrientation + mOrientationOffset) % 360; + int rotation = CameraUtil.getJpegRotation(mCameraId, orientation); mParameters.setRotation(rotation); Location loc = mLocationManager.getCurrentLocation(); CameraUtil.setGpsParameters(mParameters, loc); @@ -766,6 +769,7 @@ public class VideoModule extends BaseModule<VideoUI> implements // the camera then point the camera to floor or sky, we still have // the correct orientation. if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) return; + orientation = (orientation - mOrientationOffset + 360) % 360; int newOrientation = CameraUtil.roundOrientation(orientation, mOrientation); if (mOrientation != newOrientation) { @@ -1870,9 +1874,9 @@ public class VideoModule extends BaseModule<VideoUI> implements if (mOrientation != OrientationEventListener.ORIENTATION_UNKNOWN) { CameraInfo info = CameraHolder.instance().getCameraInfo()[mCameraId]; if (info.facing == CameraInfo.CAMERA_FACING_FRONT) { - rotation = (info.orientation - mOrientation + 360) % 360; + rotation = (info.orientation - mOrientation - mOrientationOffset + 360) % 360; } else { // back-facing camera - rotation = (info.orientation + mOrientation) % 360; + rotation = (info.orientation + mOrientation + mOrientationOffset) % 360; } } mMediaRecorder.setOrientationHint(rotation); diff --git a/src/com/android/camera/VideoUI.java b/src/com/android/camera/VideoUI.java index 0b5197063..fcb1c83d8 100644 --- a/src/com/android/camera/VideoUI.java +++ b/src/com/android/camera/VideoUI.java @@ -334,6 +334,9 @@ public class VideoUI extends BaseUI implements PieRenderer.PieListener, float scaledTextureWidth = 0.0f, scaledTextureHeight = 0.0f; int rotation = CameraUtil.getDisplayRotation(mActivity); + if(!CameraUtil.isDefaultToPortrait(mActivity)) { + rotation = (rotation - 90) % 360; + } mScreenRatio = CameraUtil.determineRatio(ratio); if (mScreenRatio == CameraUtil.RATIO_16_9 && CameraUtil.determinCloseRatio(ratio) == CameraUtil.RATIO_4_3) { diff --git a/src/com/android/camera/WideAnglePanoramaModule.java b/src/com/android/camera/WideAnglePanoramaModule.java index ec61da4bb..3ca9c2fd3 100644 --- a/src/com/android/camera/WideAnglePanoramaModule.java +++ b/src/com/android/camera/WideAnglePanoramaModule.java @@ -129,6 +129,7 @@ public class WideAnglePanoramaModule extends BaseModule<WideAnglePanoramaUI> imp // respectively. private int mDeviceOrientation; private int mDeviceOrientationAtCapture; + private int mOrientationOffset; private int mCameraOrientation; private int mOrientationCompensation; private boolean mOrientationLocked; @@ -193,6 +194,7 @@ public class WideAnglePanoramaModule extends BaseModule<WideAnglePanoramaUI> imp // the camera then point the camera to floor or sky, we still have // the correct orientation. if (orientation == ORIENTATION_UNKNOWN) return; + orientation = (orientation - mOrientationOffset + 360) % 360; int oldOrientation = mDeviceOrientation; mDeviceOrientation = CameraUtil.roundOrientation(orientation, mDeviceOrientation); // When the screen is unlocked, display rotation may change. Always @@ -226,6 +228,7 @@ public class WideAnglePanoramaModule extends BaseModule<WideAnglePanoramaUI> imp public void init(CameraActivity activity, View parent) { mActivity = activity; mRootView = parent; + mOrientationOffset = CameraUtil.isDefaultToPortrait(mActivity) ? 0 : 90; mOrientationManager = new OrientationManager(activity); mCaptureState = CAPTURE_STATE_VIEWFINDER; @@ -750,9 +753,9 @@ public class WideAnglePanoramaModule extends BaseModule<WideAnglePanoramaUI> imp if (mUsingFrontCamera) { // mCameraOrientation is negative with respect to the front facing camera. // See document of android.hardware.Camera.Parameters.setRotation. - orientation = (mDeviceOrientationAtCapture - mCameraOrientation - 360) % 360; + orientation = (mDeviceOrientationAtCapture - mCameraOrientation - mOrientationOffset + 360) % 360; } else { - orientation = (mDeviceOrientationAtCapture + mCameraOrientation) % 360; + orientation = (mDeviceOrientationAtCapture + mCameraOrientation + mOrientationOffset) % 360; } return orientation; } |