diff --git a/AndroidCameraRecord.java b/AndroidCameraRecord.java index 17d9f8f9a..df6a395ea 100644 --- a/AndroidCameraRecord.java +++ b/AndroidCameraRecord.java @@ -46,6 +46,7 @@ public abstract class AndroidCameraRecord { private static AndroidCameraRecord instance; private static Handler handler; private static boolean previewStarted; + private static int orientationCode; public AndroidCameraRecord() { // TODO check if another instance is loaded and kill it. @@ -66,6 +67,7 @@ public abstract class AndroidCameraRecord { } } + /* * AndroidCameraRecord.setSurfaceView() should be called first, from the Activity code. * It will start automatically @@ -97,9 +99,14 @@ public abstract class AndroidCameraRecord { parameters.setPreviewSize(width, height); parameters.setPreviewFrameRate(fps); +// parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_EDOF); camera.setParameters(parameters); + camera.setDisplayOrientation(90 * orientationCode); +// parameters.setRotation() + + SurfaceHolder holder = surfaceView.getHolder(); try { camera.setPreviewDisplay(holder); @@ -165,7 +172,7 @@ public abstract class AndroidCameraRecord { AndroidCameraRecord.surfaceView = null; if (camera == null) { - Log.e("AndroidCameraRecord.surfaceDestroyed", "illegal state"); + Log.e("Linphone", "Video capture: illegal state: surface destroyed but camera is already null"); return; } camera.setPreviewCallback(null); // TODO check if used whatever the SDK version @@ -173,20 +180,23 @@ public abstract class AndroidCameraRecord { camera.release(); camera=null; previewStarted = false; - Log.w("Linphone", "The video capture Surface view has been destroyed"); + Log.w("Linphone", "Video capture Surface destroyed"); } public void surfaceCreated(SurfaceHolder holder) { AndroidCameraRecord.surfaceView = sv; + Log.w("Linphone", "Video capture surface created"); if (instance != null) { instance.startPreview(); } + + holder.isCreating(); } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { - // Do nothing + Log.w("Linphone", "Video capture surface changed"); } }); } @@ -223,7 +233,14 @@ public abstract class AndroidCameraRecord { protected void reallySetPreviewCallback(Camera camera, PreviewCallback cb) { camera.setPreviewCallback(cb); } + + public static void setOrientationCode(int orientation) { + AndroidCameraRecord.orientationCode = (4 + 1 - orientation) % 4; + } + protected int getOrientationCode() { + return orientationCode; + } } diff --git a/AndroidCameraRecordImpl.java b/AndroidCameraRecordImpl.java index 6186e458a..db4e128de 100644 --- a/AndroidCameraRecordImpl.java +++ b/AndroidCameraRecordImpl.java @@ -48,7 +48,7 @@ public class AndroidCameraRecordImpl extends AndroidCameraRecord implements Prev } - private native void putImage(long filterCtxPtr, byte[] buffer); + private native void putImage(long filterCtxPtr, byte[] buffer, int orientation); public void onPreviewFrame(byte[] data, Camera camera) { @@ -68,7 +68,7 @@ public class AndroidCameraRecordImpl extends AndroidCameraRecord implements Prev long curTime = System.currentTimeMillis(); if (lastFrameTime == 0) { lastFrameTime = curTime; - putImage(filterCtxPtr, data); + putImage(filterCtxPtr, data, getOrientationCode()); return; } @@ -81,7 +81,7 @@ public class AndroidCameraRecordImpl extends AndroidCameraRecord implements Prev timeElapsedBetweenFrames = currentTimeElapsed; // Log.d("onPreviewFrame: ", Integer.toString(data.length)); - putImage(filterCtxPtr, data); + putImage(filterCtxPtr, data, getOrientationCode()); } diff --git a/AndroidVideoWindowImpl.java b/AndroidVideoWindowImpl.java index efac2d826..ca9968e4c 100644 --- a/AndroidVideoWindowImpl.java +++ b/AndroidVideoWindowImpl.java @@ -34,9 +34,11 @@ public class AndroidVideoWindowImpl { mSurface=holder.getSurface(); } if (mListener!=null) mListener.onSurfaceReady(AndroidVideoWindowImpl.this); + Log.w("Linphone", "Video display surface changed"); } - public void surfaceCreated(SurfaceHolder holder) { + public void surfaceCreated(SurfaceHolder holder) { + Log.w("Linphone", "Video display surface created"); } public void surfaceDestroyed(SurfaceHolder holder) { @@ -46,6 +48,7 @@ public class AndroidVideoWindowImpl { } if (mListener!=null) mListener.onSurfaceDestroyed(AndroidVideoWindowImpl.this); + Log.w("Linphone", "Video display surface destroyed"); } }); }