1cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala/* 2cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project 3cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * 4cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 5cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * you may not use this file except in compliance with the License. 6cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * You may obtain a copy of the License at 7cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * 8cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 9cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * 10cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 11cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 12cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * See the License for the specific language governing permissions and 14cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * limitations under the License. 15cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 16cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 172e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#ifndef ANDROID_SERVERS_CAMERA_CAMERA2METADATA_CPP 182e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala#define ANDROID_SERVERS_CAMERA_CAMERA2METADATA_CPP 19cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 20cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala#include "system/camera_metadata.h" 21cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala#include <utils/String8.h> 22cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala#include <utils/Vector.h> 23cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 24cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalanamespace android { 252e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvalanamespace camera2 { 26cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 27cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala/** 28cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * A convenience wrapper around the C-based camera_metadata_t library. 29cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 30cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalaclass CameraMetadata { 31cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala public: 32cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** Creates an empty object; best used when expecting to acquire contents 33cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * from elsewhere */ 34cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala CameraMetadata(); 35cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** Creates an object with space for entryCapacity entries, with 36cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * dataCapacity extra storage */ 37cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala CameraMetadata(size_t entryCapacity, size_t dataCapacity = 10); 38cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 39cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala ~CameraMetadata(); 40cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 41cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** Takes ownership of passed-in buffer */ 42cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala CameraMetadata(camera_metadata_t *buffer); 43cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** Clones the metadata */ 44cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala CameraMetadata(const CameraMetadata &other); 45cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 46cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 47cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Assignment clones metadata buffer. 48cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 49cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala CameraMetadata &operator=(const CameraMetadata &other); 50cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala CameraMetadata &operator=(const camera_metadata_t *buffer); 51cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 52cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 53cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Release a raw metadata buffer to the caller. After this call, 54cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * CameraMetadata no longer references the buffer, and the caller takes 55cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * responsibility for freeing the raw metadata buffer (using 56cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * free_camera_metadata()), or for handing it to another CameraMetadata 57cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * instance. 58cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 59cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_t* release(); 60cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 61cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 62cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Clear the metadata buffer and free all storage used by it 63cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 64cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala void clear(); 65cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 66cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 67cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Acquire a raw metadata buffer from the caller. After this call, 68cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * the caller no longer owns the raw buffer, and must not free or manipulate it. 69cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * If CameraMetadata already contains metadata, it is freed. 70cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 71cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala void acquire(camera_metadata_t* buffer); 72cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 73cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 74cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Acquires raw buffer from other CameraMetadata object. After the call, the argument 75cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * object no longer has any metadata. 76cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 77cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala void acquire(CameraMetadata &other); 78cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 79cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 80cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Append metadata from another CameraMetadata object. 81cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 82cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t append(const CameraMetadata &other); 83cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 84cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 85cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Number of metadata entries. 86cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 87cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala size_t entryCount() const; 88cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 89cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 90da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * Is the buffer empty (no entires) 91da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala */ 92da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala bool isEmpty() const; 93da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 94da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala /** 95cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Sort metadata buffer for faster find 96cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 97cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t sort(); 98cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 99cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 100cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Update metadata entry. Will create entry if it doesn't exist already, and 101cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * will reallocate the buffer if insufficient space exists. Overloaded for 102cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * the various types of valid data. 103cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 104cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 105cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const uint8_t *data, size_t data_count); 106cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 107cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const int32_t *data, size_t data_count); 108cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 109cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const float *data, size_t data_count); 110cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 111cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const int64_t *data, size_t data_count); 112cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 113cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const double *data, size_t data_count); 114cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 115cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const camera_metadata_rational_t *data, size_t data_count); 116cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 117cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const String8 &string); 118cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 119cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala template<typename T> 120cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, Vector<T> data) { 121cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return update(tag, data.array(), data.size()); 122cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 123cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 124cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 125cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Get metadata entry by tag id 126cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 127cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_entry find(uint32_t tag); 128cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 129cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 130cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Get metadata entry by tag id, with no editing 131cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 132cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_ro_entry find(uint32_t tag) const; 133cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 134cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 135cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Delete metadata entry by tag 136cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 137cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t erase(uint32_t tag); 138cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 139cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 140cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Dump contents into FD for debugging. The verbosity levels are 141cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * 0: Tag entry information only, no data values 142cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * 1: Level 0 plus at most 16 data values per entry 143cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * 2: All information 144cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * 145cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * The indentation parameter sets the number of spaces to add to the start 146cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * each line of output. 147cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 148cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala void dump(int fd, int verbosity = 1, int indentation = 0) const; 149cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 150cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala private: 151cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_t *mBuffer; 152cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 153cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 154cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Check if tag has a given type 155cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 156cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t checkType(uint32_t tag, uint8_t expectedType); 157cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 158cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 159cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Base update entry method 160cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 161cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, const void *data, size_t data_count); 162cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 163cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 164cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Resize metadata buffer if needed by reallocating it and copying it over. 165cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 166cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t resizeIfNeeded(size_t extraEntries, size_t extraData); 167cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 168cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala}; 169cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 1702e19c3c02957208371cdd491e6342ea7ddb440d9Eino-Ville Talvala}; // namespace camera2 171cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala}; // namespace android 172cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 173cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala#endif 174