summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSenpo Hu <senpo@google.com>2014-10-10 15:09:56 -0700
committerSenpo Hu <senpo@google.com>2014-10-10 15:32:06 -0700
commit318eeb225f4567a8c2a6fe14baa06e8923ebe622 (patch)
tree6b0171a5a058facd7c56fc06963a21ab7243a969
parent2d01b8e2b5ad30ce3c442799cad4c3d26607fc6f (diff)
downloadandroid_frameworks_ex-318eeb225f4567a8c2a6fe14baa06e8923ebe622.tar.gz
android_frameworks_ex-318eeb225f4567a8c2a6fe14baa06e8923ebe622.tar.bz2
android_frameworks_ex-318eeb225f4567a8c2a6fe14baa06e8923ebe622.zip
Cleanup: handle API 1 error callback in CameraExceptionHandler.
Portability API used to expose setErrorCallback call which is API 1 only. The new CameraExceptionHandler should be the centralized place to handle different camera errors. Bug: 17931297 Change-Id: I0212f96a98e0caca64aca0f947b991b895d8d56b
-rw-r--r--camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2AgentImpl.java4
-rw-r--r--camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java77
-rw-r--r--camera2/portability/src/com/android/ex/camera2/portability/CameraActions.java3
-rw-r--r--camera2/portability/src/com/android/ex/camera2/portability/CameraAgent.java9
-rw-r--r--camera2/portability/src/com/android/ex/camera2/portability/CameraExceptionHandler.java20
5 files changed, 30 insertions, 83 deletions
diff --git a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2AgentImpl.java b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2AgentImpl.java
index ae4c208..c57716d 100644
--- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2AgentImpl.java
+++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCamera2AgentImpl.java
@@ -1195,10 +1195,6 @@ class AndroidCamera2AgentImpl extends CameraAgent {
// TODO: Implement
@Override
- public void setErrorCallback(Handler handler, CameraErrorCallback cb) {}
-
- // TODO: Implement
- @Override
public void setParameters(android.hardware.Camera.Parameters params) {}
// TODO: Implement
diff --git a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java
index 8e17276..515add5 100644
--- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java
+++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java
@@ -236,7 +236,7 @@ class AndroidCameraAgentImpl extends CameraAgent {
/**
* The handler on which the actual camera operations happen.
*/
- private class CameraHandler extends HistoryHandler {
+ private class CameraHandler extends HistoryHandler implements Camera.ErrorCallback {
private CameraAgent mAgent;
private Camera mCamera;
private int mCameraId;
@@ -307,6 +307,14 @@ class AndroidCameraAgentImpl extends CameraAgent {
obtainMessage(CameraActions.CAPTURE_PHOTO, callbacks).sendToTarget();
}
+ @Override
+ public void onError(final int errorCode, Camera camera) {
+ mExceptionHandler.onCameraError(errorCode);
+ if (errorCode == android.hardware.Camera.CAMERA_ERROR_SERVER_DIED) {
+ mExceptionHandler.onCameraException(new RuntimeException("Media server died."));
+ }
+ }
+
/**
* This method does not deal with the API level check. Everyone should
* check first for supported operations before sending message to this handler.
@@ -342,6 +350,8 @@ class AndroidCameraAgentImpl extends CameraAgent {
mCapabilities = new AndroidCameraCapabilities(
mParameterCache.getBlocking());
+ mCamera.setErrorCallback(this);
+
mCameraState.setState(AndroidCameraStateHolder.CAMERA_IDLE);
if (openCallback != null) {
CameraProxy cameraProxy = new AndroidCameraProxyImpl(
@@ -522,11 +532,6 @@ class AndroidCameraAgentImpl extends CameraAgent {
break;
}
- case CameraActions.SET_ERROR_CALLBACK: {
- mCamera.setErrorCallback((ErrorCallback) msg.obj);
- break;
- }
-
case CameraActions.APPLY_SETTINGS: {
Parameters parameters = mParameterCache.getBlocking();
CameraSettings settings = (CameraSettings) msg.obj;
@@ -943,23 +948,6 @@ class AndroidCameraAgentImpl extends CameraAgent {
}
}
- @Override
- public void setErrorCallback(final Handler handler, final CameraErrorCallback cb) {
- try {
- mDispatchThread.runJob(new Runnable() {
- @Override
- public void run() {
- mCameraHandler.obtainMessage(CameraActions.SET_ERROR_CALLBACK,
- ErrorCallbackForward.getNewInstance(
- handler, AndroidCameraProxyImpl.this, cb))
- .sendToTarget();
- }
- });
- } catch (final RuntimeException ex) {
- mCameraAgent.getCameraExceptionHandler().onDispatchThreadException(ex);
- }
- }
-
@Deprecated
@Override
public void setParameters(final Parameters params) {
@@ -1109,49 +1097,6 @@ class AndroidCameraAgentImpl extends CameraAgent {
}
}
- /**
- * A helper class to forward ErrorCallback to another thread.
- */
- private static class ErrorCallbackForward implements Camera.ErrorCallback {
- private final Handler mHandler;
- private final CameraProxy mCamera;
- private final CameraErrorCallback mCallback;
-
- /**
- * Returns a new instance of {@link AFCallbackForward}.
- *
- * @param handler The handler in which the callback will be invoked in.
- * @param camera The {@link CameraProxy} which the callback is from.
- * @param cb The callback to be invoked.
- * @return The instance of the {@link AFCallbackForward},
- * or null if any parameter is null.
- */
- public static ErrorCallbackForward getNewInstance(
- Handler handler, CameraProxy camera, CameraErrorCallback cb) {
- if (handler == null || camera == null || cb == null) {
- return null;
- }
- return new ErrorCallbackForward(handler, camera, cb);
- }
-
- private ErrorCallbackForward(
- Handler h, CameraProxy camera, CameraErrorCallback cb) {
- mHandler = h;
- mCamera = camera;
- mCallback = cb;
- }
-
- @Override
- public void onError(final int error, Camera camera) {
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- mCallback.onError(error, mCamera);
- }
- });
- }
- }
-
/** A helper class to forward AutoFocusMoveCallback to another thread. */
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private static class AFMoveCallbackForward implements AutoFocusMoveCallback {
diff --git a/camera2/portability/src/com/android/ex/camera2/portability/CameraActions.java b/camera2/portability/src/com/android/ex/camera2/portability/CameraActions.java
index 407fbb1..63b1fec 100644
--- a/camera2/portability/src/com/android/ex/camera2/portability/CameraActions.java
+++ b/camera2/portability/src/com/android/ex/camera2/portability/CameraActions.java
@@ -47,7 +47,6 @@ class CameraActions {
public static final int SET_FACE_DETECTION_LISTENER = 461;
public static final int START_FACE_DETECTION = 462;
public static final int STOP_FACE_DETECTION = 463;
- public static final int SET_ERROR_CALLBACK = 464;
// Presentation
public static final int ENABLE_SHUTTER_SOUND = 501;
public static final int SET_DISPLAY_ORIENTATION = 502;
@@ -107,8 +106,6 @@ class CameraActions {
return "START_FACE_DETECTION";
case STOP_FACE_DETECTION:
return "STOP_FACE_DETECTION";
- case SET_ERROR_CALLBACK:
- return "SET_ERROR_CALLBACK";
case ENABLE_SHUTTER_SOUND:
return "ENABLE_SHUTTER_SOUND";
case SET_DISPLAY_ORIENTATION:
diff --git a/camera2/portability/src/com/android/ex/camera2/portability/CameraAgent.java b/camera2/portability/src/com/android/ex/camera2/portability/CameraAgent.java
index d44cacd..66762fd 100644
--- a/camera2/portability/src/com/android/ex/camera2/portability/CameraAgent.java
+++ b/camera2/portability/src/com/android/ex/camera2/portability/CameraAgent.java
@@ -814,15 +814,6 @@ public abstract class CameraAgent {
}
/**
- * Registers an error callback.
- *
- * @param handler The handler on which the callback will be invoked.
- * @param cb The error callback.
- * @see android.hardware.Camera#setErrorCallback(android.hardware.Camera.ErrorCallback)
- */
- public abstract void setErrorCallback(Handler handler, CameraErrorCallback cb);
-
- /**
* Sets the camera parameters.
*
* @param params The camera parameters to use.
diff --git a/camera2/portability/src/com/android/ex/camera2/portability/CameraExceptionHandler.java b/camera2/portability/src/com/android/ex/camera2/portability/CameraExceptionHandler.java
index 7270b22..1fcf3b5 100644
--- a/camera2/portability/src/com/android/ex/camera2/portability/CameraExceptionHandler.java
+++ b/camera2/portability/src/com/android/ex/camera2/portability/CameraExceptionHandler.java
@@ -28,10 +28,12 @@ public class CameraExceptionHandler {
private CameraExceptionCallback mCallback =
new CameraExceptionCallback() {
@Override
+ public void onCameraError(int errorCode) {
+ }
+ @Override
public void onCameraException(RuntimeException e) {
throw e;
}
-
@Override
public void onDispatchThreadException(RuntimeException e) {
throw e;
@@ -42,6 +44,7 @@ public class CameraExceptionHandler {
* A callback helps to handle RuntimeException thrown by camera framework.
*/
public static interface CameraExceptionCallback {
+ public void onCameraError(int errorCode);
public void onCameraException(RuntimeException e);
public void onDispatchThreadException(RuntimeException e);
}
@@ -69,6 +72,21 @@ public class CameraExceptionHandler {
}
/**
+ * Invoke @{link CameraExceptionCallback} when an error is reported by Android camera framework.
+ *
+ * @param errorCode An integer to represent the error code.
+ * @see android.hardware.Camera#setErrorCallback(android.hardware.Camera.ErrorCallback)
+ */
+ public void onCameraError(final int errorCode) {
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mCallback.onCameraError(errorCode);
+ }
+ });
+ }
+
+ /**
* Invoke @{link CameraExceptionCallback} when a runtime exception is thrown by Android camera
* framework.
*