prevent recorder creating while the surface isnt available

This commit is contained in:
tibbi 2016-06-16 16:41:28 +02:00
parent ecb2dca285
commit 5c80e98888

View File

@ -42,6 +42,7 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O
private static MediaRecorder recorder; private static MediaRecorder recorder;
private static boolean isRecording; private static boolean isRecording;
private static boolean isVideoMode; private static boolean isVideoMode;
private static boolean isSurfaceCreated;
private static String curVideoPath; private static String curVideoPath;
private static int lastClickX; private static int lastClickX;
private static int lastClickY; private static int lastClickY;
@ -64,6 +65,8 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O
surfaceView.setOnClickListener(this); surfaceView.setOnClickListener(this);
surfaceView.setOnLongClickListener(this); surfaceView.setOnLongClickListener(this);
isFlashEnabled = false; isFlashEnabled = false;
isVideoMode = false;
isSurfaceCreated = false;
} }
public void setCamera(int cameraId) { public void setCamera(int cameraId) {
@ -110,8 +113,9 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O
callback.setFlashAvailable(Utils.hasFlash(camera)); callback.setFlashAvailable(Utils.hasFlash(camera));
} }
if (isVideoMode) if (isVideoMode) {
initRecorder(); initRecorder();
}
} }
private static int getPreviewRotation(int cameraId) { private static int getPreviewRotation(int cameraId) {
@ -297,6 +301,7 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O
@Override @Override
public void surfaceCreated(SurfaceHolder holder) { public void surfaceCreated(SurfaceHolder holder) {
isSurfaceCreated = true;
try { try {
if (camera != null) { if (camera != null) {
camera.setPreviewDisplay(surfaceHolder); camera.setPreviewDisplay(surfaceHolder);
@ -308,6 +313,7 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O
@Override @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
isSurfaceCreated = true;
setupPreview(); setupPreview();
if (isVideoMode) { if (isVideoMode) {
@ -329,6 +335,7 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O
@Override @Override
public void surfaceDestroyed(SurfaceHolder holder) { public void surfaceDestroyed(SurfaceHolder holder) {
isSurfaceCreated = false;
if (camera != null) { if (camera != null) {
camera.stopPreview(); camera.stopPreview();
} }
@ -426,7 +433,7 @@ public class Preview extends ViewGroup implements SurfaceHolder.Callback, View.O
// VIDEO RECORDING // VIDEO RECORDING
public void initRecorder() { public void initRecorder() {
if (camera == null || recorder != null) if (camera == null || recorder != null || !isSurfaceCreated)
return; return;
final Camera.Size preferred = parameters.getPreferredPreviewSizeForVideo(); final Camera.Size preferred = parameters.getPreferredPreviewSizeForVideo();