diff --git a/AndroidCameraRecord.java b/AndroidCameraRecord.java index c16ef065d..138912f57 100644 --- a/AndroidCameraRecord.java +++ b/AndroidCameraRecord.java @@ -18,10 +18,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.linphone.core; +import java.util.ArrayList; +import java.util.List; + import android.hardware.Camera; import android.hardware.Camera.ErrorCallback; import android.hardware.Camera.Parameters; import android.hardware.Camera.PreviewCallback; +import android.hardware.Camera.Size; import android.os.Build; import android.util.Log; import android.view.SurfaceHolder; @@ -44,8 +48,9 @@ public abstract class AndroidCameraRecord { private static boolean previewStarted; private static boolean parametersSet; protected static int orientationCode; - private static boolean mute; + private static boolean muted; private static final String tag="Linphone"; + private static List supportedVideoSizes; public AndroidCameraRecord() { // TODO check if another instance is loaded and kill it. @@ -66,7 +71,7 @@ public abstract class AndroidCameraRecord { * It will start automatically */ private void startPreview() { - if (mute) { + if (muted) { Log.d(tag, "Not starting preview as camera has been muted"); return; } @@ -100,6 +105,9 @@ public abstract class AndroidCameraRecord { Camera.Parameters parameters=camera.getParameters(); + if (supportedVideoSizes == null) { + supportedVideoSizes = camera.getParameters().getSupportedPreviewSizes(); + } parameters.setPreviewSize(width, height); parameters.setPreviewFrameRate(fps); @@ -174,6 +182,13 @@ public abstract class AndroidCameraRecord { } + private static void stopPreview() { + camera.setPreviewCallback(null); // TODO check if used whatever the SDK version + camera.stopPreview(); + camera.release(); + camera=null; + previewStarted = false; + } public static final void setSurfaceView(final SurfaceView sv) { SurfaceHolder holder = sv.getHolder(); @@ -187,11 +202,7 @@ public abstract class AndroidCameraRecord { Log.e(tag, "Video capture: illegal state: surface destroyed but camera is already null"); return; } - camera.setPreviewCallback(null); // TODO check if used whatever the SDK version - camera.stopPreview(); - camera.release(); - camera=null; - previewStarted = false; + stopPreview(); Log.w(tag, "Video capture Surface destroyed"); } @@ -235,19 +246,45 @@ public abstract class AndroidCameraRecord { } public static void setMuteCamera(boolean m) { - if (m == mute) return; + if (m == muted) return; - mute = m; - if (mute && previewStarted) { - camera.stopPreview(); + muted = m; + if (muted && previewStarted) { + stopPreview(); return; } - if (!mute) { + if (!muted) { instance.startPreview(); } } + + public static void toggleMute() { + setMuteCamera(!muted); + } + + public static List supportedVideoSizes() { + if (supportedVideoSizes != null) { + return new ArrayList(supportedVideoSizes); + } + + if (camera == null) { + camera = Camera.open(); + supportedVideoSizes = camera.getParameters().getSupportedPreviewSizes(); + camera.release(); + return supportedVideoSizes; + } + + throw new RuntimeException("Should not be there"); + } + + public static boolean getCameraMuted() { + return muted; + } + + public static void invalidateParameters() { + parametersSet = false; + stopPreview(); + } } - - diff --git a/LinphoneCallImpl.java b/LinphoneCallImpl.java index 4c9a770c9..b6194c26f 100644 --- a/LinphoneCallImpl.java +++ b/LinphoneCallImpl.java @@ -66,6 +66,4 @@ class LinphoneCallImpl implements LinphoneCall { public LinphoneCallParams getCurrentParamsReadWrite() { return getCurrentParamsReadOnly().copy(); } - - } diff --git a/LinphoneCallParamsImpl.java b/LinphoneCallParamsImpl.java index add724f21..1242ee996 100644 --- a/LinphoneCallParamsImpl.java +++ b/LinphoneCallParamsImpl.java @@ -34,7 +34,7 @@ public class LinphoneCallParamsImpl implements LinphoneCallParams { return getVideoEnabled(nativePtr); } - public void setVideoEnalbled(boolean b) { + public void setVideoEnabled(boolean b) { enableVideo(nativePtr, b); } diff --git a/LinphoneCoreImpl.java b/LinphoneCoreImpl.java index 91913e322..532a7ae2c 100644 --- a/LinphoneCoreImpl.java +++ b/LinphoneCoreImpl.java @@ -81,7 +81,10 @@ class LinphoneCoreImpl implements LinphoneCore { private native String getStunServer(long nativePtr); private native long createDefaultCallParams(long nativePtr); private native int updateCall(long ptrLc, long ptrCall, long ptrParams); - + private native void setUploadBandwidth(long nativePtr, int bw); + private native void setDownloadBandwidth(long nativePtr, int bw); + private native void setPreferredVideoSize(long nativePtr, int width, int heigth); + private native int[] getPreferredVideoSize(long nativePtr); private static String TAG = "LinphoneCore"; @@ -379,4 +382,27 @@ class LinphoneCoreImpl implements LinphoneCore { return updateCall(nativePtr, ptrCall, ptrParams); } + + + public void setUploadBandwidth(int bw) { + setUploadBandwidth(nativePtr, bw); + } + + public void setDownloadBandwidth(int bw) { + setDownloadBandwidth(nativePtr, bw); + } + + public void setPreferredVideoSize(VideoSize vSize) { + setPreferredVideoSize(nativePtr, vSize.getWidth(), vSize.getHeight()); + } + + public VideoSize getPreferredVideoSize() { + int[] nativeSize = getPreferredVideoSize(nativePtr); + + VideoSize vSize = new VideoSize(); + vSize.setWidth(nativeSize[0]); + vSize.setHeight(nativeSize[1]); + + return vSize; + } }