summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/hardware/Camera.java43
-rw-r--r--core/jni/android_hardware_Camera.cpp14
-rw-r--r--services/camera/libcameraservice/CameraService.cpp2
3 files changed, 57 insertions, 2 deletions
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index 7ca615504934..1a914a2d6007 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -138,7 +138,7 @@ public class Camera {
private static final int CAMERA_MSG_COMPRESSED_IMAGE = 0x100;
private static final int CAMERA_MSG_RAW_IMAGE_NOTIFY = 0x200;
private static final int CAMERA_MSG_PREVIEW_METADATA = 0x400;
- private static final int CAMERA_MSG_ALL_MSGS = 0x4FF;
+ private static final int CAMERA_MSG_FOCUS_MOVE = 0x800;
private int mNativeContext; // accessed by native methods
private EventHandler mEventHandler;
@@ -148,6 +148,7 @@ public class Camera {
private PreviewCallback mPreviewCallback;
private PictureCallback mPostviewCallback;
private AutoFocusCallback mAutoFocusCallback;
+ private AutoFocusMoveCallback mAutoFocusMoveCallback;
private OnZoomChangeListener mZoomListener;
private FaceDetectionListener mFaceListener;
private ErrorCallback mErrorCallback;
@@ -492,6 +493,7 @@ public class Camera {
mPostviewCallback = null;
mJpegCallback = null;
mAutoFocusCallback = null;
+ mAutoFocusMoveCallback = null;
}
private native final void _stopPreview();
@@ -737,6 +739,12 @@ public class Camera {
}
return;
+ case CAMERA_MSG_FOCUS_MOVE:
+ if (mAutoFocusMoveCallback != null) {
+ mAutoFocusMoveCallback.onAutoFocusMoving(msg.arg1 == 0 ? false : true, mCamera);
+ }
+ return;
+
default:
Log.e(TAG, "Unknown message type " + msg.what);
return;
@@ -849,6 +857,39 @@ public class Camera {
private native final void native_cancelAutoFocus();
/**
+ * Callback interface used to notify on auto focus start and stop.
+ *
+ * <p>This is useful for continuous autofocus -- {@link Parameters#FOCUS_MODE_CONTINUOUS_VIDEO}
+ * and {@link Parameters#FOCUS_MODE_CONTINUOUS_PICTURE}. Applications can
+ * show autofocus animation.</p>
+ *
+ * @hide
+ */
+ public interface AutoFocusMoveCallback
+ {
+ /**
+ * Called when the camera auto focus starts or stops.
+ *
+ * @param start true if focus starts to move, false if focus stops to move
+ * @param camera the Camera service object
+ */
+ void onAutoFocusMoving(boolean start, Camera camera);
+ }
+
+ /**
+ * Sets camera auto-focus move callback.
+ *
+ * @param cb the callback to run
+ * @hide
+ */
+ public void setAutoFocusMoveCallback(AutoFocusMoveCallback cb) {
+ mAutoFocusMoveCallback = cb;
+ enableFocusMoveCallback((mAutoFocusMoveCallback != null) ? 1 : 0);
+ }
+
+ private native void enableFocusMoveCallback(int enable);
+
+ /**
* Callback interface used to signal the moment of actual image capture.
*
* @see #takePicture(ShutterCallback, PictureCallback, PictureCallback, PictureCallback)
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp
index 25763ac0a30e..c1cfc989ea6d 100644
--- a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -795,6 +795,17 @@ static void android_hardware_Camera_stopFaceDetection(JNIEnv *env, jobject thiz)
}
}
+static void android_hardware_Camera_enableFocusMoveCallback(JNIEnv *env, jobject thiz, jint enable)
+{
+ LOGV("enableFocusMoveCallback");
+ sp<Camera> camera = get_native_camera(env, thiz, NULL);
+ if (camera == 0) return;
+
+ if (camera->sendCommand(CAMERA_CMD_ENABLE_FOCUS_MOVE_MSG, enable, 0) != NO_ERROR) {
+ jniThrowRuntimeException(env, "enable focus move callback failed");
+ }
+}
+
//-------------------------------------------------
static JNINativeMethod camMethods[] = {
@@ -870,6 +881,9 @@ static JNINativeMethod camMethods[] = {
{ "_stopFaceDetection",
"()V",
(void *)android_hardware_Camera_stopFaceDetection},
+ { "enableFocusMoveCallback",
+ "(I)V",
+ (void *)android_hardware_Camera_enableFocusMoveCallback},
};
struct field {
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index bb0e66463835..4760f0759140 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -361,7 +361,7 @@ CameraService::Client::Client(const sp<CameraService>& cameraService,
// Enable zoom, error, focus, and metadata messages by default
enableMsgType(CAMERA_MSG_ERROR | CAMERA_MSG_ZOOM | CAMERA_MSG_FOCUS |
- CAMERA_MSG_PREVIEW_METADATA);
+ CAMERA_MSG_PREVIEW_METADATA | CAMERA_MSG_FOCUS_MOVE);
// Callback is disabled by default
mPreviewCallbackFlag = CAMERA_FRAME_CALLBACK_FLAG_NOOP;