From 69fe527bea12f262bfb1a5838f40e3433ad3cb78 Mon Sep 17 00:00:00 2001 From: Eino-Ville Talvala Date: Fri, 7 Sep 2012 12:26:40 -0700 Subject: [PATCH] Camera: Add enableShutterSound method. Some camera apps may wish to replace the system camera shutter sound with their own, especially if they are taking rapid bursts of images. Add method to allow this when possible. Hidden for now. Change-Id: I6520f5441d28675626fafab48c6609c589fc6f7e --- core/java/android/hardware/Camera.java | 25 +++++++++++++++++++++++++ core/jni/android_hardware_Camera.cpp | 22 ++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java index 829620b460596..652356c02c37f 100644 --- a/core/java/android/hardware/Camera.java +++ b/core/java/android/hardware/Camera.java @@ -1145,6 +1145,31 @@ public class Camera { */ public native final void setDisplayOrientation(int degrees); + /** + * Enable or disable the default shutter sound when taking a picture. + * + * By default, the camera plays the system-defined camera shutter sound when + * {@link #takePicture} is called. Using this method, the shutter sound can + * be disabled. It is strongly recommended that an alternative shutter sound + * is played in the {@link ShutterCallback} when the system shutter sound is + * disabled. + * + * Note that devices may not always allow control of the camera shutter + * sound. If the shutter sound cannot be controlled, this method will return + * false. + * + * @param enabled whether the camera should play the system shutter sound + * when {@link #takePicture takePicture} is called. + * @return true if the shutter sound state was successfully changed. False + * if the shutter sound cannot be controlled; in this case, the + * application should not play its own shutter sound since the + * system shutter sound will play when a picture is taken. + * @see #takePicture + * @see ShutterCallback + * @hide + */ + public native final boolean enableShutterSound(boolean enabled); + /** * Callback interface for zoom changes during a smooth zoom operation. * diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp index 6cd8955d366ba..e1e97a19cf0fe 100644 --- a/core/jni/android_hardware_Camera.cpp +++ b/core/jni/android_hardware_Camera.cpp @@ -781,6 +781,25 @@ static void android_hardware_Camera_setDisplayOrientation(JNIEnv *env, jobject t } } +static jboolean android_hardware_Camera_enableShutterSound(JNIEnv *env, jobject thiz, + jboolean enabled) +{ + ALOGV("enableShutterSound"); + sp camera = get_native_camera(env, thiz, NULL); + if (camera == 0) return JNI_FALSE; + + int32_t value = (enabled == JNI_TRUE) ? 1 : 0; + status_t rc = camera->sendCommand(CAMERA_CMD_ENABLE_SHUTTER_SOUND, value, 0); + if (rc == NO_ERROR) { + return JNI_TRUE; + } else if (rc == PERMISSION_DENIED) { + return JNI_FALSE; + } else { + jniThrowRuntimeException(env, "enable shutter sound failed"); + return JNI_FALSE; + } +} + static void android_hardware_Camera_startFaceDetection(JNIEnv *env, jobject thiz, jint type) { @@ -890,6 +909,9 @@ static JNINativeMethod camMethods[] = { { "setDisplayOrientation", "(I)V", (void *)android_hardware_Camera_setDisplayOrientation }, + { "enableShutterSound", + "(Z)Z", + (void *)android_hardware_Camera_enableShutterSound }, { "_startFaceDetection", "(I)V", (void *)android_hardware_Camera_startFaceDetection },