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 177efa520c76e6a1f6b3146404cc6aca5a8353583aIgor Murashkin#ifndef ANDROID_CLIENT_CAMERA2_CAMERAMETADATA_CPP 187efa520c76e6a1f6b3146404cc6aca5a8353583aIgor Murashkin#define ANDROID_CLIENT_CAMERA2_CAMERAMETADATA_CPP 19cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 20cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala#include "system/camera_metadata.h" 214d453830b6a8fb7571a88a9a241eabd50a483c44Eino-Ville Talvala 22cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala#include <utils/String8.h> 23cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala#include <utils/Vector.h> 24d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala#include <binder/Parcelable.h> 25cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 26cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalanamespace android { 27cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 284d453830b6a8fb7571a88a9a241eabd50a483c44Eino-Ville Talvalaclass VendorTagDescriptor; 294d453830b6a8fb7571a88a9a241eabd50a483c44Eino-Ville Talvala 30cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala/** 31cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * A convenience wrapper around the C-based camera_metadata_t library. 32cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 33d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalaclass CameraMetadata: public Parcelable { 34cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala public: 35cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** Creates an empty object; best used when expecting to acquire contents 36cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * from elsewhere */ 37cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala CameraMetadata(); 38cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** Creates an object with space for entryCapacity entries, with 39cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * dataCapacity extra storage */ 40cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala CameraMetadata(size_t entryCapacity, size_t dataCapacity = 10); 41cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 42cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala ~CameraMetadata(); 43cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 44cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** Takes ownership of passed-in buffer */ 45cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala CameraMetadata(camera_metadata_t *buffer); 46cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** Clones the metadata */ 47cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala CameraMetadata(const CameraMetadata &other); 48cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 49cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 50cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Assignment clones metadata buffer. 51cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 52cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala CameraMetadata &operator=(const CameraMetadata &other); 53cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala CameraMetadata &operator=(const camera_metadata_t *buffer); 54cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 55cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 563b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * Get reference to the underlying metadata buffer. Ownership remains with 573b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * the CameraMetadata object, but non-const CameraMetadata methods will not 583b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * work until unlock() is called. Note that the lock has nothing to do with 593b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * thread-safety, it simply prevents the camera_metadata_t pointer returned 603b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * here from being accidentally invalidated by CameraMetadata operations. 613b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala */ 6254298b338cf9f782f2ac681a15e6cbbb99649350Yin-Chia Yeh const camera_metadata_t* getAndLock() const; 633b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala 643b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala /** 653b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * Unlock the CameraMetadata for use again. After this unlock, the pointer 663b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * given from getAndLock() may no longer be used. The pointer passed out 673b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * from getAndLock must be provided to guarantee that the right object is 683b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * being unlocked. 693b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala */ 708aac03f4d6c66749803d5708086ba5f509aa88c6Yin-Chia Yeh status_t unlock(const camera_metadata_t *buffer) const; 713b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala 723b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala /** 73cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Release a raw metadata buffer to the caller. After this call, 74cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * CameraMetadata no longer references the buffer, and the caller takes 75cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * responsibility for freeing the raw metadata buffer (using 76cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * free_camera_metadata()), or for handing it to another CameraMetadata 77cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * instance. 78cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 79cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_t* release(); 80cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 81cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 82cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Clear the metadata buffer and free all storage used by it 83cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 84cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala void clear(); 85cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 86cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 87cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Acquire a raw metadata buffer from the caller. After this call, 88cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * the caller no longer owns the raw buffer, and must not free or manipulate it. 89cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * If CameraMetadata already contains metadata, it is freed. 90cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 91cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala void acquire(camera_metadata_t* buffer); 92cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 93cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 94cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Acquires raw buffer from other CameraMetadata object. After the call, the argument 95cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * object no longer has any metadata. 96cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 97cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala void acquire(CameraMetadata &other); 98cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 99cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 100cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Append metadata from another CameraMetadata object. 101cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 102cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t append(const CameraMetadata &other); 103cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 104cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 105fd6ecdd39bd83ea020f78b425e96310380d66c35Eino-Ville Talvala * Append metadata from a raw camera_metadata buffer 106fd6ecdd39bd83ea020f78b425e96310380d66c35Eino-Ville Talvala */ 107fd6ecdd39bd83ea020f78b425e96310380d66c35Eino-Ville Talvala status_t append(const camera_metadata* other); 108fd6ecdd39bd83ea020f78b425e96310380d66c35Eino-Ville Talvala 109fd6ecdd39bd83ea020f78b425e96310380d66c35Eino-Ville Talvala /** 110cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Number of metadata entries. 111cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 112cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala size_t entryCount() const; 113cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 114cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 115da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * Is the buffer empty (no entires) 116da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala */ 117da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala bool isEmpty() const; 118da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 119da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala /** 120cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Sort metadata buffer for faster find 121cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 122cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t sort(); 123cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 124cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 125cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Update metadata entry. Will create entry if it doesn't exist already, and 126cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * will reallocate the buffer if insufficient space exists. Overloaded for 127cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * the various types of valid data. 128cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 129cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 130cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const uint8_t *data, size_t data_count); 131cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 132cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const int32_t *data, size_t data_count); 133cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 134cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const float *data, size_t data_count); 135cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 136cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const int64_t *data, size_t data_count); 137cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 138cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const double *data, size_t data_count); 139cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 140cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const camera_metadata_rational_t *data, size_t data_count); 141cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 142cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const String8 &string); 1434d453830b6a8fb7571a88a9a241eabd50a483c44Eino-Ville Talvala status_t update(const camera_metadata_ro_entry &entry); 1444d453830b6a8fb7571a88a9a241eabd50a483c44Eino-Ville Talvala 145cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 146cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala template<typename T> 147cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, Vector<T> data) { 148cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return update(tag, data.array(), data.size()); 149cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 150cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 151cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 152fc42642ab78da5fe25bcbea7a568bf880268a9dcIgor Murashkin * Check if a metadata entry exists for a given tag id 153fc42642ab78da5fe25bcbea7a568bf880268a9dcIgor Murashkin * 154fc42642ab78da5fe25bcbea7a568bf880268a9dcIgor Murashkin */ 155fc42642ab78da5fe25bcbea7a568bf880268a9dcIgor Murashkin bool exists(uint32_t tag) const; 156fc42642ab78da5fe25bcbea7a568bf880268a9dcIgor Murashkin 157fc42642ab78da5fe25bcbea7a568bf880268a9dcIgor Murashkin /** 158cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Get metadata entry by tag id 159cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 160cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_entry find(uint32_t tag); 161cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 162cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 163cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Get metadata entry by tag id, with no editing 164cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 165cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_ro_entry find(uint32_t tag) const; 166cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 167cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 168cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Delete metadata entry by tag 169cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 170cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t erase(uint32_t tag); 171cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 172cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 173e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * Swap the underlying camera metadata between this and the other 174e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * metadata object. 175e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin */ 176e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin void swap(CameraMetadata &other); 177e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 178e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin /** 179cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Dump contents into FD for debugging. The verbosity levels are 180cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * 0: Tag entry information only, no data values 181cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * 1: Level 0 plus at most 16 data values per entry 182cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * 2: All information 183cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * 184cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * The indentation parameter sets the number of spaces to add to the start 185cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * each line of output. 186cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 187cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala void dump(int fd, int verbosity = 1, int indentation = 0) const; 188cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 189e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin /** 190e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * Serialization over Binder 191e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin */ 192e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 193e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin // Metadata object is unchanged when reading from parcel fails. 194d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala virtual status_t readFromParcel(const Parcel *parcel) override; 195d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala virtual status_t writeToParcel(Parcel *parcel) const override; 196e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 197e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin /** 198e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * Caller becomes the owner of the new metadata 199e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * 'const Parcel' doesnt prevent us from calling the read functions. 200e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * which is interesting since it changes the internal state 201e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * 202e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * NULL can be returned when no metadata was sent, OR if there was an issue 203e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * unpacking the serialized data (i.e. bad parcel or invalid structure). 204e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin */ 205e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin static status_t readFromParcel(const Parcel &parcel, 206e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin camera_metadata_t** out); 207e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin /** 208e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * Caller retains ownership of metadata 209e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * - Write 2 (int32 + blob) args in the current position 210e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin */ 211e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin static status_t writeToParcel(Parcel &parcel, 212e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin const camera_metadata_t* metadata); 213e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 2144d453830b6a8fb7571a88a9a241eabd50a483c44Eino-Ville Talvala /** 2154d453830b6a8fb7571a88a9a241eabd50a483c44Eino-Ville Talvala * Find tag id for a given tag name, also checking vendor tags if available. 2164d453830b6a8fb7571a88a9a241eabd50a483c44Eino-Ville Talvala * On success, returns OK and writes the tag id into tag. 2174d453830b6a8fb7571a88a9a241eabd50a483c44Eino-Ville Talvala * 2184d453830b6a8fb7571a88a9a241eabd50a483c44Eino-Ville Talvala * This is a slow method. 2194d453830b6a8fb7571a88a9a241eabd50a483c44Eino-Ville Talvala */ 2204d453830b6a8fb7571a88a9a241eabd50a483c44Eino-Ville Talvala static status_t getTagFromName(const char *name, 2214d453830b6a8fb7571a88a9a241eabd50a483c44Eino-Ville Talvala const VendorTagDescriptor* vTags, uint32_t *tag); 2224d453830b6a8fb7571a88a9a241eabd50a483c44Eino-Ville Talvala 223cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala private: 224cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_t *mBuffer; 22554298b338cf9f782f2ac681a15e6cbbb99649350Yin-Chia Yeh mutable bool mLocked; 226cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 227cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 228cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Check if tag has a given type 229cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 230cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t checkType(uint32_t tag, uint8_t expectedType); 231cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 232cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 233cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Base update entry method 234cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 2353b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala status_t updateImpl(uint32_t tag, const void *data, size_t data_count); 236cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 237cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 238cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Resize metadata buffer if needed by reallocating it and copying it over. 239cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 240cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t resizeIfNeeded(size_t extraEntries, size_t extraData); 241cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 242cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala}; 243cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 244d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace hardware { 245d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace camera2 { 246d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace impl { 247d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalausing ::android::CameraMetadata; 248d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalatypedef CameraMetadata CameraMetadataNative; 249d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} 250d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} 251d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} 252d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 253d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} // namespace android 254cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 255cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala#endif 256