Fix tuto3 picture taken crash on all devices
authorpoiuytrez <guillaumecharhon@gmail.com>
Wed, 1 May 2013 14:58:15 +0000 (16:58 +0200)
committerpoiuytrez <guillaumecharhon@gmail.com>
Wed, 1 May 2013 14:58:15 +0000 (16:58 +0200)
A modification of the JavaCameraView is needed to avoid a crash when the
app is exited. It is a good practice to remove the callback after the
stopPreview method.

modules/java/generator/src/java/android+JavaCameraView.java
samples/android/tutorial-3-cameracontrol/src/org/opencv/samples/tutorial3/Tutorial3View.java

index f07b7d2..dec6cac 100644 (file)
@@ -179,6 +179,8 @@ public class JavaCameraView extends CameraBridgeViewBase implements PreviewCallb
         synchronized (this) {
             if (mCamera != null) {
                 mCamera.stopPreview();
+                mCamera.setPreviewCallback(null);
+
                 mCamera.release();
             }
             mCamera = null;
index ef15cb5..38d613b 100644 (file)
@@ -57,8 +57,8 @@ public class Tutorial3View extends JavaCameraView implements PictureCallback {
     public void takePicture(final String fileName) {
         Log.i(TAG, "Taking picture");
         this.mPictureFileName = fileName;
-        // Call to garbage collector to avoid bug http://code.opencv.org/issues/2961 
-        System.gc();
+        // Clear up buffers to avoid bug http://code.opencv.org/issues/2961 
+        mCamera.setPreviewCallback(null);
 
         // PictureCallback is implemented by the current class
         mCamera.takePicture(null, null, this);
@@ -69,6 +69,7 @@ public class Tutorial3View extends JavaCameraView implements PictureCallback {
         Log.i(TAG, "Saving a bitmap to file");
         // The camera preview was automatically stopped. Start it again.
         mCamera.startPreview();
+        mCamera.setPreviewCallback(this);
 
         // Write the image in a file (in jpeg format)
         try {