summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/current.txt3
-rw-r--r--core/java/android/hardware/Camera.java11
-rw-r--r--core/java/android/hardware/camera2/CameraDevice.java28
-rw-r--r--core/java/android/hardware/camera2/impl/CameraDeviceImpl.java12
-rw-r--r--core/java/android/hardware/camera2/impl/ICameraDeviceUserWrapper.java13
-rw-r--r--core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java15
-rw-r--r--core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java8
-rw-r--r--core/java/android/hardware/camera2/legacy/RequestThreadManager.java11
-rw-r--r--core/jni/android_hardware_Camera.cpp25
9 files changed, 105 insertions, 21 deletions
diff --git a/api/current.txt b/api/current.txt
index 26c90dff3c6b..e3fde232f074 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -16906,9 +16906,10 @@ package android.hardware.camera2 {
method @NonNull public abstract android.hardware.camera2.CaptureRequest.Builder createReprocessCaptureRequest(@NonNull android.hardware.camera2.TotalCaptureResult) throws android.hardware.camera2.CameraAccessException;
method public abstract void createReprocessableCaptureSession(@NonNull android.hardware.camera2.params.InputConfiguration, @NonNull java.util.List<android.view.Surface>, @NonNull android.hardware.camera2.CameraCaptureSession.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
method public abstract void createReprocessableCaptureSessionByConfigurations(@NonNull android.hardware.camera2.params.InputConfiguration, @NonNull java.util.List<android.hardware.camera2.params.OutputConfiguration>, @NonNull android.hardware.camera2.CameraCaptureSession.StateCallback, @Nullable android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+ method public int getCameraAudioRestriction() throws android.hardware.camera2.CameraAccessException;
method @NonNull public abstract String getId();
method public boolean isSessionConfigurationSupported(@NonNull android.hardware.camera2.params.SessionConfiguration) throws android.hardware.camera2.CameraAccessException;
- method public int setCameraAudioRestriction(int) throws android.hardware.camera2.CameraAccessException;
+ method public void setCameraAudioRestriction(int) throws android.hardware.camera2.CameraAccessException;
field public static final int AUDIO_RESTRICTION_NONE = 0; // 0x0
field public static final int AUDIO_RESTRICTION_VIBRATION = 1; // 0x1
field public static final int AUDIO_RESTRICTION_VIBRATION_SOUND = 3; // 0x3
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index b8ab1142e534..8e8a81d6cee6 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -2169,11 +2169,18 @@ public class Camera {
}
/**
- * Setting camera audio restriction mode.
+ * Set camera audio restriction mode.
*
* @hide
*/
- public native final int setAudioRestriction(int mode);
+ public native final void setAudioRestriction(int mode);
+
+ /**
+ * Get currently applied camera audio restriction mode.
+ *
+ * @hide
+ */
+ public native final int getAudioRestriction();
/**
* Image size (width and height dimensions).
diff --git a/core/java/android/hardware/camera2/CameraDevice.java b/core/java/android/hardware/camera2/CameraDevice.java
index ed2d0c9344c6..0714884e347c 100644
--- a/core/java/android/hardware/camera2/CameraDevice.java
+++ b/core/java/android/hardware/camera2/CameraDevice.java
@@ -1251,25 +1251,43 @@ public abstract class CameraDevice implements AutoCloseable {
* are setting different modes, the system will pick a the mode that's union of
* all modes set by CameraDevice.</p>
*
- * <p>The mute settings will be automatically removed when the CameraDevice is closed or
- * the application is disconnected from the camera.</p>
+ * <p>The mute settings from this CameraDevice will be automatically removed when the
+ * CameraDevice is closed or the application is disconnected from the camera.</p>
*
* @param mode An enumeration selecting the audio restriction mode for this camera device.
*
- * @return The system-wide mute mode setting resulting from this call
- *
* @throws IllegalArgumentException if the mode is not supported
*
* @throws CameraAccessException if the camera device is no longer connected or has
* encountered a fatal error
* @throws IllegalStateException if the camera device has been closed
+ *
+ * @see #getCameraAudioRestriction
*/
- public @CAMERA_AUDIO_RESTRICTION int setCameraAudioRestriction(
+ public void setCameraAudioRestriction(
@CAMERA_AUDIO_RESTRICTION int mode) throws CameraAccessException {
throw new UnsupportedOperationException("Subclasses must override this method");
}
/**
+ * Get currently applied global camera audio restriction mode.
+ *
+ * <p>Application can use this method to retrieve the system-wide camera audio restriction
+ * settings described in {@link #setCameraAudioRestriction}.</p>
+ *
+ * @return The system-wide mute mode setting resulting from this call
+ *
+ * @throws CameraAccessException if the camera device is no longer connected or has
+ * encountered a fatal error
+ * @throws IllegalStateException if the camera device has been closed
+ *
+ * @see #setCameraAudioRestriction
+ */
+ public @CAMERA_AUDIO_RESTRICTION int getCameraAudioRestriction() throws CameraAccessException {
+ throw new UnsupportedOperationException("Subclasses must override this method");
+ }
+
+ /**
* To be inherited by android.hardware.camera2.* code only.
* @hide
*/
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
index 1f385dde9563..4494d27330b5 100644
--- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
@@ -2570,11 +2570,19 @@ public class CameraDeviceImpl extends CameraDevice
}
@Override
- public @CAMERA_AUDIO_RESTRICTION int setCameraAudioRestriction(
+ public void setCameraAudioRestriction(
@CAMERA_AUDIO_RESTRICTION int mode) throws CameraAccessException {
synchronized(mInterfaceLock) {
checkIfCameraClosedOrInError();
- return mRemoteDevice.setCameraAudioRestriction(mode);
+ mRemoteDevice.setCameraAudioRestriction(mode);
+ }
+ }
+
+ @Override
+ public @CAMERA_AUDIO_RESTRICTION int getCameraAudioRestriction() throws CameraAccessException {
+ synchronized(mInterfaceLock) {
+ checkIfCameraClosedOrInError();
+ return mRemoteDevice.getGlobalAudioRestriction();
}
}
}
diff --git a/core/java/android/hardware/camera2/impl/ICameraDeviceUserWrapper.java b/core/java/android/hardware/camera2/impl/ICameraDeviceUserWrapper.java
index ff2819b25c00..3660f29f68d1 100644
--- a/core/java/android/hardware/camera2/impl/ICameraDeviceUserWrapper.java
+++ b/core/java/android/hardware/camera2/impl/ICameraDeviceUserWrapper.java
@@ -258,9 +258,18 @@ public class ICameraDeviceUserWrapper {
}
}
- public int setCameraAudioRestriction(int mode) throws CameraAccessException {
+ public void setCameraAudioRestriction(int mode) throws CameraAccessException {
try {
- return mRemoteDevice.setCameraAudioRestriction(mode);
+ mRemoteDevice.setCameraAudioRestriction(mode);
+ } catch (Throwable t) {
+ CameraManager.throwAsPublicException(t);
+ throw new UnsupportedOperationException("Unexpected exception", t);
+ }
+ }
+
+ public int getGlobalAudioRestriction() throws CameraAccessException {
+ try {
+ return mRemoteDevice.getGlobalAudioRestriction();
} catch (Throwable t) {
CameraManager.throwAsPublicException(t);
throw new UnsupportedOperationException("Unexpected exception", t);
diff --git a/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java b/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java
index 0fa17c1fb574..5d1435ab4c8d 100644
--- a/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java
+++ b/core/java/android/hardware/camera2/legacy/CameraDeviceUserShim.java
@@ -767,14 +767,25 @@ public class CameraDeviceUserShim implements ICameraDeviceUser {
}
@Override
- public int setCameraAudioRestriction(int mode) {
+ public void setCameraAudioRestriction(int mode) {
if (mLegacyDevice.isClosed()) {
String err = "Cannot set camera audio restriction, device has been closed.";
Log.e(TAG, err);
throw new ServiceSpecificException(ICameraService.ERROR_DISCONNECTED, err);
}
- return mLegacyDevice.setAudioRestriction(mode);
+ mLegacyDevice.setAudioRestriction(mode);
+ }
+
+ @Override
+ public int getGlobalAudioRestriction() {
+ if (mLegacyDevice.isClosed()) {
+ String err = "Cannot set camera audio restriction, device has been closed.";
+ Log.e(TAG, err);
+ throw new ServiceSpecificException(ICameraService.ERROR_DISCONNECTED, err);
+ }
+
+ return mLegacyDevice.getAudioRestriction();
}
@Override
diff --git a/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java b/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java
index c0d8baab0ad1..fbc9ac3229c3 100644
--- a/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java
+++ b/core/java/android/hardware/camera2/legacy/LegacyCameraDevice.java
@@ -550,8 +550,12 @@ public class LegacyCameraDevice implements AutoCloseable {
return lastFrame;
}
- public int setAudioRestriction(int mode) {
- return mRequestThreadManager.setAudioRestriction(mode);
+ public void setAudioRestriction(int mode) {
+ mRequestThreadManager.setAudioRestriction(mode);
+ }
+
+ public int getAudioRestriction() {
+ return mRequestThreadManager.getAudioRestriction();
}
/**
diff --git a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
index a514ee139d9c..32411fbdda2f 100644
--- a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
+++ b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
@@ -1105,9 +1105,16 @@ public class RequestThreadManager {
condition.block();
}
- public int setAudioRestriction(int mode) {
+ public void setAudioRestriction(int mode) {
if (mCamera != null) {
- return mCamera.setAudioRestriction(mode);
+ mCamera.setAudioRestriction(mode);
+ }
+ throw new IllegalStateException("Camera has been released!");
+ }
+
+ public int getAudioRestriction() {
+ if (mCamera != null) {
+ return mCamera.getAudioRestriction();
}
throw new IllegalStateException("Camera has been released!");
}
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp
index f87163bb8379..bc69735d7453 100644
--- a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -1023,22 +1023,38 @@ static void android_hardware_Camera_enableFocusMoveCallback(JNIEnv *env, jobject
}
}
-static int32_t android_hardware_Camera_setAudioRestriction(
+static void android_hardware_Camera_setAudioRestriction(
JNIEnv *env, jobject thiz, jint mode)
{
ALOGV("setAudioRestriction");
sp<Camera> camera = get_native_camera(env, thiz, NULL);
if (camera == 0) {
jniThrowRuntimeException(env, "camera has been disconnected");
- return -1;
+ return;
}
int32_t ret = camera->setAudioRestriction(mode);
if (ret < 0) {
jniThrowRuntimeException(env, "Illegal argument or low-level eror");
+ return;
+ }
+}
+
+static int32_t android_hardware_Camera_getAudioRestriction(
+ JNIEnv *env, jobject thiz)
+{
+ ALOGV("getAudioRestriction");
+ sp<Camera> camera = get_native_camera(env, thiz, NULL);
+ if (camera == 0) {
+ jniThrowRuntimeException(env, "camera has been disconnected");
return -1;
}
+ int32_t ret = camera->getGlobalAudioRestriction();
+ if (ret < 0) {
+ jniThrowRuntimeException(env, "Illegal argument or low-level eror");
+ return -1;
+ }
return ret;
}
@@ -1127,8 +1143,11 @@ static const JNINativeMethod camMethods[] = {
"(I)V",
(void *)android_hardware_Camera_enableFocusMoveCallback},
{ "setAudioRestriction",
- "(I)I",
+ "(I)V",
(void *)android_hardware_Camera_setAudioRestriction},
+ { "getAudioRestriction",
+ "()I",
+ (void *)android_hardware_Camera_getAudioRestriction},
};
struct field {