Loading core/java/android/hardware/Camera.java +42 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -492,6 +493,7 @@ public class Camera { mPostviewCallback = null; mJpegCallback = null; mAutoFocusCallback = null; mAutoFocusMoveCallback = null; } private native final void _stopPreview(); Loading Loading @@ -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; Loading Loading @@ -848,6 +856,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. * Loading core/jni/android_hardware_Camera.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -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[] = { Loading Loading @@ -870,6 +881,9 @@ static JNINativeMethod camMethods[] = { { "_stopFaceDetection", "()V", (void *)android_hardware_Camera_stopFaceDetection}, { "enableFocusMoveCallback", "(I)V", (void *)android_hardware_Camera_enableFocusMoveCallback}, }; struct field { Loading services/camera/libcameraservice/CameraService.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading
core/java/android/hardware/Camera.java +42 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -492,6 +493,7 @@ public class Camera { mPostviewCallback = null; mJpegCallback = null; mAutoFocusCallback = null; mAutoFocusMoveCallback = null; } private native final void _stopPreview(); Loading Loading @@ -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; Loading Loading @@ -848,6 +856,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. * Loading
core/jni/android_hardware_Camera.cpp +14 −0 Original line number Diff line number Diff line Loading @@ -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[] = { Loading Loading @@ -870,6 +881,9 @@ static JNINativeMethod camMethods[] = { { "_stopFaceDetection", "()V", (void *)android_hardware_Camera_stopFaceDetection}, { "enableFocusMoveCallback", "(I)V", (void *)android_hardware_Camera_enableFocusMoveCallback}, }; struct field { Loading
services/camera/libcameraservice/CameraService.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -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; Loading