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