From 016011fdf8d920545c7e2e24ec8930c6abd37787 Mon Sep 17 00:00:00 2001
From: Andrey Pavlenko <andrey.pavlenko@itseez.com>
Date: Thu, 27 Aug 2015 13:23:39 +0300
Subject: [PATCH] fixing start faulure on some devices; syncronization
 improvements

---
 .../samples/tutorial4/Camera2Renderer.java    | 19 +++++++++++--------
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/samples/android/tutorial-4-opencl/src/org/opencv/samples/tutorial4/Camera2Renderer.java b/samples/android/tutorial-4-opencl/src/org/opencv/samples/tutorial4/Camera2Renderer.java
index a0040ad3b4..177fe0d35d 100644
--- a/samples/android/tutorial-4-opencl/src/org/opencv/samples/tutorial4/Camera2Renderer.java
+++ b/samples/android/tutorial-4-opencl/src/org/opencv/samples/tutorial4/Camera2Renderer.java
@@ -73,7 +73,6 @@ import android.view.Surface;
                      Math.abs(aspect - (float)w/h) < 0.2 ) {
                     bestWidth = w;
                     bestHeight = h;
-                    //mPreviewSize = psize;
                 }
             }
             Log.i(LOGTAG, "best size: "+bestWidth+"x"+bestHeight);
@@ -156,9 +155,9 @@ import android.view.Surface;
 
         @Override
         public void onDisconnected(CameraDevice cameraDevice) {
-            //mCameraOpenCloseLock.release();
             cameraDevice.close();
             mCameraDevice = null;
+            mCameraOpenCloseLock.release();
         }
 
         @Override
@@ -185,6 +184,7 @@ import android.view.Surface;
                 return;
             }
             if(null == mSTex) {
+                mCameraOpenCloseLock.release();
                 Log.e(LOGTAG, "createCameraPreviewSession: preview SurfaceTexture is null");
                 return;
             }
@@ -192,7 +192,6 @@ import android.view.Surface;
             mSTex.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
 
             Surface surface = new Surface(mSTex);
-            Log.d(LOGTAG, "createCameraPreviewSession: surface = " + surface);
 
             mPreviewRequestBuilder = mCameraDevice
                     .createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
@@ -215,6 +214,7 @@ import android.view.Surface;
                                 mCaptureSession.setRepeatingRequest(
                                         mPreviewRequestBuilder.build(), null,
                                         mBackgroundHandler);
+                                Log.i(LOGTAG, "CameraPreviewSession has been started");
                             } catch (CameraAccessException e) {
                                 Log.e(LOGTAG, "createCaptureSession failed");
                             }
@@ -227,7 +227,7 @@ import android.view.Surface;
                             Log.e(LOGTAG, "createCameraPreviewSession failed");
                             mCameraOpenCloseLock.release();
                         }
-                    }, null);
+                    }, mBackgroundHandler);
         } catch (CameraAccessException e) {
             Log.e(LOGTAG, "createCameraPreviewSession");
         } catch (InterruptedException e) {
@@ -235,7 +235,7 @@ import android.view.Surface;
                     "Interrupted while createCameraPreviewSession", e);
         }
         finally {
-            mCameraOpenCloseLock.release();
+            //mCameraOpenCloseLock.release();
         }
     }
 
@@ -262,12 +262,15 @@ import android.view.Surface;
 
     @Override
     protected void setCameraPreviewSize(int width, int height) {
-        //mPreviewSize = new Size(width, height);
-        if( !cacPreviewSize(width, height) )
-            return;
+        Log.i(LOGTAG, "setCameraPreviewSize("+width+"x"+height+")");
         try {
             mCameraOpenCloseLock.acquire();
+            if( !cacPreviewSize(width, height) ) {
+                mCameraOpenCloseLock.release();
+                return;
+            }
             if (null != mCaptureSession) {
+                Log.d(LOGTAG, "closing existing previewSession");
                 mCaptureSession.close();
                 mCaptureSession = null;
             }