From 8f406c57066cf0e8b002d5f46c5488030e0d0166 Mon Sep 17 00:00:00 2001 From: Guillaume Beraudo Date: Wed, 1 Dec 2010 11:39:19 +0100 Subject: [PATCH] Portrait mode. --- AndroidCameraRecord.java | 7 ++++++- AndroidCameraRecordImpl.java | 8 +++++--- AndroidCameraRecordManager.java | 13 ++++++++++--- LinphoneCallImpl.java | 5 +++++ 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/AndroidCameraRecord.java b/AndroidCameraRecord.java index c691a3176..9d8b2f144 100644 --- a/AndroidCameraRecord.java +++ b/AndroidCameraRecord.java @@ -77,7 +77,11 @@ public abstract class AndroidCameraRecord { } parameters.set("camera-id", params.cameraId); - parameters.setPreviewSize(params.width, params.height); + if (!params.videoDimensionsInverted) { + parameters.setPreviewSize(params.width, params.height); + } else { + parameters.setPreviewSize(params.height, params.width); + } parameters.setPreviewFrameRate(Math.round(params.fps)); if (parameters.getSupportedFocusModes().contains(Camera.Parameters.FOCUS_MODE_AUTO)) { Log.w(tag, "Auto Focus supported by camera device"); @@ -182,6 +186,7 @@ public abstract class AndroidCameraRecord { int cameraId; int rotation; public SurfaceView surfaceView; + boolean videoDimensionsInverted; public RecorderParams(long ptr) { filterDataNativePtr = ptr; diff --git a/AndroidCameraRecordImpl.java b/AndroidCameraRecordImpl.java index 0409d5cb4..2d3087854 100644 --- a/AndroidCameraRecordImpl.java +++ b/AndroidCameraRecordImpl.java @@ -35,17 +35,19 @@ public class AndroidCameraRecordImpl extends AndroidCameraRecord implements Prev private double timeElapsedBetweenFrames = 0; private long lastFrameTime = 0; private final double expectedTimeBetweenFrames; + private boolean videoDimensionsInverted; public AndroidCameraRecordImpl(RecorderParams parameters) { super(parameters); expectedTimeBetweenFrames = 1d / Math.round(parameters.fps); filterCtxPtr = parameters.filterDataNativePtr; + videoDimensionsInverted = parameters.videoDimensionsInverted; storePreviewCallBack(this); } - private native void putImage(long filterCtxPtr, byte[] buffer, int orientation); + private native void putImage(long filterCtxPtr, byte[] buffer, int orientation, boolean videoDimensionsInverted); public void onPreviewFrame(byte[] data, Camera camera) { @@ -69,7 +71,7 @@ public class AndroidCameraRecordImpl extends AndroidCameraRecord implements Prev long curTime = System.currentTimeMillis(); if (lastFrameTime == 0) { lastFrameTime = curTime; - putImage(filterCtxPtr, data, getOrientationCode()); + putImage(filterCtxPtr, data, getOrientationCode(), videoDimensionsInverted); return; } @@ -82,7 +84,7 @@ public class AndroidCameraRecordImpl extends AndroidCameraRecord implements Prev timeElapsedBetweenFrames = currentTimeElapsed; // Log.d("onPreviewFrame: ", Integer.toString(data.length)); - putImage(filterCtxPtr, data, getOrientationCode()); + putImage(filterCtxPtr, data, getOrientationCode(), videoDimensionsInverted); } diff --git a/AndroidCameraRecordManager.java b/AndroidCameraRecordManager.java index 159cc4c5a..02e7eb497 100644 --- a/AndroidCameraRecordManager.java +++ b/AndroidCameraRecordManager.java @@ -44,7 +44,7 @@ public class AndroidCameraRecordManager { public static final int CAMERA_ID_FIXME_USE_PREFERENCE = 0; private static final int version = Integer.parseInt(Build.VERSION.SDK); private static Map instances = new HashMap(); - + // singleton private AndroidCameraRecordManager(int cameraId) { @@ -83,16 +83,19 @@ public class AndroidCameraRecordManager { private List supportedVideoSizes; private int rotation; + private static final String tag = "Linphone"; public void setParametersFromFilter(long filterDataPtr, int height, int width, float fps) { + stopVideoRecording(); RecorderParams p = new RecorderParams(filterDataPtr); p.fps = fps; p.width = width; p.height = height; p.cameraId = cameraId; + p.videoDimensionsInverted = width < height; parameters = p; - } + } public final void setSurfaceView(final SurfaceView sv, final int rotation) { @@ -103,16 +106,20 @@ public class AndroidCameraRecordManager { holder.addCallback(new Callback() { public void surfaceDestroyed(SurfaceHolder holder) { surfaceView = null; + Log.d(tag , "Video capture surface destroyed"); stopVideoRecording(); } public void surfaceCreated(SurfaceHolder holder) { surfaceView = sv; + Log.d(tag , "Video capture surface created"); tryToStartVideoRecording(); } public void surfaceChanged(SurfaceHolder holder, int format, int width, - int height) {} + int height) { + Log.d(tag , "Video capture surface changed"); + } }); } diff --git a/LinphoneCallImpl.java b/LinphoneCallImpl.java index b6194c26f..a73492274 100644 --- a/LinphoneCallImpl.java +++ b/LinphoneCallImpl.java @@ -30,6 +30,7 @@ class LinphoneCallImpl implements LinphoneCall { native private long getRemoteAddress(long nativePtr); native private int getState(long nativePtr); private native long getCurrentParams(long nativePtr); + private native void enableCamera(long nativePtr, boolean enabled); protected LinphoneCallImpl(long aNativePtr) { nativePtr = aNativePtr; @@ -66,4 +67,8 @@ class LinphoneCallImpl implements LinphoneCall { public LinphoneCallParams getCurrentParamsReadWrite() { return getCurrentParamsReadOnly().copy(); } + + public void enableCamera(boolean enabled) { + enableCamera(nativePtr, enabled); + } }