Added Orientation change support and video capture preview

This commit is contained in:
Guillaume Beraudo 2010-11-22 11:23:43 +01:00
parent 7d71181e17
commit 2300dfa730
3 changed files with 27 additions and 7 deletions

View file

@ -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;
}
}

View file

@ -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());
}

View file

@ -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");
}
});
}