diff options
| -rw-r--r-- | core/java/android/hardware/Camera.java | 43 | ||||
| -rw-r--r-- | core/jni/android_hardware_Camera.cpp | 14 | ||||
| -rw-r--r-- | services/camera/libcameraservice/CameraService.cpp | 2 |
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; |