diff options
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. * |