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> 23f260382cd29623ff49c6a230d07a7657919f0f89Ruben Brunk#include <system/camera_vendor_tags.h> 24d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 25d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#ifdef __cplusplus 26d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaextern "C" { 27d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#endif 28d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 29d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 30d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Tag hierarchy and enum definitions for camera_metadata_entry 31d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * ============================================================================= 32d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 33d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 34d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 35d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Main enum definitions are in a separate file to make it easy to 36d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * maintain 37d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 38d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#include "camera_metadata_tags.h" 39d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 40d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 41d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Enum range for each top-level category 42d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 43d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 44d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaextern unsigned int camera_metadata_section_bounds[ANDROID_SECTION_COUNT][2]; 45d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 46d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaextern const char *camera_metadata_section_names[ANDROID_SECTION_COUNT]; 47d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 48d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 49d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Type definitions for camera_metadata_entry 50d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * ============================================================================= 51d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 52d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaenum { 53d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala // Unsigned 8-bit integer (uint8_t) 54d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala TYPE_BYTE = 0, 55d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala // Signed 32-bit integer (int32_t) 56d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala TYPE_INT32 = 1, 57d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala // 32-bit float (float) 58d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala TYPE_FLOAT = 2, 59d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala // Signed 64-bit integer (int64_t) 60d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala TYPE_INT64 = 3, 61d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala // 64-bit float (double) 62d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala TYPE_DOUBLE = 4, 63d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala // A 64-bit fraction (camera_metadata_rational_t) 64d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala TYPE_RATIONAL = 5, 65d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala // Number of type fields 66d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala NUM_TYPES 67d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}; 68d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 69d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalatypedef struct camera_metadata_rational { 70d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int32_t numerator; 71d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int32_t denominator; 72d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} camera_metadata_rational_t; 73d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 74d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 75f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * A reference to a metadata entry in a buffer. 76f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * 77f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * The data union pointers point to the real data in the buffer, and can be 78f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * modified in-place if the count does not need to change. The count is the 79f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * number of entries in data of the entry's type, not a count of bytes. 80f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala */ 81f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvalatypedef struct camera_metadata_entry { 82f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t index; 83f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala uint32_t tag; 84f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala uint8_t type; 85f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t count; 86f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala union { 87f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala uint8_t *u8; 88f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int32_t *i32; 89f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala float *f; 90f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t *i64; 91f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala double *d; 92f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_rational_t *r; 93f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } data; 94f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala} camera_metadata_entry_t; 95f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 96f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala/** 972f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala * A read-only reference to a metadata entry in a buffer. Identical to 982f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala * camera_metadata_entry in layout 992f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala */ 1002f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvalatypedef struct camera_metadata_ro_entry { 1012f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala size_t index; 1022f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala uint32_t tag; 1032f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala uint8_t type; 1042f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala size_t count; 1052f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala union { 1062f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala const uint8_t *u8; 1072f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala const int32_t *i32; 1082f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala const float *f; 1092f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala const int64_t *i64; 1102f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala const double *d; 1112f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala const camera_metadata_rational_t *r; 1122f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala } data; 1132f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala} camera_metadata_ro_entry_t; 1142f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala 1152f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala/** 116d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Size in bytes of each entry type 117d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 118d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 119fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvalaextern const size_t camera_metadata_type_size[NUM_TYPES]; 120fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala 121fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala/** 122fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala * Human-readable name of each entry type 123fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala */ 124fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville TalvalaANDROID_API 125fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvalaextern const char* camera_metadata_type_names[NUM_TYPES]; 126d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 127d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 128d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Main definitions for the metadata entry and array structures 129d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * ============================================================================= 130d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 131d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 132d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 133d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * A packet of metadata. This is a list of metadata entries, each of which has 134d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * an integer tag to identify its meaning, 'type' and 'count' field, and the 135d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * data, which contains a 'count' number of entries of type 'type'. The packet 136d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * has a fixed capacity for entries and for extra data. A new entry uses up one 137d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * entry slot, and possibly some amount of data capacity; the function 138d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * calculate_camera_metadata_entry_data_size() provides the amount of data 139d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * capacity that would be used up by an entry. 140d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * 141f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * Entries are not sorted by default, and are not forced to be unique - multiple 142f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * entries with the same tag are allowed. The packet will not dynamically resize 143f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * when full. 144d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * 145d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * The packet is contiguous in memory, with size in bytes given by 146d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * get_camera_metadata_size(). Therefore, it can be copied safely with memcpy() 147d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * to a buffer of sufficient size. The copy_camera_metadata() function is 148d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * intended for eliminating unused capacity in the destination packet. 149d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 150d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalastruct camera_metadata; 151d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalatypedef struct camera_metadata camera_metadata_t; 152d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 153d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 154d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Functions for manipulating camera metadata 155d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * ============================================================================= 156d17641aec6446a250f0da6b6952bcb54ca54fc64Alex Ray * 157d17641aec6446a250f0da6b6952bcb54ca54fc64Alex Ray * NOTE: Unless otherwise specified, functions that return type "int" 158d17641aec6446a250f0da6b6952bcb54ca54fc64Alex Ray * return 0 on success, and non-0 value on error. 159d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 160d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 161d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 162d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Allocate a new camera_metadata structure, with some initial space for entries 163d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * and extra data. The entry_capacity is measured in entry counts, and 164d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * data_capacity in bytes. The resulting structure is all contiguous in memory, 165d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * and can be freed with free_camera_metadata(). 166d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 167d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 168d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalacamera_metadata_t *allocate_camera_metadata(size_t entry_capacity, 169d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t data_capacity); 170d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 171d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 1721450f7f45376976100d63d3b7f8a39c4dfd47553Zhijun He * Get the required alignment of a packet of camera metadata, which is the 1731450f7f45376976100d63d3b7f8a39c4dfd47553Zhijun He * maximal alignment of the embedded camera_metadata, camera_metadata_buffer_entry, 1741450f7f45376976100d63d3b7f8a39c4dfd47553Zhijun He * and camera_metadata_data. 1751450f7f45376976100d63d3b7f8a39c4dfd47553Zhijun He */ 1761450f7f45376976100d63d3b7f8a39c4dfd47553Zhijun HeANDROID_API 1771450f7f45376976100d63d3b7f8a39c4dfd47553Zhijun Hesize_t get_camera_metadata_alignment(); 1781450f7f45376976100d63d3b7f8a39c4dfd47553Zhijun He 1791450f7f45376976100d63d3b7f8a39c4dfd47553Zhijun He/** 180d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin * Allocate a new camera_metadata structure of size src_size. Copy the data, 181d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin * ignoring alignment, and then attempt validation. If validation 182d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin * fails, free the memory and return NULL. Otherwise return the pointer. 183d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin * 184d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin * The resulting pointer can be freed with free_camera_metadata(). 185d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin */ 186d1cecc16420d1e210b0643530e552e3427b2bab2Igor MurashkinANDROID_API 187d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkincamera_metadata_t *allocate_copy_camera_metadata_checked( 188d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin const camera_metadata_t *src, 189d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin size_t src_size); 190d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 191d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin/** 192d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Place a camera metadata structure into an existing buffer. Returns NULL if 193d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * the buffer is too small for the requested number of reserved entries and 194d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * bytes of data. The entry_capacity is measured in entry counts, and 195d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * data_capacity in bytes. If the buffer is larger than the required space, 196d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * unused space will be left at the end. If successful, returns a pointer to the 197d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * metadata header placed at the start of the buffer. It is the caller's 198d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * responsibility to free the original buffer; do not call 199d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * free_camera_metadata() with the returned pointer. 200d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 201d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 202d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalacamera_metadata_t *place_camera_metadata(void *dst, size_t dst_size, 203d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t entry_capacity, 204d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t data_capacity); 205d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 206d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 207d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Free a camera_metadata structure. Should only be used with structures 208d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * allocated with allocate_camera_metadata(). 209d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 210d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 211d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalavoid free_camera_metadata(camera_metadata_t *metadata); 212d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 213d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 214d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Calculate the buffer size needed for a metadata structure of entry_count 215d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * metadata entries, needing a total of data_count bytes of extra data storage. 216d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 217d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 218d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t calculate_camera_metadata_size(size_t entry_count, 219d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t data_count); 220d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 221d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 222d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get current size of entire metadata structure in bytes, including reserved 223d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * but unused space. 224d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 225d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 226d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_size(const camera_metadata_t *metadata); 227d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 228d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 229d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get size of entire metadata buffer in bytes, not including reserved but 230d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * unused space. This is the amount of space needed by copy_camera_metadata for 231d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * its dst buffer. 232d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 233d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 234d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_compact_size(const camera_metadata_t *metadata); 235d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 236d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 237d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get the current number of entries in the metadata packet. 23871fe0f87dd5339a93ab2f376ca50568d45de617cAlex Ray * 23971fe0f87dd5339a93ab2f376ca50568d45de617cAlex Ray * metadata packet must be valid, which can be checked before the call with 24071fe0f87dd5339a93ab2f376ca50568d45de617cAlex Ray * validate_camera_metadata_structure(). 241d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 242d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 243d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_entry_count(const camera_metadata_t *metadata); 244d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 245d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 246d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get the maximum number of entries that could fit in the metadata packet. 247d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 248d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 249d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_entry_capacity(const camera_metadata_t *metadata); 250d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 251d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 252d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get the current count of bytes used for value storage in the metadata packet. 253d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 254d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 255d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_data_count(const camera_metadata_t *metadata); 256d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 257d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 258d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get the maximum count of bytes that could be used for value storage in the 259d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * metadata packet. 260d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 261d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 262d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t get_camera_metadata_data_capacity(const camera_metadata_t *metadata); 263d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 264d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 265d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Copy a metadata structure to a memory buffer, compacting it along the 266d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * way. That is, in the copied structure, entry_count == entry_capacity, and 267d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * data_count == data_capacity. 268d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * 269d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * If dst_size > get_camera_metadata_compact_size(), the unused bytes are at the 270d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * end of the buffer. If dst_size < get_camera_metadata_compact_size(), returns 271d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * NULL. Otherwise returns a pointer to the metadata structure header placed at 272d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * the start of dst. 273d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * 274d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Since the buffer was not allocated by allocate_camera_metadata, the caller is 275d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * responsible for freeing the underlying buffer when needed; do not call 276d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * free_camera_metadata. 277d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 278d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 279d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalacamera_metadata_t *copy_camera_metadata(void *dst, size_t dst_size, 280d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const camera_metadata_t *src); 281d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 282d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 283d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin * Validate that a metadata is structurally sane. That is, its internal 284d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin * state is such that we won't get buffer overflows or run into other 285d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin * 'impossible' issues when calling the other API functions. 286d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin * 287d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin * This is useful in particular after copying the binary metadata blob 288d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin * from an untrusted source, since passing this check means the data is at least 289d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin * consistent. 290d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin * 291d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin * The expected_size argument is optional. 292d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin * 293d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin * Returns 0 on success. A non-0 value is returned on error. 294d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin */ 295d1cecc16420d1e210b0643530e552e3427b2bab2Igor MurashkinANDROID_API 296d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkinint validate_camera_metadata_structure(const camera_metadata_t *metadata, 297d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin const size_t *expected_size); 298d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 299d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin/** 300d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Append camera metadata in src to an existing metadata structure in dst. This 301d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * does not resize the destination structure, so if it is too small, a non-zero 30294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala * value is returned. On success, 0 is returned. Appending onto a sorted 30394c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala * structure results in a non-sorted combined structure. 304d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 305d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 306d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaint append_camera_metadata(camera_metadata_t *dst, const camera_metadata_t *src); 307d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 308d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 309fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala * Clone an existing metadata buffer, compacting along the way. This is 310fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala * equivalent to allocating a new buffer of the minimum needed size, then 311fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala * appending the buffer to be cloned into the new buffer. The resulting buffer 312fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala * can be freed with free_camera_metadata(). Returns NULL if cloning failed. 313fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala */ 314fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville TalvalaANDROID_API 3152f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvalacamera_metadata_t *clone_camera_metadata(const camera_metadata_t *src); 316fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala 317fd2588282491637c61ba828eeb69c9486d8aaeabEino-Ville Talvala/** 318d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Calculate the number of bytes of extra data a given metadata entry will take 319d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * up. That is, if entry of 'type' with a payload of 'data_count' values is 320d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * added, how much will the value returned by get_camera_metadata_data_count() 321d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * be increased? This value may be zero, if no extra data storage is needed. 322d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 323d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 324d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalasize_t calculate_camera_metadata_entry_data_size(uint8_t type, 325d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t data_count); 326d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 327d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 328d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Add a metadata entry to a metadata structure. Returns 0 if the addition 329d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * succeeded. Returns a non-zero value if there is insufficient reserved space 330d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * left to add the entry, or if the tag is unknown. data_count is the number of 331d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * entries in the data array of the tag's type, not a count of 332d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * bytes. Vendor-defined tags can not be added using this method, unless 33394c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala * set_vendor_tag_query_ops() has been called first. Entries are always added to 33494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala * the end of the structure (highest index), so after addition, a 33594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala * previously-sorted array will be marked as unsorted. 336d17641aec6446a250f0da6b6952bcb54ca54fc64Alex Ray * 337d17641aec6446a250f0da6b6952bcb54ca54fc64Alex Ray * Returns 0 on success. A non-0 value is returned on error. 338d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 339d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 340d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaint add_camera_metadata_entry(camera_metadata_t *dst, 341d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala uint32_t tag, 342d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const void *data, 343d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t data_count); 344d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 345d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 346f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * Sort the metadata buffer for fast searching. If already marked as sorted, 347f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * does nothing. Adding or appending entries to the buffer will place the buffer 348f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * back into an unsorted state. 349d17641aec6446a250f0da6b6952bcb54ca54fc64Alex Ray * 350d17641aec6446a250f0da6b6952bcb54ca54fc64Alex Ray * Returns 0 on success. A non-0 value is returned on error. 35194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala */ 35294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville TalvalaANDROID_API 35394c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvalaint sort_camera_metadata(camera_metadata_t *dst); 35494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 35594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala/** 356f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * Get metadata entry at position index in the metadata buffer. 35771fe0f87dd5339a93ab2f376ca50568d45de617cAlex Ray * Index must be less than entry count, which is returned by 35871fe0f87dd5339a93ab2f376ca50568d45de617cAlex Ray * get_camera_metadata_entry_count(). 359d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * 360f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * src and index are inputs; the passed-in entry is updated with the details of 361f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * the entry. The data pointer points to the real data in the buffer, and can be 362f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * updated as long as the data count does not change. 36371fe0f87dd5339a93ab2f376ca50568d45de617cAlex Ray * 36471fe0f87dd5339a93ab2f376ca50568d45de617cAlex Ray * Returns 0 on success. A non-0 value is returned on error. 365d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 366d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 367d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaint get_camera_metadata_entry(camera_metadata_t *src, 368f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t index, 369f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry_t *entry); 370d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 371d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 37271fe0f87dd5339a93ab2f376ca50568d45de617cAlex Ray * Get metadata entry at position index, but disallow editing the data. 37371fe0f87dd5339a93ab2f376ca50568d45de617cAlex Ray */ 37471fe0f87dd5339a93ab2f376ca50568d45de617cAlex RayANDROID_API 37571fe0f87dd5339a93ab2f376ca50568d45de617cAlex Rayint get_camera_metadata_ro_entry(const camera_metadata_t *src, 37671fe0f87dd5339a93ab2f376ca50568d45de617cAlex Ray size_t index, 37771fe0f87dd5339a93ab2f376ca50568d45de617cAlex Ray camera_metadata_ro_entry_t *entry); 37871fe0f87dd5339a93ab2f376ca50568d45de617cAlex Ray 37971fe0f87dd5339a93ab2f376ca50568d45de617cAlex Ray/** 38094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala * Find an entry with given tag value. If not found, returns -ENOENT. Otherwise, 381f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * returns entry contents like get_camera_metadata_entry. 38294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala * 383f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * If multiple entries with the same tag exist, does not have any guarantees on 384f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * which is returned. To speed up searching for tags, sort the metadata 385f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * structure first by calling sort_camera_metadata(). 38694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala */ 38794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville TalvalaANDROID_API 38894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvalaint find_camera_metadata_entry(camera_metadata_t *src, 38994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala uint32_t tag, 390f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry_t *entry); 391f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 392f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala/** 3932f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala * Find an entry with given tag value, but disallow editing the data 3942f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala */ 3952f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville TalvalaANDROID_API 3962f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvalaint find_camera_metadata_ro_entry(const camera_metadata_t *src, 3972f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala uint32_t tag, 3982f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala camera_metadata_ro_entry_t *entry); 3992f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala 4002f4aca6526bbbaa9069f2683cdc60c0453a22055Eino-Ville Talvala/** 401f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * Delete an entry at given index. This is an expensive operation, since it 402f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * requires repacking entries and possibly entry data. This also invalidates any 403f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * existing camera_metadata_entry.data pointers to this buffer. Sorting is 404f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * maintained. 405f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala */ 406f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville TalvalaANDROID_API 407f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvalaint delete_camera_metadata_entry(camera_metadata_t *dst, 408f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t index); 409f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 410f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala/** 411f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * Updates a metadata entry with new data. If the data size is changing, may 412f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * need to adjust the data array, making this an O(N) operation. If the data 413f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * size is the same or still fits in the entry space, this is O(1). Maintains 414f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * sorting, but invalidates camera_metadata_entry instances that point to the 415f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * updated entry. If a non-NULL value is passed in to entry, the entry structure 416f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * is updated to match the new buffer state. Returns a non-zero value if there 417f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala * is no room for the new data in the buffer. 418f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala */ 419f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville TalvalaANDROID_API 420f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvalaint update_camera_metadata_entry(camera_metadata_t *dst, 421f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t index, 422f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala const void *data, 423f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t data_count, 424f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry_t *updated_entry); 42594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 42694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala/** 427d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Retrieve human-readable name of section the tag is in. Returns NULL if 428d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * no such tag is defined. Returns NULL for tags in the vendor section, unless 429d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * set_vendor_tag_query_ops() has been used. 430d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 431d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 432d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaconst char *get_camera_metadata_section_name(uint32_t tag); 433d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 434d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 435d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Retrieve human-readable name of tag (not including section). Returns NULL if 436d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * no such tag is defined. Returns NULL for tags in the vendor section, unless 437d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * set_vendor_tag_query_ops() has been used. 438d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 439d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 440d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaconst char *get_camera_metadata_tag_name(uint32_t tag); 441d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 442d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 443d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Retrieve the type of a tag. Returns -1 if no such tag is defined. Returns -1 444d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * for tags in the vendor section, unless set_vendor_tag_query_ops() has been 445d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * used. 446d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 447d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 448d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaint get_camera_metadata_tag_type(uint32_t tag); 449d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 450d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 451d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Set up vendor-specific tag query methods. These are needed to properly add 452d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * entries with vendor-specified tags and to use the 453d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * get_camera_metadata_section_name, _tag_name, and _tag_type methods with 454d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * vendor tags. Returns 0 on success. 455f260382cd29623ff49c6a230d07a7657919f0f89Ruben Brunk * 4569c13e191ea2d9622d00621d6acb009a9a759dc92Ruben Brunk * **DEPRECATED** - Please use vendor_tag_ops defined in camera_vendor_tags.h 4579c13e191ea2d9622d00621d6acb009a9a759dc92Ruben Brunk * instead. 458d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 45994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvalatypedef struct vendor_tag_query_ops vendor_tag_query_ops_t; 46094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvalastruct vendor_tag_query_ops { 461d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala /** 462d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get vendor section name for a vendor-specified entry tag. Only called for 463d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * tags >= 0x80000000. The section name must start with the name of the 464d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * vendor in the Java package style. For example, CameraZoom inc must prefix 465d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * their sections with "com.camerazoom." Must return NULL if the tag is 466d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * outside the bounds of vendor-defined sections. 467d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 46894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala const char *(*get_camera_vendor_section_name)( 46994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala const vendor_tag_query_ops_t *v, 47094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala uint32_t tag); 471d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala /** 472d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get tag name for a vendor-specified entry tag. Only called for tags >= 473d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * 0x80000000. Must return NULL if the tag is outside the bounds of 474d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * vendor-defined sections. 475d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 47694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala const char *(*get_camera_vendor_tag_name)( 47794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala const vendor_tag_query_ops_t *v, 47894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala uint32_t tag); 479d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala /** 480d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Get tag type for a vendor-specified entry tag. Only called for tags >= 481d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * 0x80000000. Must return -1 if the tag is outside the bounds of 482d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * vendor-defined sections. 483d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 48494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala int (*get_camera_vendor_tag_type)( 48594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala const vendor_tag_query_ops_t *v, 48694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala uint32_t tag); 48703486956904a461e2b9ea368ecf355e40cbea17aAlexander Ray /** 48803486956904a461e2b9ea368ecf355e40cbea17aAlexander Ray * Get the number of vendor tags supported on this platform. Used to 48903486956904a461e2b9ea368ecf355e40cbea17aAlexander Ray * calculate the size of buffer needed for holding the array of all tags 49003486956904a461e2b9ea368ecf355e40cbea17aAlexander Ray * returned by get_camera_vendor_tags(). 49103486956904a461e2b9ea368ecf355e40cbea17aAlexander Ray */ 49203486956904a461e2b9ea368ecf355e40cbea17aAlexander Ray int (*get_camera_vendor_tag_count)( 49303486956904a461e2b9ea368ecf355e40cbea17aAlexander Ray const vendor_tag_query_ops_t *v); 49403486956904a461e2b9ea368ecf355e40cbea17aAlexander Ray /** 49503486956904a461e2b9ea368ecf355e40cbea17aAlexander Ray * Fill an array with all the supported vendor tags on this platform. 49603486956904a461e2b9ea368ecf355e40cbea17aAlexander Ray * get_camera_vendor_tag_count() returns the number of tags supported, and 49703486956904a461e2b9ea368ecf355e40cbea17aAlexander Ray * tag_array should be allocated with enough space to hold all of the tags. 49803486956904a461e2b9ea368ecf355e40cbea17aAlexander Ray */ 49903486956904a461e2b9ea368ecf355e40cbea17aAlexander Ray void (*get_camera_vendor_tags)( 50003486956904a461e2b9ea368ecf355e40cbea17aAlexander Ray const vendor_tag_query_ops_t *v, 50103486956904a461e2b9ea368ecf355e40cbea17aAlexander Ray uint32_t *tag_array); 50294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala}; 503d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 504f260382cd29623ff49c6a230d07a7657919f0f89Ruben Brunk/** 5059c13e191ea2d9622d00621d6acb009a9a759dc92Ruben Brunk * **DEPRECATED** - This should only be used by the camera framework. Camera 5069c13e191ea2d9622d00621d6acb009a9a759dc92Ruben Brunk * metadata will transition to using vendor_tag_ops defined in 507f260382cd29623ff49c6a230d07a7657919f0f89Ruben Brunk * camera_vendor_tags.h instead. 508f260382cd29623ff49c6a230d07a7657919f0f89Ruben Brunk */ 509d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 510d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalaint set_camera_metadata_vendor_tag_ops(const vendor_tag_query_ops_t *query_ops); 511d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 512d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/** 513d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Print fields in the metadata to the log. 514d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * verbosity = 0: Only tag entry information 515d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * verbosity = 1: Tag entry information plus at most 16 data values 516d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * verbosity = 2: All information 517d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */ 518d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaANDROID_API 519d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalavoid dump_camera_metadata(const camera_metadata_t *metadata, 52094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala int fd, 521d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int verbosity); 522d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 5231d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvala/** 5241d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvala * Print fields in the metadata to the log; adds indentation parameter, which 5251d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvala * specifies the number of spaces to insert before each line of the dump 5261d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvala */ 5271d27e5b8a575620bb64406289c7c229662de92caEino-Ville TalvalaANDROID_API 5281d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvalavoid dump_indented_camera_metadata(const camera_metadata_t *metadata, 5291d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvala int fd, 5301d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvala int verbosity, 5311d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvala int indentation); 5321d27e5b8a575620bb64406289c7c229662de92caEino-Ville Talvala 533e572c2efab8edaae7c59aaa9fa06c44a6d4d3d35Igor Murashkin/** 534e572c2efab8edaae7c59aaa9fa06c44a6d4d3d35Igor Murashkin * Prints the specified tag value as a string. Only works for enum tags. 535e572c2efab8edaae7c59aaa9fa06c44a6d4d3d35Igor Murashkin * Returns 0 on success, -1 on failure. 536e572c2efab8edaae7c59aaa9fa06c44a6d4d3d35Igor Murashkin */ 537e572c2efab8edaae7c59aaa9fa06c44a6d4d3d35Igor MurashkinANDROID_API 538e572c2efab8edaae7c59aaa9fa06c44a6d4d3d35Igor Murashkinint camera_metadata_enum_snprint(uint32_t tag, 539e572c2efab8edaae7c59aaa9fa06c44a6d4d3d35Igor Murashkin uint32_t value, 540e572c2efab8edaae7c59aaa9fa06c44a6d4d3d35Igor Murashkin char *dst, 541e572c2efab8edaae7c59aaa9fa06c44a6d4d3d35Igor Murashkin size_t size); 542e572c2efab8edaae7c59aaa9fa06c44a6d4d3d35Igor Murashkin 543d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#ifdef __cplusplus 544d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 545d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#endif 546d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 547d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#endif 548