From 19c2a11e657a8c502aa4cbb260014d06c81f952b Mon Sep 17 00:00:00 2001 From: Guillaume Beraudo Date: Tue, 14 Dec 2010 12:58:28 +0100 Subject: [PATCH] Landscape preview in landscape orientation on sdk>=8 --- src/org/linphone/VideoCallActivity.java | 15 +++++++++++---- src/org/linphone/core/AndroidCameraRecord.java | 3 ++- ...Impl.java => AndroidCameraRecordAPI8Impl.java} | 10 ++++++---- .../linphone/core/AndroidCameraRecordManager.java | 2 +- submodules/linphone | 2 +- 5 files changed, 21 insertions(+), 11 deletions(-) rename src/org/linphone/core/{AndroidCameraRecordBufferedImpl.java => AndroidCameraRecordAPI8Impl.java} (86%) diff --git a/src/org/linphone/VideoCallActivity.java b/src/org/linphone/VideoCallActivity.java index aaa065691..27e489175 100644 --- a/src/org/linphone/VideoCallActivity.java +++ b/src/org/linphone/VideoCallActivity.java @@ -47,6 +47,7 @@ public class VideoCallActivity extends Activity { private WakeLock mWakeLock; private static final int capturePreviewLargestDimension = 150; // private static final float similarRatio = 0.1f; + private static final int version = Integer.parseInt(Build.VERSION.SDK); public void onCreate(Bundle savedInstanceState) { launched = true; @@ -70,7 +71,7 @@ public class VideoCallActivity extends Activity { mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE,"Linphone"); mWakeLock.acquire(); - if (Integer.parseInt(Build.VERSION.SDK) < 8) { + if (version < 8) { // Force to display in portrait orientation for old devices // as they do not support surfaceView rotation setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); @@ -78,7 +79,7 @@ public class VideoCallActivity extends Activity { // Handle the fact that the preferred size may have a ratio /an orientation different from the one // in the videocall.xml as the front camera on Samsung captures in landscape. - updateSvLayoutParamsFromVideoSize(mVideoCaptureView, lc.getPreferredVideoSize()); + resizeCapturePreviewForOldPhones(mVideoCaptureView, lc.getPreferredVideoSize()); } @@ -118,7 +119,13 @@ public class VideoCallActivity extends Activity { } } - private void updateSvLayoutParamsFromVideoSize(SurfaceView sv, VideoSize vs) { + /** + * @param sv capture surface view to resize the layout + * @param vs video size from which to calculate the dimensions + */ + private void resizeCapturePreviewForOldPhones(SurfaceView sv, VideoSize vs) { + if (version >= 8) return; + LayoutParams lp = sv.getLayoutParams(); float newRatio = ratioWidthHeight(vs); @@ -151,7 +158,7 @@ public class VideoCallActivity extends Activity { // Resize preview frame VideoSize newVideoSize = LinphoneService.getLc().getPreferredVideoSize(); - updateSvLayoutParamsFromVideoSize(mVideoCaptureView, newVideoSize); + resizeCapturePreviewForOldPhones(mVideoCaptureView, newVideoSize); break; case R.id.videocall_menu_terminate_call: LinphoneCore lc = LinphoneService.getLc(); diff --git a/src/org/linphone/core/AndroidCameraRecord.java b/src/org/linphone/core/AndroidCameraRecord.java index 84ad452ef..1696efbc7 100644 --- a/src/org/linphone/core/AndroidCameraRecord.java +++ b/src/org/linphone/core/AndroidCameraRecord.java @@ -167,7 +167,8 @@ public abstract class AndroidCameraRecord { public void setDisplayOrientation(int rotation) { displayOrientation = rotation; } - + protected int getDisplayOrientation() {return displayOrientation;} + protected int rotateCapturedFrame() { if (params.videoDimensionsInverted) { return 1; // always rotate 90° diff --git a/src/org/linphone/core/AndroidCameraRecordBufferedImpl.java b/src/org/linphone/core/AndroidCameraRecordAPI8Impl.java similarity index 86% rename from src/org/linphone/core/AndroidCameraRecordBufferedImpl.java rename to src/org/linphone/core/AndroidCameraRecordAPI8Impl.java index ad54341c3..9655428db 100644 --- a/src/org/linphone/core/AndroidCameraRecordBufferedImpl.java +++ b/src/org/linphone/core/AndroidCameraRecordAPI8Impl.java @@ -30,10 +30,10 @@ import android.util.Log; * @author Guillaume Beraudo * */ -public class AndroidCameraRecordBufferedImpl extends AndroidCameraRecordImplAPI5 { +public class AndroidCameraRecordAPI8Impl extends AndroidCameraRecordImplAPI5 { - public AndroidCameraRecordBufferedImpl(RecorderParams parameters) { + public AndroidCameraRecordAPI8Impl(RecorderParams parameters) { super(parameters); } @@ -66,8 +66,10 @@ public class AndroidCameraRecordBufferedImpl extends AndroidCameraRecordImplAPI5 protected void onSettingCameraParameters(Parameters parameters) { super.onSettingCameraParameters(parameters); // Only on v8 hardware - camera.setDisplayOrientation(90 * rotateCapturedFrame()); + camera.setDisplayOrientation(90 * getPreviewCaptureRotation()); } - + private int getPreviewCaptureRotation() { + return (4 + 1 - displayOrientation) % 4; + } } diff --git a/src/org/linphone/core/AndroidCameraRecordManager.java b/src/org/linphone/core/AndroidCameraRecordManager.java index 023dcffa4..42a57806d 100644 --- a/src/org/linphone/core/AndroidCameraRecordManager.java +++ b/src/org/linphone/core/AndroidCameraRecordManager.java @@ -155,7 +155,7 @@ public class AndroidCameraRecordManager { parameters.rotation = rotation; parameters.surfaceView = surfaceView; if (version >= 8) { - recorder = new AndroidCameraRecordBufferedImpl(parameters); + recorder = new AndroidCameraRecordAPI8Impl(parameters); } else if (version >= 5) { recorder = new AndroidCameraRecordImplAPI5(parameters); } else { diff --git a/submodules/linphone b/submodules/linphone index de0d399e9..1534f84c6 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit de0d399e989d02f42bf70a5ebf7ab19f1762e902 +Subproject commit 1534f84c60132dcf5c7126417afc0388c15aba2c