diff options
3 files changed, 86 insertions, 10 deletions
diff --git a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java index 0cd8ede..7388519 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/AndroidCameraAgentImpl.java @@ -48,6 +48,7 @@ class AndroidCameraAgentImpl implements CameraAgent { private Parameters mParameters; private boolean mParametersIsDirty; + private CameraDeviceInfo.Characteristics mCharacteristics; private AndroidCameraCapabilities mCapabilities; private final CameraHandler mCameraHandler; @@ -140,8 +141,13 @@ class AndroidCameraAgentImpl implements CameraAgent { } @Override - public Camera.CameraInfo[] getCameraInfos() { - return mCameraInfos; + public Characteristics getCharacteristics(int cameraId) { + Camera.CameraInfo info = mCameraInfos[cameraId]; + if (info != null) { + return new AndroidCharacteristics(info); + } else { + return null; + } } @Override @@ -158,6 +164,34 @@ class AndroidCameraAgentImpl implements CameraAgent { public int getFirstFrontCameraId() { return mFirstFrontCameraId; } + + private static class AndroidCharacteristics implements Characteristics { + private Camera.CameraInfo mCameraInfo; + + AndroidCharacteristics(Camera.CameraInfo cameraInfo) { + mCameraInfo = cameraInfo; + } + + @Override + public boolean isFacingBack() { + return mCameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK; + } + + @Override + public boolean isFacingFront() { + return mCameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT; + } + + @Override + public int getSensorOrientation() { + return mCameraInfo.orientation; + } + + @Override + public boolean canDisableShutterSound() { + return mCameraInfo.canDisableShutterSound; + } + } } /** @@ -265,15 +299,17 @@ class AndroidCameraAgentImpl implements CameraAgent { mCameraId = cameraId; mParametersIsDirty = true; - // Get a instance of Camera.Parameters for later use. + // Get an instance of Camera.Parameters for later use. mParamsToSet = mCamera.getParameters(); + mCharacteristics = + AndroidCameraDeviceInfo.create().getCharacteristics(cameraId); mCapabilities = new AndroidCameraCapabilities(mParamsToSet); mCameraState.setState(CameraStateHolder.CAMERA_IDLE); if (openCallback != null) { openCallback.onCameraOpened( new AndroidCameraProxyImpl(cameraId, mCamera, - mCapabilities)); + mCharacteristics, mCapabilities)); } } else { if (openCallback != null) { @@ -311,7 +347,8 @@ class AndroidCameraAgentImpl implements CameraAgent { mCameraState.setState(CameraStateHolder.CAMERA_IDLE); if (cbForward != null) { cbForward.onCameraOpened( - new AndroidCameraProxyImpl(cameraId, mCamera, mCapabilities)); + new AndroidCameraProxyImpl(cameraId, mCamera, mCharacteristics, + mCapabilities)); } break; } @@ -614,12 +651,15 @@ class AndroidCameraAgentImpl implements CameraAgent { private final int mCameraId; /* TODO: remove this Camera instance. */ private final Camera mCamera; + private final CameraDeviceInfo.Characteristics mCharacteristics; private final AndroidCameraCapabilities mCapabilities; private AndroidCameraProxyImpl(int cameraId, Camera camera, + CameraDeviceInfo.Characteristics characteristics, AndroidCameraCapabilities capabilities) { mCamera = camera; mCameraId = cameraId; + mCharacteristics = characteristics; mCapabilities = capabilities; } @@ -634,6 +674,11 @@ class AndroidCameraAgentImpl implements CameraAgent { } @Override + public CameraDeviceInfo.Characteristics getCharacteristics() { + return mCharacteristics; + } + + @Override public CameraCapabilities getCapabilities() { return new AndroidCameraCapabilities(mCapabilities); } diff --git a/camera2/portability/src/com/android/ex/camera2/portability/CameraAgent.java b/camera2/portability/src/com/android/ex/camera2/portability/CameraAgent.java index db3b1d7..9c3c400 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/CameraAgent.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/CameraAgent.java @@ -343,6 +343,11 @@ public interface CameraAgent { public int getCameraId(); /** + * @return The camera characteristics. + */ + public CameraDeviceInfo.Characteristics getCharacteristics(); + + /** * @return The camera capabilities. */ public CameraCapabilities getCapabilities(); diff --git a/camera2/portability/src/com/android/ex/camera2/portability/CameraDeviceInfo.java b/camera2/portability/src/com/android/ex/camera2/portability/CameraDeviceInfo.java index 60ad8ed..ada1f29 100644 --- a/camera2/portability/src/com/android/ex/camera2/portability/CameraDeviceInfo.java +++ b/camera2/portability/src/com/android/ex/camera2/portability/CameraDeviceInfo.java @@ -3,18 +3,17 @@ package com.android.ex.camera2.portability; import android.hardware.Camera; /** - * The camera device info. + * The device info for all attached cameras. */ public interface CameraDeviceInfo { static final int NO_DEVICE = -1; /** - * @return The camera info. - * // TODO: Remove the dependency on API 1. + * @param cameraId Which device to interrogate. + * @return The static characteristics of the specified device, or {@code null} on error. */ - @Deprecated - Camera.CameraInfo[] getCameraInfos(); + Characteristics getCharacteristics(int cameraId); /** * @return The total number of the available camera devices. @@ -32,4 +31,31 @@ public interface CameraDeviceInfo { * if not available. */ int getFirstFrontCameraId(); + + /** + * Device characteristics for a single camera. + */ + public interface Characteristics { + /** + * @return Whether the camera faces the back of the device. + */ + boolean isFacingBack(); + + /** + * @return Whether the camera faces the device's screen. + */ + boolean isFacingFront(); + + /** + * @return The camera image orientation, or the clockwise rotation angle + * that must be applied to display it in its natural orientation + * (in degrees, and always a multiple of 90). + */ + int getSensorOrientation(); + + /** + * @return Whether the shutter sound can be disabled. + */ + boolean canDisableShutterSound(); + } } |