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
172f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala#ifndef SYSTEM_MEDIA_INCLUDE_ANDROID_CAMERA_METADATA_H
182f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala#define SYSTEM_MEDIA_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/**
74f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * A reference to a metadata entry in a buffer.
75f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala *
76f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * The data union pointers point to the real data in the buffer, and can be
77f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * modified in-place if the count does not need to change. The count is the
78f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * number of entries in data of the entry's type, not a count of bytes.
79f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala */
80f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvalatypedef struct camera_metadata_entry {
81f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala    size_t   index;
82f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala    uint32_t tag;
83f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala    uint8_t  type;
84f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala    size_t   count;
85f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala    union {
86f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala        uint8_t *u8;
87f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala        int32_t *i32;
88f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala        float   *f;
89f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala        int64_t *i64;
90f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala        double  *d;
91f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala        camera_metadata_rational_t *r;
92f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala    } data;
93f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala} camera_metadata_entry_t;
94f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala
95f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala/**
962f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala * A read-only reference to a metadata entry in a buffer. Identical to
972f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala * camera_metadata_entry in layout
982f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala */
992f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvalatypedef struct camera_metadata_ro_entry {
1002f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala    size_t   index;
1012f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala    uint32_t tag;
1022f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala    uint8_t  type;
1032f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala    size_t   count;
1042f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala    union {
1052f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala        const uint8_t *u8;
1062f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala        const int32_t *i32;
1072f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala        const float   *f;
1082f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala        const int64_t *i64;
1092f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala        const double  *d;
1102f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala        const camera_metadata_rational_t *r;
1112f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala    } data;
1122f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala} camera_metadata_ro_entry_t;
1132f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala
1142f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala/**
115d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Size in bytes of each entry type
116d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
117d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
118fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvalaextern const size_t camera_metadata_type_size[NUM_TYPES];
119fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala
120fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala/**
121fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala * Human-readable name of each entry type
122fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala */
123fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville TalvalaANDROID_API
124fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvalaextern const char* camera_metadata_type_names[NUM_TYPES];
125d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
126d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
127d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Main definitions for the metadata entry and array structures
128d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * =============================================================================
129d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
130d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
131d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
132d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * A packet of metadata. This is a list of metadata entries, each of which has
133d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * an integer tag to identify its meaning, 'type' and 'count' field, and the
134d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * data, which contains a 'count' number of entries of type 'type'. The packet
135d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * has a fixed capacity for entries and for extra data.  A new entry uses up one
136d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * entry slot, and possibly some amount of data capacity; the function
137d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * calculate_camera_metadata_entry_data_size() provides the amount of data
138d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * capacity that would be used up by an entry.
139d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
140f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * Entries are not sorted by default, and are not forced to be unique - multiple
141f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * entries with the same tag are allowed. The packet will not dynamically resize
142f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * when full.
143d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
144d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * The packet is contiguous in memory, with size in bytes given by
145d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * get_camera_metadata_size(). Therefore, it can be copied safely with memcpy()
146d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * to a buffer of sufficient size. The copy_camera_metadata() function is
147d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * intended for eliminating unused capacity in the destination packet.
148d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
149d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalastruct camera_metadata;
150d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalatypedef struct camera_metadata camera_metadata_t;
151d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
152d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
153d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Functions for manipulating camera metadata
154d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * =============================================================================
155d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
156d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
157d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
158d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Allocate a new camera_metadata structure, with some initial space for entries
159d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * and extra data. The entry_capacity is measured in entry counts, and
160d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * data_capacity in bytes. The resulting structure is all contiguous in memory,
161d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * and can be freed with free_camera_metadata().
162d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
163d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
164d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalacamera_metadata_t *allocate_camera_metadata(size_t entry_capacity,
165d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t data_capacity);
166d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
167d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
168d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Place a camera metadata structure into an existing buffer. Returns NULL if
169d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * the buffer is too small for the requested number of reserved entries and
170d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * bytes of data. The entry_capacity is measured in entry counts, and
171d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * data_capacity in bytes. If the buffer is larger than the required space,
172d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * unused space will be left at the end. If successful, returns a pointer to the
173d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * metadata header placed at the start of the buffer. It is the caller's
174d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * responsibility to free the original buffer; do not call
175d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * free_camera_metadata() with the returned pointer.
176d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
177d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
178d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalacamera_metadata_t *place_camera_metadata(void *dst, size_t dst_size,
179d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t entry_capacity,
180d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t data_capacity);
181d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
182d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
183d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Free a camera_metadata structure. Should only be used with structures
184d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * allocated with allocate_camera_metadata().
185d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
186d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
187d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalavoid free_camera_metadata(camera_metadata_t *metadata);
188d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
189d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
190d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Calculate the buffer size needed for a metadata structure of entry_count
191d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * metadata entries, needing a total of data_count bytes of extra data storage.
192d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
193d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
194d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t calculate_camera_metadata_size(size_t entry_count,
195d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t data_count);
196d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
197d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
198d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get current size of entire metadata structure in bytes, including reserved
199d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * but unused space.
200d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
201d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
202d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_size(const camera_metadata_t *metadata);
203d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
204d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
205d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get size of entire metadata buffer in bytes, not including reserved but
206d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * unused space. This is the amount of space needed by copy_camera_metadata for
207d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * its dst buffer.
208d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
209d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
210d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_compact_size(const camera_metadata_t *metadata);
211d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
212d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
213d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get the current number of entries in the metadata packet.
214d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
215d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
216d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_entry_count(const camera_metadata_t *metadata);
217d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
218d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
219d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get the maximum number of entries that could fit in the metadata packet.
220d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
221d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
222d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_entry_capacity(const camera_metadata_t *metadata);
223d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
224d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
225d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get the current count of bytes used for value storage in the metadata packet.
226d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
227d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
228d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_data_count(const camera_metadata_t *metadata);
229d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
230d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
231d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get the maximum count of bytes that could be used for value storage in the
232d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * metadata packet.
233d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
234d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
235d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_data_capacity(const camera_metadata_t *metadata);
236d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
237d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
238d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Copy a metadata structure to a memory buffer, compacting it along the
239d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * way. That is, in the copied structure, entry_count == entry_capacity, and
240d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * data_count == data_capacity.
241d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
242d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * If dst_size > get_camera_metadata_compact_size(), the unused bytes are at the
243d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * end of the buffer. If dst_size < get_camera_metadata_compact_size(), returns
244d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * NULL. Otherwise returns a pointer to the metadata structure header placed at
245d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * the start of dst.
246d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
247d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Since the buffer was not allocated by allocate_camera_metadata, the caller is
248d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * responsible for freeing the underlying buffer when needed; do not call
249d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * free_camera_metadata.
250d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
251d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
252d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalacamera_metadata_t *copy_camera_metadata(void *dst, size_t dst_size,
253d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        const camera_metadata_t *src);
254d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
255d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
256d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Append camera metadata in src to an existing metadata structure in dst.  This
257d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * does not resize the destination structure, so if it is too small, a non-zero
25894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala * value is returned. On success, 0 is returned. Appending onto a sorted
25994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala * structure results in a non-sorted combined structure.
260d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
261d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
262d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaint append_camera_metadata(camera_metadata_t *dst, const camera_metadata_t *src);
263d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
264d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
265fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala * Clone an existing metadata buffer, compacting along the way. This is
266fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala * equivalent to allocating a new buffer of the minimum needed size, then
267fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala * appending the buffer to be cloned into the new buffer. The resulting buffer
268fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala * can be freed with free_camera_metadata(). Returns NULL if cloning failed.
269fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala */
270fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville TalvalaANDROID_API
2712f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvalacamera_metadata_t *clone_camera_metadata(const camera_metadata_t *src);
272fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala
273fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala/**
274d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Calculate the number of bytes of extra data a given metadata entry will take
275d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * up. That is, if entry of 'type' with a payload of 'data_count' values is
276d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * added, how much will the value returned by get_camera_metadata_data_count()
277d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * be increased? This value may be zero, if no extra data storage is needed.
278d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
279d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
280d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t calculate_camera_metadata_entry_data_size(uint8_t type,
281d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t data_count);
282d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
283d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
284d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Add a metadata entry to a metadata structure. Returns 0 if the addition
285d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * succeeded. Returns a non-zero value if there is insufficient reserved space
286d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * left to add the entry, or if the tag is unknown.  data_count is the number of
287d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * entries in the data array of the tag's type, not a count of
288d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * bytes. Vendor-defined tags can not be added using this method, unless
28994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala * set_vendor_tag_query_ops() has been called first. Entries are always added to
29094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala * the end of the structure (highest index), so after addition, a
29194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala * previously-sorted array will be marked as unsorted.
292d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
293d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
294d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaint add_camera_metadata_entry(camera_metadata_t *dst,
295d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint32_t tag,
296d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        const void *data,
297d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t data_count);
298d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
299d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
300f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * Sort the metadata buffer for fast searching. If already marked as sorted,
301f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * does nothing. Adding or appending entries to the buffer will place the buffer
302f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * back into an unsorted state.
30394c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala */
30494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville TalvalaANDROID_API
30594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvalaint sort_camera_metadata(camera_metadata_t *dst);
30694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala
30794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala/**
308f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * Get metadata entry at position index in the metadata buffer.
309d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
310f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * src and index are inputs; the passed-in entry is updated with the details of
311f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * the entry. The data pointer points to the real data in the buffer, and can be
312f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * updated as long as the data count does not change.
313d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
314d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
315d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaint get_camera_metadata_entry(camera_metadata_t *src,
316f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala        size_t index,
317f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala        camera_metadata_entry_t *entry);
318d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
319d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
32094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala * Find an entry with given tag value. If not found, returns -ENOENT. Otherwise,
321f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * returns entry contents like get_camera_metadata_entry.
32294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala *
323f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * If multiple entries with the same tag exist, does not have any guarantees on
324f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * which is returned. To speed up searching for tags, sort the metadata
325f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * structure first by calling sort_camera_metadata().
32694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala */
32794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville TalvalaANDROID_API
32894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvalaint find_camera_metadata_entry(camera_metadata_t *src,
32994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala        uint32_t tag,
330f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala        camera_metadata_entry_t *entry);
331f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala
332f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala/**
3332f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala * Find an entry with given tag value, but disallow editing the data
3342f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala */
3352f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville TalvalaANDROID_API
3362f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvalaint find_camera_metadata_ro_entry(const camera_metadata_t *src,
3372f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala        uint32_t tag,
3382f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala        camera_metadata_ro_entry_t *entry);
3392f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala
3402f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala/**
341f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * Delete an entry at given index. This is an expensive operation, since it
342f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * requires repacking entries and possibly entry data. This also invalidates any
343f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * existing camera_metadata_entry.data pointers to this buffer. Sorting is
344f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * maintained.
345f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala */
346f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville TalvalaANDROID_API
347f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvalaint delete_camera_metadata_entry(camera_metadata_t *dst,
348f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala        size_t index);
349f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala
350f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala/**
351f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * Updates a metadata entry with new data. If the data size is changing, may
352f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * need to adjust the data array, making this an O(N) operation. If the data
353f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * size is the same or still fits in the entry space, this is O(1). Maintains
354f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * sorting, but invalidates camera_metadata_entry instances that point to the
355f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * updated entry. If a non-NULL value is passed in to entry, the entry structure
356f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * is updated to match the new buffer state.  Returns a non-zero value if there
357f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * is no room for the new data in the buffer.
358f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala */
359f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville TalvalaANDROID_API
360f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvalaint update_camera_metadata_entry(camera_metadata_t *dst,
361f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala        size_t index,
362f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala        const void *data,
363f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala        size_t data_count,
364f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala        camera_metadata_entry_t *updated_entry);
36594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala
36694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala/**
36798d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala * Set user pointer in buffer. This can be used for linking the metadata buffer
36898d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala * with other associated data. This user pointer is not copied with
36998d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala * copy_camera_metadata, and is unaffected by append or any other methods.
37098d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala */
37198d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville TalvalaANDROID_API
37298d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvalaint set_camera_metadata_user_pointer(camera_metadata_t *dst, void* user);
37398d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala
37498d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala/**
37598d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala * Retrieve user pointer in buffer. Returns NULL in user if
37698d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala * set_camera_metadata_user_pointer has not been called with this buffer.
37798d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala */
37898d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville TalvalaANDROID_API
37998d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvalaint get_camera_metadata_user_pointer(camera_metadata_t *dst, void** user);
38098d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala
38198d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala/**
382d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Retrieve human-readable name of section the tag is in. Returns NULL if
383d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * no such tag is defined. Returns NULL for tags in the vendor section, unless
384d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * set_vendor_tag_query_ops() has been used.
385d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
386d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
387d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaconst char *get_camera_metadata_section_name(uint32_t tag);
388d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
389d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
390d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Retrieve human-readable name of tag (not including section). Returns NULL if
391d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * no such tag is defined. Returns NULL for tags in the vendor section, unless
392d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * set_vendor_tag_query_ops() has been used.
393d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
394d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
395d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaconst char *get_camera_metadata_tag_name(uint32_t tag);
396d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
397d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
398d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Retrieve the type of a tag. Returns -1 if no such tag is defined. Returns -1
399d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * for tags in the vendor section, unless set_vendor_tag_query_ops() has been
400d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * used.
401d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
402d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
403d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaint get_camera_metadata_tag_type(uint32_t tag);
404d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
405d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
406d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Set up vendor-specific tag query methods. These are needed to properly add
407d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * entries with vendor-specified tags and to use the
408d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * get_camera_metadata_section_name, _tag_name, and _tag_type methods with
409d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * vendor tags. Returns 0 on success.
410d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
41194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvalatypedef struct vendor_tag_query_ops vendor_tag_query_ops_t;
41294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvalastruct vendor_tag_query_ops {
413d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    /**
414d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * Get vendor section name for a vendor-specified entry tag. Only called for
415d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * tags >= 0x80000000. The section name must start with the name of the
416d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * vendor in the Java package style. For example, CameraZoom inc must prefix
417d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * their sections with "com.camerazoom." Must return NULL if the tag is
418d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * outside the bounds of vendor-defined sections.
419d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     */
42094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala    const char *(*get_camera_vendor_section_name)(
42194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala        const vendor_tag_query_ops_t *v,
42294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala        uint32_t tag);
423d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    /**
424d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * Get tag name for a vendor-specified entry tag. Only called for tags >=
425d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * 0x80000000. Must return NULL if the tag is outside the bounds of
426d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * vendor-defined sections.
427d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     */
42894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala    const char *(*get_camera_vendor_tag_name)(
42994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala        const vendor_tag_query_ops_t *v,
43094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala        uint32_t tag);
431d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    /**
432d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * Get tag type for a vendor-specified entry tag. Only called for tags >=
433d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * 0x80000000. Must return -1 if the tag is outside the bounds of
434d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     * vendor-defined sections.
435d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala     */
43694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala    int (*get_camera_vendor_tag_type)(
43794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala        const vendor_tag_query_ops_t *v,
43894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala        uint32_t tag);
43994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala};
440d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
441d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
442d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaint set_camera_metadata_vendor_tag_ops(const vendor_tag_query_ops_t *query_ops);
443d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
444d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/**
445d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Print fields in the metadata to the log.
446d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * verbosity = 0: Only tag entry information
447d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * verbosity = 1: Tag entry information plus at most 16 data values
448d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * verbosity = 2: All information
449d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
450d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API
451d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalavoid dump_camera_metadata(const camera_metadata_t *metadata,
45294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala        int fd,
453d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        int verbosity);
454d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
4551d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvala/**
4561d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvala * Print fields in the metadata to the log; adds indentation parameter, which
4571d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvala * specifies the number of spaces to insert before each line of the dump
4581d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvala */
4591d27e5b8a575620bb64406289c7c229662de92caEino-Ville TalvalaANDROID_API
4601d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvalavoid dump_indented_camera_metadata(const camera_metadata_t *metadata,
4611d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvala        int fd,
4621d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvala        int verbosity,
4631d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvala        int indentation);
4641d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvala
465d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#ifdef __cplusplus
466d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
467d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#endif
468d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
469d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#endif
470