OSDN Git Service

Don't access mParameters dirty bit in other thread
authorAngus Kong <shkong@google.com>
Wed, 3 Apr 2013 00:59:30 +0000 (17:59 -0700)
committerAngus Kong <shkong@google.com>
Wed, 3 Apr 2013 17:51:16 +0000 (10:51 -0700)
Change-Id: I067dd56975cc908f29ed7ba419572982c55b2063

src/com/android/camera/CameraManager.java

index a26a51c..b354654 100644 (file)
@@ -74,7 +74,6 @@ public class CameraManager {
     private static final int ENABLE_SHUTTER_SOUND = 24;
 
     private Handler mCameraHandler;
-    private CameraProxy mCameraProxy;
     private android.hardware.Camera mCamera;
 
     // This holder is used when we need to pass the exception
@@ -139,7 +138,6 @@ public class CameraManager {
                     case RELEASE:
                         mCamera.release();
                         mCamera = null;
-                        mCameraProxy = null;
                         return;
 
                     case RECONNECT:
@@ -226,11 +224,15 @@ public class CameraManager {
                         return;
 
                     case SET_PARAMETERS:
+                        mParametersIsDirty = true;
                         mCamera.setParameters((Parameters) msg.obj);
                         return;
 
                     case GET_PARAMETERS:
-                        mParameters = mCamera.getParameters();
+                        if (mParametersIsDirty) {
+                            mParameters = mCamera.getParameters();
+                            mParametersIsDirty = false;
+                        }
                         return;
 
                     case SET_PARAMETERS_ASYNC:
@@ -256,7 +258,6 @@ public class CameraManager {
                         Log.e(TAG, "Fail to release the camera.");
                     }
                     mCamera = null;
-                    mCameraProxy = null;
                 }
                 throw e;
             }
@@ -280,9 +281,8 @@ public class CameraManager {
         // a view hierarchy can touch its views.
         mCamera = android.hardware.Camera.open(cameraId);
         if (mCamera != null) {
-            mCameraProxy = new CameraProxy();
             mParametersIsDirty = true;
-            return mCameraProxy;
+            return new CameraProxy();
         } else {
             return null;
         }
@@ -427,7 +427,6 @@ public class CameraManager {
                 Log.v(TAG, "null parameters in setParameters()");
                 return;
             }
-            mParametersIsDirty = true;
             mCameraHandler.obtainMessage(SET_PARAMETERS, params).sendToTarget();
         }
 
@@ -437,16 +436,13 @@ public class CameraManager {
                 Log.v(TAG, "null parameters in setParameters()");
                 return;
             }
-            mParametersIsDirty = true;
             mCameraHandler.removeMessages(SET_PARAMETERS_ASYNC);
             mCameraHandler.obtainMessage(SET_PARAMETERS_ASYNC, params).sendToTarget();
         }
 
         public Parameters getParameters() {
-            if (mParametersIsDirty || mParameters == null) {
-                mCameraHandler.sendEmptyMessage(GET_PARAMETERS);
-                if (waitDone()) mParametersIsDirty = false;
-            }
+            mCameraHandler.sendEmptyMessage(GET_PARAMETERS);
+            waitDone();
             return mParameters;
         }