summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEino-Ville Talvala <etalvala@google.com>2019-02-11 01:22:52 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-02-11 01:22:52 +0000
commit3e11b21931c26012cba3d33187384db3e8b7a95b (patch)
tree9f88af5c5a8a11ed108fbe852d1d7530f0ef4a6c
parentf43b544c0e407234643304c7bfdf658333e3dfc5 (diff)
parentfc590b6ee4632bb73935bbddb7ee368d4b1058fd (diff)
downloadlibhardware-3e11b21931c26012cba3d33187384db3e8b7a95b.tar.gz
Merge "Camera: Add device state notification to camera_module"
-rw-r--r--include/hardware/camera_common.h96
-rw-r--r--tests/hardware/struct-offset.cpp4
2 files changed, 94 insertions, 6 deletions
diff --git a/include/hardware/camera_common.h b/include/hardware/camera_common.h
index f428cfb4..16651a94 100644
--- a/include/hardware/camera_common.h
+++ b/include/hardware/camera_common.h
@@ -121,10 +121,18 @@ __BEGIN_DECLS
*******************************************************************************
* Version: 2.5 [CAMERA_MODULE_API_VERSION_2_5]
*
- * This camera module version adds support to query characteristics of a
- * non-standalone physical camera, which can only be accessed as part of a
- * logical camera. It also adds camera stream combination query.
+ * This camera module version adds below API changes:
+ *
+ * 1. Support to query characteristics of a non-standalone physical camera, which can
+ * only be accessed as part of a logical camera. It also adds camera stream combination
+ * query.
*
+ * 2. Ability to query whether a particular camera stream combination is
+ * supported by the camera device.
+ *
+ * 3. Device state change notification. This module version also supports
+ * notification about the overall device state change, such as
+ * folding/unfolding, or covering/uncovering of shutter.
*/
/**
@@ -799,6 +807,47 @@ typedef struct camera_stream_combination {
} camera_stream_combination_t;
+/**
+ * device_state_t:
+ *
+ * Possible physical states of the overall device, for use with
+ * notify_device_state_change.
+ */
+typedef enum device_state {
+ /**
+ * The device is in its normal physical configuration. This is the default if the
+ * device does not support multiple different states.
+ */
+ NORMAL = 0,
+
+ /**
+ * Camera device(s) facing backward are covered.
+ */
+ BACK_COVERED = 1 << 0,
+
+ /**
+ * Camera device(s) facing foward are covered.
+ */
+ FRONT_COVERED = 1 << 1,
+
+ /**
+ * The device is folded. If not set, the device is unfolded or does not
+ * support folding.
+ *
+ * The exact point when this status change happens during the folding
+ * operation is device-specific.
+ */
+ FOLDED = 1 << 2,
+
+ /**
+ * First vendor-specific device state. All bits above and including this one
+ * are for vendor state values. Values below this one must only be used
+ * for framework-defined states.
+ */
+ VENDOR_STATE_START = 1LL << 32
+
+} device_state_t;
+
typedef struct camera_module {
/**
* Common methods of the camera module. This *must* be the first member of
@@ -1121,8 +1170,47 @@ typedef struct camera_module {
int (*is_stream_combination_supported)(int camera_id,
const camera_stream_combination_t *streams);
+ /**
+ * notify_device_state_change:
+ *
+ * Notify the camera module that the state of the overall device has
+ * changed in some way that the HAL may want to know about.
+ *
+ * For example, a physical shutter may have been uncovered or covered,
+ * or a camera may have been covered or uncovered by an add-on keyboard
+ * or other accessory.
+ *
+ * The state is a bitfield of potential states, and some physical configurations
+ * could plausibly correspond to multiple different combinations of state bits.
+ * The HAL must ignore any state bits it is not actively using to determine
+ * the appropriate camera configuration.
+ *
+ * For example, on some devices the FOLDED state could mean that
+ * backward-facing cameras are covered by the fold, so FOLDED by itself implies
+ * BACK_COVERED. But other devices may support folding but not cover any cameras
+ * when folded, so for those FOLDED would not imply any of the other flags.
+ * Since these relationships are very device-specific, it is difficult to specify
+ * a comprehensive policy. But as a recommendation, it is suggested that if a flag
+ * necessarily implies other flags are set as well, then those flags should be set.
+ * So even though FOLDED would be enough to infer BACK_COVERED on some devices, the
+ * BACK_COVERED flag should also be set for clarity.
+ *
+ * This method may be invoked by the HAL client at any time. It must not
+ * cause any active camera device sessions to be closed, but may dynamically
+ * change which physical camera a logical multi-camera is using for its
+ * active and future output.
+ *
+ * The method must be invoked by the HAL client at least once before the
+ * client calls ICameraDevice::open on any camera device interfaces listed
+ * by this provider, to establish the initial device state.
+ *
+ * Note that the deviceState is 64-bit bitmask, with system defined states in
+ * lower 32-bit and vendor defined states in upper 32-bit.
+ */
+ void (*notify_device_state_change)(uint64_t deviceState);
+
/* reserved for future use */
- void* reserved[3];
+ void* reserved[2];
} camera_module_t;
__END_DECLS
diff --git a/tests/hardware/struct-offset.cpp b/tests/hardware/struct-offset.cpp
index 0b0f053a..855ad108 100644
--- a/tests/hardware/struct-offset.cpp
+++ b/tests/hardware/struct-offset.cpp
@@ -218,7 +218,8 @@ void CheckOffsets(void) {
CHECK_MEMBER_AT(camera_module_t, init, 152, 296);
CHECK_MEMBER_AT(camera_module_t, get_physical_camera_info, 156, 304);
CHECK_MEMBER_AT(camera_module_t, is_stream_combination_supported, 160, 312);
- CHECK_MEMBER_AT(camera_module_t, reserved, 164, 320);
+ CHECK_MEMBER_AT(camera_module_t, notify_device_state_change, 164, 320);
+ CHECK_MEMBER_AT(camera_module_t, reserved, 168, 328);
//Types defined in camera3.h
CHECK_MEMBER_AT(camera3_device_ops_t, initialize, 0, 0);
@@ -232,4 +233,3 @@ void CheckOffsets(void) {
CHECK_MEMBER_AT(camera3_device_ops_t, signal_stream_flush, 32, 64);
CHECK_MEMBER_AT(camera3_device_ops_t, reserved, 36, 72);
}
-