summaryrefslogtreecommitdiff
path: root/include/android/metadata/system/camera_vendor_tags.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/android/metadata/system/camera_vendor_tags.h')
-rw-r--r--include/android/metadata/system/camera_vendor_tags.h158
1 files changed, 158 insertions, 0 deletions
diff --git a/include/android/metadata/system/camera_vendor_tags.h b/include/android/metadata/system/camera_vendor_tags.h
new file mode 100644
index 00000000..0bb54260
--- /dev/null
+++ b/include/android/metadata/system/camera_vendor_tags.h
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef SYSTEM_MEDIA_INCLUDE_ANDROID_CAMERA_VENDOR_TAGS_H
+#define SYSTEM_MEDIA_INCLUDE_ANDROID_CAMERA_VENDOR_TAGS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define CAMERA_METADATA_VENDOR_TAG_BOUNDARY 0x80000000u
+#define CAMERA_METADATA_INVALID_VENDOR_ID UINT64_MAX
+
+typedef uint64_t metadata_vendor_id_t;
+
+/**
+ * Vendor tags:
+ *
+ * This structure contains basic functions for enumerating an immutable set of
+ * vendor-defined camera metadata tags, and querying static information about
+ * their structure/type. The intended use of this information is to validate
+ * the structure of metadata returned by the camera HAL, and to allow vendor-
+ * defined metadata tags to be visible in application facing camera API.
+ */
+typedef struct vendor_tag_ops vendor_tag_ops_t;
+struct vendor_tag_ops {
+ /**
+ * Get the number of vendor tags supported on this platform. Used to
+ * calculate the size of buffer needed for holding the array of all tags
+ * returned by get_all_tags(). This must return -1 on error.
+ */
+ int (*get_tag_count)(const vendor_tag_ops_t *v);
+
+ /**
+ * Fill an array with all of the supported vendor tags on this platform.
+ * get_tag_count() must return the number of tags supported, and
+ * tag_array will be allocated with enough space to hold the number of tags
+ * returned by get_tag_count().
+ */
+ void (*get_all_tags)(const vendor_tag_ops_t *v, uint32_t *tag_array);
+
+ /**
+ * Get the vendor section name for a vendor-specified entry tag. This will
+ * only be called for vendor-defined tags.
+ *
+ * The naming convention for the vendor-specific section names should
+ * follow a style similar to the Java package style. For example,
+ * CameraZoom Inc. must prefix their sections with "com.camerazoom."
+ * This must return NULL if the tag is outside the bounds of
+ * vendor-defined sections.
+ *
+ * There may be different vendor-defined tag sections, for example the
+ * phone maker, the chipset maker, and the camera module maker may each
+ * have their own "com.vendor."-prefixed section.
+ *
+ * The memory pointed to by the return value must remain valid for the
+ * lifetime of the module, and is owned by the module.
+ */
+ const char *(*get_section_name)(const vendor_tag_ops_t *v, uint32_t tag);
+
+ /**
+ * Get the tag name for a vendor-specified entry tag. This is only called
+ * for vendor-defined tags, and must return NULL if it is not a
+ * vendor-defined tag.
+ *
+ * The memory pointed to by the return value must remain valid for the
+ * lifetime of the module, and is owned by the module.
+ */
+ const char *(*get_tag_name)(const vendor_tag_ops_t *v, uint32_t tag);
+
+ /**
+ * Get tag type for a vendor-specified entry tag. The type returned must be
+ * a valid type defined in camera_metadata.h. This method is only called
+ * for tags >= CAMERA_METADATA_VENDOR_TAG_BOUNDARY, and must return
+ * -1 if the tag is outside the bounds of the vendor-defined sections.
+ */
+ int (*get_tag_type)(const vendor_tag_ops_t *v, uint32_t tag);
+
+ /* Reserved for future use. These must be initialized to NULL. */
+ void* reserved[8];
+};
+
+struct vendor_tag_cache_ops {
+ /**
+ * Get the number of vendor tags supported on this platform. Used to
+ * calculate the size of buffer needed for holding the array of all tags
+ * returned by get_all_tags(). This must return -1 on error.
+ */
+ int (*get_tag_count)(metadata_vendor_id_t id);
+
+ /**
+ * Fill an array with all of the supported vendor tags on this platform.
+ * get_tag_count() must return the number of tags supported, and
+ * tag_array will be allocated with enough space to hold the number of tags
+ * returned by get_tag_count().
+ */
+ void (*get_all_tags)(uint32_t *tag_array, metadata_vendor_id_t id);
+
+ /**
+ * Get the vendor section name for a vendor-specified entry tag. This will
+ * only be called for vendor-defined tags.
+ *
+ * The naming convention for the vendor-specific section names should
+ * follow a style similar to the Java package style. For example,
+ * CameraZoom Inc. must prefix their sections with "com.camerazoom."
+ * This must return NULL if the tag is outside the bounds of
+ * vendor-defined sections.
+ *
+ * There may be different vendor-defined tag sections, for example the
+ * phone maker, the chipset maker, and the camera module maker may each
+ * have their own "com.vendor."-prefixed section.
+ *
+ * The memory pointed to by the return value must remain valid for the
+ * lifetime of the module, and is owned by the module.
+ */
+ const char *(*get_section_name)(uint32_t tag, metadata_vendor_id_t id);
+
+ /**
+ * Get the tag name for a vendor-specified entry tag. This is only called
+ * for vendor-defined tags, and must return NULL if it is not a
+ * vendor-defined tag.
+ *
+ * The memory pointed to by the return value must remain valid for the
+ * lifetime of the module, and is owned by the module.
+ */
+ const char *(*get_tag_name)(uint32_t tag, metadata_vendor_id_t id);
+
+ /**
+ * Get tag type for a vendor-specified entry tag. The type returned must be
+ * a valid type defined in camera_metadata.h. This method is only called
+ * for tags >= CAMERA_METADATA_VENDOR_TAG_BOUNDARY, and must return
+ * -1 if the tag is outside the bounds of the vendor-defined sections.
+ */
+ int (*get_tag_type)(uint32_t tag, metadata_vendor_id_t id);
+
+ /* Reserved for future use. These must be initialized to NULL. */
+ void* reserved[8];
+};
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* SYSTEM_MEDIA_INCLUDE_ANDROID_CAMERA_VENDOR_TAGS_H */
+