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" 21cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala#include <utils/String8.h> 22cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala#include <utils/Vector.h> 23cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 24cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalanamespace android { 25e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkinclass Parcel; 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 /** 533b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * Get reference to the underlying metadata buffer. Ownership remains with 543b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * the CameraMetadata object, but non-const CameraMetadata methods will not 553b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * work until unlock() is called. Note that the lock has nothing to do with 563b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * thread-safety, it simply prevents the camera_metadata_t pointer returned 573b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * here from being accidentally invalidated by CameraMetadata operations. 583b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala */ 593b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala const camera_metadata_t* getAndLock(); 603b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala 613b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala /** 623b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * Unlock the CameraMetadata for use again. After this unlock, the pointer 633b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * given from getAndLock() may no longer be used. The pointer passed out 643b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * from getAndLock must be provided to guarantee that the right object is 653b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala * being unlocked. 663b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala */ 673b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala status_t unlock(const camera_metadata_t *buffer); 683b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala 693b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala /** 70cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Release a raw metadata buffer to the caller. After this call, 71cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * CameraMetadata no longer references the buffer, and the caller takes 72cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * responsibility for freeing the raw metadata buffer (using 73cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * free_camera_metadata()), or for handing it to another CameraMetadata 74cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * instance. 75cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 76cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_t* release(); 77cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 78cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 79cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Clear the metadata buffer and free all storage used by it 80cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 81cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala void clear(); 82cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 83cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 84cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Acquire a raw metadata buffer from the caller. After this call, 85cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * the caller no longer owns the raw buffer, and must not free or manipulate it. 86cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * If CameraMetadata already contains metadata, it is freed. 87cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 88cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala void acquire(camera_metadata_t* buffer); 89cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 90cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 91cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Acquires raw buffer from other CameraMetadata object. After the call, the argument 92cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * object no longer has any metadata. 93cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 94cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala void acquire(CameraMetadata &other); 95cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 96cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 97cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Append metadata from another CameraMetadata object. 98cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 99cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t append(const CameraMetadata &other); 100cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 101cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 102fd6ecdd39bd83ea020f78b425e96310380d66c35Eino-Ville Talvala * Append metadata from a raw camera_metadata buffer 103fd6ecdd39bd83ea020f78b425e96310380d66c35Eino-Ville Talvala */ 104fd6ecdd39bd83ea020f78b425e96310380d66c35Eino-Ville Talvala status_t append(const camera_metadata* other); 105fd6ecdd39bd83ea020f78b425e96310380d66c35Eino-Ville Talvala 106fd6ecdd39bd83ea020f78b425e96310380d66c35Eino-Ville Talvala /** 107cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Number of metadata entries. 108cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 109cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala size_t entryCount() const; 110cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 111cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 112da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * Is the buffer empty (no entires) 113da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala */ 114da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala bool isEmpty() const; 115da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 116da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala /** 117cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Sort metadata buffer for faster find 118cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 119cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t sort(); 120cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 121cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 122cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Update metadata entry. Will create entry if it doesn't exist already, and 123cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * will reallocate the buffer if insufficient space exists. Overloaded for 124cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * the various types of valid data. 125cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 126cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 127cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const uint8_t *data, size_t data_count); 128cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 129cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const int32_t *data, size_t data_count); 130cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 131cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const float *data, size_t data_count); 132cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 133cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const int64_t *data, size_t data_count); 134cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 135cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const double *data, size_t data_count); 136cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 137cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const camera_metadata_rational_t *data, size_t data_count); 138cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, 139cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const String8 &string); 140cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 141cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala template<typename T> 142cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t update(uint32_t tag, Vector<T> data) { 143cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return update(tag, data.array(), data.size()); 144cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 145cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 146cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 147fc42642ab78da5fe25bcbea7a568bf880268a9dcIgor Murashkin * Check if a metadata entry exists for a given tag id 148fc42642ab78da5fe25bcbea7a568bf880268a9dcIgor Murashkin * 149fc42642ab78da5fe25bcbea7a568bf880268a9dcIgor Murashkin */ 150fc42642ab78da5fe25bcbea7a568bf880268a9dcIgor Murashkin bool exists(uint32_t tag) const; 151fc42642ab78da5fe25bcbea7a568bf880268a9dcIgor Murashkin 152fc42642ab78da5fe25bcbea7a568bf880268a9dcIgor Murashkin /** 153cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Get metadata entry by tag id 154cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 155cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_entry find(uint32_t tag); 156cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 157cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 158cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Get metadata entry by tag id, with no editing 159cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 160cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_ro_entry find(uint32_t tag) const; 161cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 162cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 163cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Delete metadata entry by tag 164cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 165cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t erase(uint32_t tag); 166cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 167cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 168e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * Swap the underlying camera metadata between this and the other 169e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * metadata object. 170e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin */ 171e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin void swap(CameraMetadata &other); 172e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 173e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin /** 174cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Dump contents into FD for debugging. The verbosity levels are 175cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * 0: Tag entry information only, no data values 176cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * 1: Level 0 plus at most 16 data values per entry 177cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * 2: All information 178cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * 179cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * The indentation parameter sets the number of spaces to add to the start 180cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * each line of output. 181cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 182cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala void dump(int fd, int verbosity = 1, int indentation = 0) const; 183cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 184e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin /** 185e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * Serialization over Binder 186e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin */ 187e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 188e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin // Metadata object is unchanged when reading from parcel fails. 189e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin status_t readFromParcel(Parcel *parcel); 190e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin status_t writeToParcel(Parcel *parcel) const; 191e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 192e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin /** 193e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * Caller becomes the owner of the new metadata 194e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * 'const Parcel' doesnt prevent us from calling the read functions. 195e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * which is interesting since it changes the internal state 196e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * 197e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * NULL can be returned when no metadata was sent, OR if there was an issue 198e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * unpacking the serialized data (i.e. bad parcel or invalid structure). 199e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin */ 200e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin static status_t readFromParcel(const Parcel &parcel, 201e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin camera_metadata_t** out); 202e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin /** 203e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * Caller retains ownership of metadata 204e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin * - Write 2 (int32 + blob) args in the current position 205e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin */ 206e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin static status_t writeToParcel(Parcel &parcel, 207e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin const camera_metadata_t* metadata); 208e7ee7637747371635a85fedd24d2190bb1f38651Igor Murashkin 209cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala private: 210cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_t *mBuffer; 2113b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala bool mLocked; 212cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 213cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 214cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Check if tag has a given type 215cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 216cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t checkType(uint32_t tag, uint8_t expectedType); 217cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 218cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 219cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Base update entry method 220cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 2213b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala status_t updateImpl(uint32_t tag, const void *data, size_t data_count); 222cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 223cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala /** 224cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala * Resize metadata buffer if needed by reallocating it and copying it over. 225cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala */ 226cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t resizeIfNeeded(size_t extraEntries, size_t extraData); 227cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 228cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala}; 229cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 230cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala}; // namespace android 231cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 232cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala#endif 233