• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef SYSTEM_MEDIA_INCLUDE_ANDROID_CAMERA_VENDOR_TAGS_H
18 #define SYSTEM_MEDIA_INCLUDE_ANDROID_CAMERA_VENDOR_TAGS_H
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 #define CAMERA_METADATA_VENDOR_TAG_BOUNDARY 0x80000000u
25 #define CAMERA_METADATA_INVALID_VENDOR_ID UINT64_MAX
26 
27 typedef uint64_t metadata_vendor_id_t;
28 
29 /**
30  * Vendor tags:
31  *
32  * This structure contains basic functions for enumerating an immutable set of
33  * vendor-defined camera metadata tags, and querying static information about
34  * their structure/type.  The intended use of this information is to validate
35  * the structure of metadata returned by the camera HAL, and to allow vendor-
36  * defined metadata tags to be visible in application facing camera API.
37  */
38 typedef struct vendor_tag_ops vendor_tag_ops_t;
39 struct vendor_tag_ops {
40     /**
41      * Get the number of vendor tags supported on this platform. Used to
42      * calculate the size of buffer needed for holding the array of all tags
43      * returned by get_all_tags().  This must return -1 on error.
44      */
45     int (*get_tag_count)(const vendor_tag_ops_t *v);
46 
47     /**
48      * Fill an array with all of the supported vendor tags on this platform.
49      * get_tag_count() must return the number of tags supported, and
50      * tag_array will be allocated with enough space to hold the number of tags
51      * returned by get_tag_count().
52      */
53     void (*get_all_tags)(const vendor_tag_ops_t *v, uint32_t *tag_array);
54 
55     /**
56      * Get the vendor section name for a vendor-specified entry tag. This will
57      * only be called for vendor-defined tags.
58      *
59      * The naming convention for the vendor-specific section names should
60      * follow a style similar to the Java package style.  For example,
61      * CameraZoom Inc. must prefix their sections with "com.camerazoom."
62      * This must return NULL if the tag is outside the bounds of
63      * vendor-defined sections.
64      *
65      * There may be different vendor-defined tag sections, for example the
66      * phone maker, the chipset maker, and the camera module maker may each
67      * have their own "com.vendor."-prefixed section.
68      *
69      * The memory pointed to by the return value must remain valid for the
70      * lifetime of the module, and is owned by the module.
71      */
72     const char *(*get_section_name)(const vendor_tag_ops_t *v, uint32_t tag);
73 
74     /**
75      * Get the tag name for a vendor-specified entry tag. This is only called
76      * for vendor-defined tags, and must return NULL if it is not a
77      * vendor-defined tag.
78      *
79      * The memory pointed to by the return value must remain valid for the
80      * lifetime of the module, and is owned by the module.
81      */
82     const char *(*get_tag_name)(const vendor_tag_ops_t *v, uint32_t tag);
83 
84     /**
85      * Get tag type for a vendor-specified entry tag. The type returned must be
86      * a valid type defined in camera_metadata.h.  This method is only called
87      * for tags >= CAMERA_METADATA_VENDOR_TAG_BOUNDARY, and must return
88      * -1 if the tag is outside the bounds of the vendor-defined sections.
89      */
90     int (*get_tag_type)(const vendor_tag_ops_t *v, uint32_t tag);
91 
92     /* Reserved for future use.  These must be initialized to NULL. */
93     void* reserved[8];
94 };
95 
96 struct vendor_tag_cache_ops {
97     /**
98      * Get the number of vendor tags supported on this platform. Used to
99      * calculate the size of buffer needed for holding the array of all tags
100      * returned by get_all_tags().  This must return -1 on error.
101      */
102     int (*get_tag_count)(metadata_vendor_id_t id);
103 
104     /**
105      * Fill an array with all of the supported vendor tags on this platform.
106      * get_tag_count() must return the number of tags supported, and
107      * tag_array will be allocated with enough space to hold the number of tags
108      * returned by get_tag_count().
109      */
110     void (*get_all_tags)(uint32_t *tag_array, metadata_vendor_id_t id);
111 
112     /**
113      * Get the vendor section name for a vendor-specified entry tag. This will
114      * only be called for vendor-defined tags.
115      *
116      * The naming convention for the vendor-specific section names should
117      * follow a style similar to the Java package style.  For example,
118      * CameraZoom Inc. must prefix their sections with "com.camerazoom."
119      * This must return NULL if the tag is outside the bounds of
120      * vendor-defined sections.
121      *
122      * There may be different vendor-defined tag sections, for example the
123      * phone maker, the chipset maker, and the camera module maker may each
124      * have their own "com.vendor."-prefixed section.
125      *
126      * The memory pointed to by the return value must remain valid for the
127      * lifetime of the module, and is owned by the module.
128      */
129     const char *(*get_section_name)(uint32_t tag, metadata_vendor_id_t id);
130 
131     /**
132      * Get the tag name for a vendor-specified entry tag. This is only called
133      * for vendor-defined tags, and must return NULL if it is not a
134      * vendor-defined tag.
135      *
136      * The memory pointed to by the return value must remain valid for the
137      * lifetime of the module, and is owned by the module.
138      */
139     const char *(*get_tag_name)(uint32_t tag, metadata_vendor_id_t id);
140 
141     /**
142      * Get tag type for a vendor-specified entry tag. The type returned must be
143      * a valid type defined in camera_metadata.h.  This method is only called
144      * for tags >= CAMERA_METADATA_VENDOR_TAG_BOUNDARY, and must return
145      * -1 if the tag is outside the bounds of the vendor-defined sections.
146      */
147     int (*get_tag_type)(uint32_t tag, metadata_vendor_id_t id);
148 
149     /* Reserved for future use.  These must be initialized to NULL. */
150     void* reserved[8];
151 };
152 
153 #ifdef __cplusplus
154 } /* extern "C" */
155 #endif
156 
157 #endif /* SYSTEM_MEDIA_INCLUDE_ANDROID_CAMERA_VENDOR_TAGS_H */
158 
159