summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEino-Ville Talvala <etalvala@google.com>2015-04-07 13:47:46 -0700
committerEino-Ville Talvala <etalvala@google.com>2015-04-15 17:26:13 -0700
commitaee4782839de3103ecebca830a6bd49263a37ad3 (patch)
tree42e82a6e64c73cd35ebb93bbc06626cdd180c2b1
parent33642b9c5763a3ad7cebbe8918a6a8d31f3a63a5 (diff)
downloadhardware_libhardware-aee4782839de3103ecebca830a6bd49263a37ad3.zip
hardware_libhardware-aee4782839de3103ecebca830a6bd49263a37ad3.tar.gz
hardware_libhardware-aee4782839de3103ecebca830a6bd49263a37ad3.tar.bz2
Camera: Add HAL module init method.
For use by Camera HAL libraries to perform one-time initialization steps after the library is loaded. Bug: 20016050 Change-Id: Ia01ae0eafcadece9124ac2cfcc3b1c3939352843
-rw-r--r--include/hardware/camera_common.h37
-rw-r--r--modules/camera/CameraHAL.cpp1
-rw-r--r--modules/usbcamera/CameraHAL.cpp1
-rw-r--r--tests/hardware/struct-offset.cpp3
4 files changed, 40 insertions, 2 deletions
diff --git a/include/hardware/camera_common.h b/include/hardware/camera_common.h
index c2d4536..fe3b7d7 100644
--- a/include/hardware/camera_common.h
+++ b/include/hardware/camera_common.h
@@ -113,6 +113,10 @@ __BEGIN_DECLS
* To specify valid combinations of devices, the resource_cost and conflicting_devices
* fields should always be set in the camera_info structure returned by the
* get_camera_info call.
+ *
+ * 4. Module initialization method. This will be called by the camera service
+ * right after the HAL module is loaded, to allow for one-time initialization
+ * of the HAL. It is called before any other module methods are invoked.
*/
/**
@@ -868,8 +872,39 @@ typedef struct camera_module {
*/
int (*set_torch_mode)(const char* camera_id, bool enabled);
+ /**
+ * init:
+ *
+ * This method is called by the camera service before any other methods
+ * are invoked, right after the camera HAL library has been successfully
+ * loaded. It may be left as NULL by the HAL module, if no initialization
+ * in needed.
+ *
+ * It can be used by HAL implementations to perform initialization and
+ * other one-time operations.
+ *
+ * Version information (based on camera_module_t.common.module_api_version):
+ *
+ * CAMERA_MODULE_API_VERSION_1_x/2_0/2_1/2_2/2_3:
+ * Not provided by HAL module. Framework will not call this function.
+ *
+ * CAMERA_MODULE_API_VERSION_2_4:
+ * If not NULL, will always be called by the framework once after the HAL
+ * module is loaded, before any other HAL module method is called.
+ *
+ * Return values:
+ *
+ * 0: On a successful operation.
+ *
+ * -ENODEV: Initialization cannot be completed due to an internal
+ * error. The HAL must be assumed to be in a nonfunctional
+ * state.
+ *
+ */
+ int (*init)();
+
/* reserved for future use */
- void* reserved[6];
+ void* reserved[5];
} camera_module_t;
__END_DECLS
diff --git a/modules/camera/CameraHAL.cpp b/modules/camera/CameraHAL.cpp
index 06f308f..62ee6d4 100644
--- a/modules/camera/CameraHAL.cpp
+++ b/modules/camera/CameraHAL.cpp
@@ -186,6 +186,7 @@ camera_module_t HAL_MODULE_INFO_SYM __attribute__ ((visibility("default"))) = {
get_vendor_tag_ops : get_vendor_tag_ops,
open_legacy : NULL,
set_torch_mode : NULL,
+ init : NULL,
reserved : {0},
};
} // extern "C"
diff --git a/modules/usbcamera/CameraHAL.cpp b/modules/usbcamera/CameraHAL.cpp
index 98111ef..652e937 100644
--- a/modules/usbcamera/CameraHAL.cpp
+++ b/modules/usbcamera/CameraHAL.cpp
@@ -147,6 +147,7 @@ camera_module_t HAL_MODULE_INFO_SYM __attribute__ ((visibility("default"))) = {
get_vendor_tag_ops : NULL,
open_legacy : NULL,
set_torch_mode : NULL,
+ init : NULL,
reserved : {0},
};
} // extern "C"
diff --git a/tests/hardware/struct-offset.cpp b/tests/hardware/struct-offset.cpp
index d6ea073..10c0895 100644
--- a/tests/hardware/struct-offset.cpp
+++ b/tests/hardware/struct-offset.cpp
@@ -214,7 +214,8 @@ void CheckOffsets(void) {
CHECK_MEMBER_AT(camera_module_t, get_vendor_tag_ops, 140, 272);
CHECK_MEMBER_AT(camera_module_t, open_legacy, 144, 280);
CHECK_MEMBER_AT(camera_module_t, set_torch_mode, 148, 288);
- CHECK_MEMBER_AT(camera_module_t, reserved, 152, 296);
+ CHECK_MEMBER_AT(camera_module_t, init, 152, 296);
+ CHECK_MEMBER_AT(camera_module_t, reserved, 156, 304);
//Types defined in camera3.h
CHECK_MEMBER_AT(camera3_device_ops_t, initialize, 0, 0);