summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorYin-Chia Yeh <yinchiayeh@google.com>2018-05-31 15:12:00 -0700
committerandroid-build-merger <android-build-merger@google.com>2018-05-31 15:12:00 -0700
commite384ef876850aa3859c28df5158e5f401eb8a57f (patch)
treeb3a8e6abc616abd533d35adf4eb51dd22be4c2d8 /core/java/android
parent7696265ef69d1c6f5dc7780fd83aa79111029717 (diff)
parentd4c5d1e44847fd3712068ac0d0144839f84b4479 (diff)
Merge "Camera: add new detailed error callback" into pi-dev
am: d4c5d1e448 Change-Id: I05c46b7e8558a0877d4274c5dcd86cfa9c4f2917
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/hardware/Camera.java38
-rw-r--r--core/java/android/hardware/camera2/legacy/RequestThreadManager.java7
2 files changed, 42 insertions, 3 deletions
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index 73b8af024e3f..9350aab799a9 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -177,6 +177,7 @@ public class Camera {
private OnZoomChangeListener mZoomListener;
private FaceDetectionListener mFaceListener;
private ErrorCallback mErrorCallback;
+ private ErrorCallback mDetailedErrorCallback;
private boolean mOneShot;
private boolean mWithBuffer;
private boolean mFaceDetectionRunning = false;
@@ -1240,8 +1241,14 @@ public class Camera {
case CAMERA_MSG_ERROR :
Log.e(TAG, "Error " + msg.arg1);
- if (mErrorCallback != null) {
- mErrorCallback.onError(msg.arg1, mCamera);
+ if (mDetailedErrorCallback != null) {
+ mDetailedErrorCallback.onError(msg.arg1, mCamera);
+ } else if (mErrorCallback != null) {
+ if (msg.arg1 == CAMERA_ERROR_DISABLED) {
+ mErrorCallback.onError(CAMERA_ERROR_EVICTED, mCamera);
+ } else {
+ mErrorCallback.onError(msg.arg1, mCamera);
+ }
}
return;
@@ -2005,6 +2012,15 @@ public class Camera {
public static final int CAMERA_ERROR_EVICTED = 2;
/**
+ * Camera was disconnected due to device policy change or client
+ * application going to background.
+ * @see Camera.ErrorCallback
+ *
+ * @hide
+ */
+ public static final int CAMERA_ERROR_DISABLED = 3;
+
+ /**
* Media server died. In this case, the application must release the
* Camera object and instantiate a new one.
* @see Camera.ErrorCallback
@@ -2043,6 +2059,24 @@ public class Camera {
mErrorCallback = cb;
}
+ /**
+ * Registers a callback to be invoked when an error occurs.
+ * The detailed error callback may contain error code that
+ * gives more detailed information about the error.
+ *
+ * When a detailed callback is set, the callback set via
+ * #setErrorCallback(ErrorCallback) will stop receiving
+ * onError call.
+ *
+ * @param cb The callback to run
+ *
+ * @hide
+ */
+ public final void setDetailedErrorCallback(ErrorCallback cb)
+ {
+ mDetailedErrorCallback = cb;
+ }
+
private native final void native_setParameters(String params);
private native final String native_getParameters();
diff --git a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
index aaf07e60bef5..da0899be8cfa 100644
--- a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
+++ b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
@@ -193,6 +193,11 @@ public class RequestThreadManager {
mDeviceState.setError(
CameraDeviceImpl.CameraDeviceCallbacks.ERROR_CAMERA_DISCONNECTED);
} break;
+ case Camera.CAMERA_ERROR_DISABLED: {
+ flush();
+ mDeviceState.setError(
+ CameraDeviceImpl.CameraDeviceCallbacks.ERROR_CAMERA_DISABLED);
+ } break;
default: {
Log.e(TAG, "Received error " + i + " from the Camera1 ErrorCallback");
mDeviceState.setError(
@@ -1005,7 +1010,7 @@ public class RequestThreadManager {
mFaceDetectMapper = new LegacyFaceDetectMapper(mCamera, mCharacteristics);
mCaptureCollector = new CaptureCollector(MAX_IN_FLIGHT_REQUESTS, mDeviceState);
mRequestThread = new RequestHandlerThread(name, mRequestHandlerCb);
- mCamera.setErrorCallback(mErrorCallback);
+ mCamera.setDetailedErrorCallback(mErrorCallback);
}
/**