camera_metadata.h revision d8afb4d1a4245b2a9d722cbb358a4d6febed89cf
1d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/*
2d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project
3d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
4d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License");
5d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * you may not use this file except in compliance with the License.
6d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * You may obtain a copy of the License at
7d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
8d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *      http://www.apache.org/licenses/LICENSE-2.0
9d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
10d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Unless required by applicable law or agreed to in writing, software
11d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS,
12d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * See the License for the specific language governing permissions and
14d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * limitations under the License.
15d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
16d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
17d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#ifndef SYSTEM_CORE_INCLUDE_ANDROID_CAMERA_METADATA_H
18d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#define SYSTEM_CORE_INCLUDE_ANDROID_CAMERA_METADATA_H
19d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
20d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#include <string.h>
21d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#include <stdint.h>
22d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#include <cutils/compiler.h>
23d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
24d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#ifdef __cplusplus
25d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaextern "C" {
26d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#endif
27d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
28d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
29d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Tag hierarchy and enum definitions for camera_metadata_entry
30d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * =============================================================================
31d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
32d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
33d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
34d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Main enum definitions are in a separate file to make it easy to
35d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * maintain
36d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
37d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#include "camera_metadata_tags.h"
38d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
39d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
40d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Enum range for each top-level category
41d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
42d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
43d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaextern unsigned int camera_metadata_section_bounds[ANDROID_SECTION_COUNT][2];
44d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
45d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaextern const char *camera_metadata_section_names[ANDROID_SECTION_COUNT];
46d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
47d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
48d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Type definitions for camera_metadata_entry
49d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * =============================================================================
50d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
51d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaenum {
52d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    // Unsigned 8-bit integer (uint8_t)
53d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    TYPE_BYTE = 0,
54d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    // Signed 32-bit integer (int32_t)
55d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    TYPE_INT32 = 1,
56d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    // 32-bit float (float)
57d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    TYPE_FLOAT = 2,
58d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    // Signed 64-bit integer (int64_t)
59d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    TYPE_INT64 = 3,
60d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    // 64-bit float (double)
61d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    TYPE_DOUBLE = 4,
62d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    // A 64-bit fraction (camera_metadata_rational_t)
63d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    TYPE_RATIONAL = 5,
64d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    // Number of type fields
65d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    NUM_TYPES
66d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala};
67d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
68d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalatypedef struct camera_metadata_rational {
69d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int32_t numerator;
70d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int32_t denominator;
71d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} camera_metadata_rational_t;
72d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
73d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
74d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Size in bytes of each entry type
75d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
76d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
77d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaextern size_t camera_metadata_type_sizes[NUM_TYPES];
78d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
79d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
80d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Main definitions for the metadata entry and array structures
81d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * =============================================================================
82d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
83d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
84d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
85d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * A packet of metadata. This is a list of metadata entries, each of which has
86d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * an integer tag to identify its meaning, 'type' and 'count' field, and the
87d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * data, which contains a 'count' number of entries of type 'type'. The packet
88d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * has a fixed capacity for entries and for extra data.  A new entry uses up one
89d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * entry slot, and possibly some amount of data capacity; the function
90d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * calculate_camera_metadata_entry_data_size() provides the amount of data
91d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * capacity that would be used up by an entry.
92d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
93d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Entries are not sorted, and are not forced to be unique - multiple entries
94d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * with the same tag are allowed. The packet will not dynamically resize when
95d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * full.
96d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
97d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * The packet is contiguous in memory, with size in bytes given by
98d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * get_camera_metadata_size(). Therefore, it can be copied safely with memcpy()
99d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * to a buffer of sufficient size. The copy_camera_metadata() function is
100d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * intended for eliminating unused capacity in the destination packet.
101d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
102d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalastruct camera_metadata;
103d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalatypedef struct camera_metadata camera_metadata_t;
104d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
105d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
106d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Functions for manipulating camera metadata
107d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * =============================================================================
108d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
109d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
110d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
111d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Allocate a new camera_metadata structure, with some initial space for entries
112d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * and extra data. The entry_capacity is measured in entry counts, and
113d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * data_capacity in bytes. The resulting structure is all contiguous in memory,
114d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * and can be freed with free_camera_metadata().
115d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
116d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
117d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalacamera_metadata_t *allocate_camera_metadata(size_t entry_capacity,
118d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t data_capacity);
119d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
120d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
121d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Place a camera metadata structure into an existing buffer. Returns NULL if
122d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * the buffer is too small for the requested number of reserved entries and
123d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * bytes of data. The entry_capacity is measured in entry counts, and
124d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * data_capacity in bytes. If the buffer is larger than the required space,
125d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * unused space will be left at the end. If successful, returns a pointer to the
126d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * metadata header placed at the start of the buffer. It is the caller's
127d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * responsibility to free the original buffer; do not call
128d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * free_camera_metadata() with the returned pointer.
129d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
130d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
131d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalacamera_metadata_t *place_camera_metadata(void *dst, size_t dst_size,
132d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t entry_capacity,
133d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t data_capacity);
134d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
135d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
136d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Free a camera_metadata structure. Should only be used with structures
137d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * allocated with allocate_camera_metadata().
138d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
139d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
140d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalavoid free_camera_metadata(camera_metadata_t *metadata);
141d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
142d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
143d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Calculate the buffer size needed for a metadata structure of entry_count
144d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * metadata entries, needing a total of data_count bytes of extra data storage.
145d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
146d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
147d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t calculate_camera_metadata_size(size_t entry_count,
148d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t data_count);
149d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
150d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
151d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get current size of entire metadata structure in bytes, including reserved
152d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * but unused space.
153d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
154d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
155d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_size(const camera_metadata_t *metadata);
156d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
157d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
158d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get size of entire metadata buffer in bytes, not including reserved but
159d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * unused space. This is the amount of space needed by copy_camera_metadata for
160d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * its dst buffer.
161d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
162d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
163d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_compact_size(const camera_metadata_t *metadata);
164d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
165d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
166d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get the current number of entries in the metadata packet.
167d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
168d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
169d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_entry_count(const camera_metadata_t *metadata);
170d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
171d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
172d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get the maximum number of entries that could fit in the metadata packet.
173d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
174d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
175d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_entry_capacity(const camera_metadata_t *metadata);
176d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
177d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
178d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get the current count of bytes used for value storage in the metadata packet.
179d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
180d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
181d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_data_count(const camera_metadata_t *metadata);
182d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
183d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
184d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get the maximum count of bytes that could be used for value storage in the
185d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * metadata packet.
186d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
187d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
188d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_data_capacity(const camera_metadata_t *metadata);
189d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
190d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
191d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Copy a metadata structure to a memory buffer, compacting it along the
192d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * way. That is, in the copied structure, entry_count == entry_capacity, and
193d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * data_count == data_capacity.
194d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
195d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * If dst_size > get_camera_metadata_compact_size(), the unused bytes are at the
196d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * end of the buffer. If dst_size < get_camera_metadata_compact_size(), returns
197d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * NULL. Otherwise returns a pointer to the metadata structure header placed at
198d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * the start of dst.
199d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
200d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Since the buffer was not allocated by allocate_camera_metadata, the caller is
201d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * responsible for freeing the underlying buffer when needed; do not call
202d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * free_camera_metadata.
203d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
204d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
205d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalacamera_metadata_t *copy_camera_metadata(void *dst, size_t dst_size,
206d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        const camera_metadata_t *src);
207d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
208d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
209d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Append camera metadata in src to an existing metadata structure in dst.  This
210d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * does not resize the destination structure, so if it is too small, a non-zero
211d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * value is returned. On success, 0 is returned.
212d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
213d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
214d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaint append_camera_metadata(camera_metadata_t *dst, const camera_metadata_t *src);
215d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
216d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
217d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Calculate the number of bytes of extra data a given metadata entry will take
218d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * up. That is, if entry of 'type' with a payload of 'data_count' values is
219d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * added, how much will the value returned by get_camera_metadata_data_count()
220d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * be increased? This value may be zero, if no extra data storage is needed.
221d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
222d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
223d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t calculate_camera_metadata_entry_data_size(uint8_t type,
224d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t data_count);
225d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
226d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
227d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Add a metadata entry to a metadata structure. Returns 0 if the addition
228d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * succeeded. Returns a non-zero value if there is insufficient reserved space
229d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * left to add the entry, or if the tag is unknown.  data_count is the number of
230d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * entries in the data array of the tag's type, not a count of
231d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * bytes. Vendor-defined tags can not be added using this method, unless
232d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * set_vendor_tag_query_ops() has been called first.
233d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
234d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
235d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaint add_camera_metadata_entry(camera_metadata_t *dst,
236d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint32_t tag,
237d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        const void *data,
238d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t data_count);
239d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
240d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
241d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get pointers to the fields for a metadata entry at position index in the
242d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * entry array.  The data pointer points either to the entry's data.value field
243d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * or to the right offset in camera_metadata_t.data. Returns 0 on
244d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * success. Data_count is the number of entries in the data array when cast to
245d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * the tag's type, not a count of bytes.
246d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
247d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * src and index are inputs; tag, type, data, and data_count are outputs.
248d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
249d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
250d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaint get_camera_metadata_entry(camera_metadata_t *src,
251d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint32_t index,
252d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint32_t *tag,
253d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint8_t *type,
254d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        void **data,
255d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t *data_count);
256d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
257d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
258d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Retrieve human-readable name of section the tag is in. Returns NULL if
259d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * no such tag is defined. Returns NULL for tags in the vendor section, unless
260d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * set_vendor_tag_query_ops() has been used.
261d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
262d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
263d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaconst char *get_camera_metadata_section_name(uint32_t tag);
264d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
265d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
266d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Retrieve human-readable name of tag (not including section). Returns NULL if
267d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * no such tag is defined. Returns NULL for tags in the vendor section, unless
268d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * set_vendor_tag_query_ops() has been used.
269d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
270d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
271d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaconst char *get_camera_metadata_tag_name(uint32_t tag);
272d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
273d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
274d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Retrieve the type of a tag. Returns -1 if no such tag is defined. Returns -1
275d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * for tags in the vendor section, unless set_vendor_tag_query_ops() has been
276d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * used.
277d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
278d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
279d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaint get_camera_metadata_tag_type(uint32_t tag);
280d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
281d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
282d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Set up vendor-specific tag query methods. These are needed to properly add
283d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * entries with vendor-specified tags and to use the
284d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * get_camera_metadata_section_name, _tag_name, and _tag_type methods with
285d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * vendor tags. Returns 0 on success.
286d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
287d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalatypedef struct vendor_tag_query_ops {
288d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    /**
289d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * Get vendor section name for a vendor-specified entry tag. Only called for
290d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * tags >= 0x80000000. The section name must start with the name of the
291d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * vendor in the Java package style. For example, CameraZoom inc must prefix
292d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * their sections with "com.camerazoom." Must return NULL if the tag is
293d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * outside the bounds of vendor-defined sections.
294d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     */
295d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const char *(*get_camera_vendor_section_name)(uint32_t tag);
296d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    /**
297d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * Get tag name for a vendor-specified entry tag. Only called for tags >=
298d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * 0x80000000. Must return NULL if the tag is outside the bounds of
299d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * vendor-defined sections.
300d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     */
301d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const char *(*get_camera_vendor_tag_name)(uint32_t tag);
302d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    /**
303d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * Get tag type for a vendor-specified entry tag. Only called for tags >=
304d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * 0x80000000. Must return -1 if the tag is outside the bounds of
305d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * vendor-defined sections.
306d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     */
307d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int         (*get_camera_vendor_tag_type)(uint32_t tag);
308d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} vendor_tag_query_ops_t;
309d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
310d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
311d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaint set_camera_metadata_vendor_tag_ops(const vendor_tag_query_ops_t *query_ops);
312d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
313d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
314d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Print fields in the metadata to the log.
315d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * verbosity = 0: Only tag entry information
316d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * verbosity = 1: Tag entry information plus at most 16 data values
317d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * verbosity = 2: All information
318d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
319d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
320d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalavoid dump_camera_metadata(const camera_metadata_t *metadata,
321d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        int verbosity);
322d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
323d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#ifdef __cplusplus
324d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
325d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#endif
326d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
327d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#endif
328