CameraMetadata.cpp revision e2d1e3d0436aec645739c65e6d3131dd814f40a1
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 17e2d1e3d0436aec645739c65e6d3131dd814f40a1Igor Murashkin// #define LOG_NDEBUG 0 18e2d1e3d0436aec645739c65e6d3131dd814f40a1Igor Murashkin 194bb8118816874c696d9f1adab48490df1da365f7Eino-Ville Talvala#define LOG_TAG "Camera2-Metadata" 20cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala#include <utils/Log.h> 21cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala#include <utils/Errors.h> 22cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 237efa520c76e6a1f6b3146404cc6aca5a8353583aIgor Murashkin#include <camera/CameraMetadata.h> 24cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 25cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalanamespace android { 26cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 27cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville TalvalaCameraMetadata::CameraMetadata() : 283b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala mBuffer(NULL), mLocked(false) { 29cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 30cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 313b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville TalvalaCameraMetadata::CameraMetadata(size_t entryCapacity, size_t dataCapacity) : 323b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala mLocked(false) 33cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala{ 34cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mBuffer = allocate_camera_metadata(entryCapacity, dataCapacity); 35cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 36cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 373b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville TalvalaCameraMetadata::CameraMetadata(const CameraMetadata &other) : 383b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala mLocked(false) { 39cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mBuffer = clone_camera_metadata(other.mBuffer); 40cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 41cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 423b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville TalvalaCameraMetadata::CameraMetadata(camera_metadata_t *buffer) : 433b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala mBuffer(NULL), mLocked(false) { 447efa520c76e6a1f6b3146404cc6aca5a8353583aIgor Murashkin acquire(buffer); 457efa520c76e6a1f6b3146404cc6aca5a8353583aIgor Murashkin} 467efa520c76e6a1f6b3146404cc6aca5a8353583aIgor Murashkin 47cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville TalvalaCameraMetadata &CameraMetadata::operator=(const CameraMetadata &other) { 48cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return operator=(other.mBuffer); 49cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 50cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 51cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville TalvalaCameraMetadata &CameraMetadata::operator=(const camera_metadata_t *buffer) { 523b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (mLocked) { 533b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: Assignment to a locked CameraMetadata!", __FUNCTION__); 543b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return *this; 553b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 563b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala 57cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (CC_LIKELY(buffer != mBuffer)) { 58cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_t *newBuffer = clone_camera_metadata(buffer); 59cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala clear(); 60cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mBuffer = newBuffer; 61cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 62cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return *this; 63cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 64cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 65cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville TalvalaCameraMetadata::~CameraMetadata() { 663b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala mLocked = false; 67cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala clear(); 68cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 69cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 703b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvalaconst camera_metadata_t* CameraMetadata::getAndLock() { 713b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala mLocked = true; 723b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return mBuffer; 733b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala} 743b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala 753b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvalastatus_t CameraMetadata::unlock(const camera_metadata_t *buffer) { 763b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (!mLocked) { 773b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: Can't unlock a non-locked CameraMetadata!", __FUNCTION__); 783b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return INVALID_OPERATION; 793b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 803b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (buffer != mBuffer) { 813b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: Can't unlock CameraMetadata with wrong pointer!", 823b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala __FUNCTION__); 833b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return BAD_VALUE; 843b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 853b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala mLocked = false; 863b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return OK; 873b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala} 883b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala 89cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalacamera_metadata_t* CameraMetadata::release() { 903b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (mLocked) { 913b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: CameraMetadata is locked", __FUNCTION__); 923b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return NULL; 933b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 94cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_t *released = mBuffer; 95cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mBuffer = NULL; 96cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return released; 97cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 98cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 99cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalavoid CameraMetadata::clear() { 1003b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (mLocked) { 1013b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: CameraMetadata is locked", __FUNCTION__); 1023b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return; 1033b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 104cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (mBuffer) { 105cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala free_camera_metadata(mBuffer); 106cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mBuffer = NULL; 107cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 108cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 109cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 110cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalavoid CameraMetadata::acquire(camera_metadata_t *buffer) { 1113b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (mLocked) { 1123b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: CameraMetadata is locked", __FUNCTION__); 1133b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return; 1143b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 115cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala clear(); 116cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mBuffer = buffer; 117e2d1e3d0436aec645739c65e6d3131dd814f40a1Igor Murashkin 118e2d1e3d0436aec645739c65e6d3131dd814f40a1Igor Murashkin ALOGE_IF(validate_camera_metadata_structure(mBuffer, /*size*/NULL) != OK, 119e2d1e3d0436aec645739c65e6d3131dd814f40a1Igor Murashkin "%s: Failed to validate metadata structure %p", 120e2d1e3d0436aec645739c65e6d3131dd814f40a1Igor Murashkin __FUNCTION__, buffer); 121cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 122cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 123cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalavoid CameraMetadata::acquire(CameraMetadata &other) { 1243b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (mLocked) { 1253b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: CameraMetadata is locked", __FUNCTION__); 1263b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return; 1273b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 128cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala acquire(other.release()); 129cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 130cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 131cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalastatus_t CameraMetadata::append(const CameraMetadata &other) { 1323b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (mLocked) { 1333b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: CameraMetadata is locked", __FUNCTION__); 1343b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return INVALID_OPERATION; 1353b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 136cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return append_camera_metadata(mBuffer, other.mBuffer); 137cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 138cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 139cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalasize_t CameraMetadata::entryCount() const { 140cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return (mBuffer == NULL) ? 0 : 141cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala get_camera_metadata_entry_count(mBuffer); 142cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 143cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 144da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvalabool CameraMetadata::isEmpty() const { 145da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala return entryCount() == 0; 146da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala} 147da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 148cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalastatus_t CameraMetadata::sort() { 1493b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (mLocked) { 1503b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: CameraMetadata is locked", __FUNCTION__); 1513b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return INVALID_OPERATION; 1523b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 153cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return sort_camera_metadata(mBuffer); 154cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 155cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 156cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalastatus_t CameraMetadata::checkType(uint32_t tag, uint8_t expectedType) { 157cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala int tagType = get_camera_metadata_tag_type(tag); 158cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if ( CC_UNLIKELY(tagType == -1)) { 159cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala ALOGE("Update metadata entry: Unknown tag %d", tag); 160cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return INVALID_OPERATION; 161cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 162cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if ( CC_UNLIKELY(tagType != expectedType) ) { 163cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala ALOGE("Mismatched tag type when updating entry %s (%d) of type %s; " 164cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala "got type %s data instead ", 165cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala get_camera_metadata_tag_name(tag), tag, 166cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_type_names[tagType], 167cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_type_names[expectedType]); 168cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return INVALID_OPERATION; 169cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 170cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return OK; 171cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 172cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 173cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalastatus_t CameraMetadata::update(uint32_t tag, 174cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const int32_t *data, size_t data_count) { 175cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t res; 1763b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (mLocked) { 1773b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: CameraMetadata is locked", __FUNCTION__); 1783b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return INVALID_OPERATION; 1793b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 180cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if ( (res = checkType(tag, TYPE_INT32)) != OK) { 181cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return res; 182cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 1833b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return updateImpl(tag, (const void*)data, data_count); 184cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 185cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 186cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalastatus_t CameraMetadata::update(uint32_t tag, 187cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const uint8_t *data, size_t data_count) { 188cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t res; 1893b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (mLocked) { 1903b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: CameraMetadata is locked", __FUNCTION__); 1913b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return INVALID_OPERATION; 1923b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 193cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if ( (res = checkType(tag, TYPE_BYTE)) != OK) { 194cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return res; 195cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 1963b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return updateImpl(tag, (const void*)data, data_count); 197cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 198cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 199cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalastatus_t CameraMetadata::update(uint32_t tag, 200cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const float *data, size_t data_count) { 201cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t res; 2023b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (mLocked) { 2033b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: CameraMetadata is locked", __FUNCTION__); 2043b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return INVALID_OPERATION; 2053b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 206cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if ( (res = checkType(tag, TYPE_FLOAT)) != OK) { 207cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return res; 208cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 2093b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return updateImpl(tag, (const void*)data, data_count); 210cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 211cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 212cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalastatus_t CameraMetadata::update(uint32_t tag, 213cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const int64_t *data, size_t data_count) { 214cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t res; 2153b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (mLocked) { 2163b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: CameraMetadata is locked", __FUNCTION__); 2173b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return INVALID_OPERATION; 2183b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 219cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if ( (res = checkType(tag, TYPE_INT64)) != OK) { 220cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return res; 221cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 2223b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return updateImpl(tag, (const void*)data, data_count); 223cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 224cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 225cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalastatus_t CameraMetadata::update(uint32_t tag, 226cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const double *data, size_t data_count) { 227cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t res; 2283b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (mLocked) { 2293b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: CameraMetadata is locked", __FUNCTION__); 2303b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return INVALID_OPERATION; 2313b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 232cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if ( (res = checkType(tag, TYPE_DOUBLE)) != OK) { 233cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return res; 234cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 2353b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return updateImpl(tag, (const void*)data, data_count); 236cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 237cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 238cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalastatus_t CameraMetadata::update(uint32_t tag, 239cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const camera_metadata_rational_t *data, size_t data_count) { 240cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t res; 2413b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (mLocked) { 2423b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: CameraMetadata is locked", __FUNCTION__); 2433b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return INVALID_OPERATION; 2443b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 245cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if ( (res = checkType(tag, TYPE_RATIONAL)) != OK) { 246cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return res; 247cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 2483b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return updateImpl(tag, (const void*)data, data_count); 249cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 250cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 251cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalastatus_t CameraMetadata::update(uint32_t tag, 252cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala const String8 &string) { 253cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t res; 2543b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (mLocked) { 2553b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: CameraMetadata is locked", __FUNCTION__); 2563b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return INVALID_OPERATION; 2573b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 258cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if ( (res = checkType(tag, TYPE_BYTE)) != OK) { 259cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return res; 260cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 2613b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return updateImpl(tag, (const void*)string.string(), string.size()); 262cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 263cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 2643b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvalastatus_t CameraMetadata::updateImpl(uint32_t tag, const void *data, 265cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala size_t data_count) { 266cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t res; 2673b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (mLocked) { 2683b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: CameraMetadata is locked", __FUNCTION__); 2693b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return INVALID_OPERATION; 2703b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 271cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala int type = get_camera_metadata_tag_type(tag); 272cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (type == -1) { 273cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala ALOGE("%s: Tag %d not found", __FUNCTION__, tag); 274cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return BAD_VALUE; 275cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 276cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala size_t data_size = calculate_camera_metadata_entry_data_size(type, 277cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala data_count); 278cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 279cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala res = resizeIfNeeded(1, data_size); 280cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 281cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (res == OK) { 282cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_entry_t entry; 283cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala res = find_camera_metadata_entry(mBuffer, tag, &entry); 284cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (res == NAME_NOT_FOUND) { 285cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala res = add_camera_metadata_entry(mBuffer, 286cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala tag, data, data_count); 287cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } else if (res == OK) { 288cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala res = update_camera_metadata_entry(mBuffer, 289cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala entry.index, data, data_count, NULL); 290cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 291cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 292cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 293cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (res != OK) { 294cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala ALOGE("%s: Unable to update metadata entry %s.%s (%x): %s (%d)", 295cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala __FUNCTION__, get_camera_metadata_section_name(tag), 296cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala get_camera_metadata_tag_name(tag), tag, strerror(-res), res); 297cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 298e2d1e3d0436aec645739c65e6d3131dd814f40a1Igor Murashkin 299e2d1e3d0436aec645739c65e6d3131dd814f40a1Igor Murashkin IF_ALOGV() { 300e2d1e3d0436aec645739c65e6d3131dd814f40a1Igor Murashkin ALOGE_IF(validate_camera_metadata_structure(mBuffer, /*size*/NULL) != 301e2d1e3d0436aec645739c65e6d3131dd814f40a1Igor Murashkin OK, 302e2d1e3d0436aec645739c65e6d3131dd814f40a1Igor Murashkin 303e2d1e3d0436aec645739c65e6d3131dd814f40a1Igor Murashkin "%s: Failed to validate metadata structure after update %p", 304e2d1e3d0436aec645739c65e6d3131dd814f40a1Igor Murashkin __FUNCTION__, mBuffer); 305e2d1e3d0436aec645739c65e6d3131dd814f40a1Igor Murashkin } 306e2d1e3d0436aec645739c65e6d3131dd814f40a1Igor Murashkin 307cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return res; 308cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 309cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 310fc42642ab78da5fe25bcbea7a568bf880268a9dcIgor Murashkinbool CameraMetadata::exists(uint32_t tag) const { 311fc42642ab78da5fe25bcbea7a568bf880268a9dcIgor Murashkin camera_metadata_ro_entry entry; 312fc42642ab78da5fe25bcbea7a568bf880268a9dcIgor Murashkin return find_camera_metadata_ro_entry(mBuffer, tag, &entry) == 0; 313fc42642ab78da5fe25bcbea7a568bf880268a9dcIgor Murashkin} 314fc42642ab78da5fe25bcbea7a568bf880268a9dcIgor Murashkin 315cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalacamera_metadata_entry_t CameraMetadata::find(uint32_t tag) { 316cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t res; 317cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_entry entry; 3183b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (mLocked) { 3193b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: CameraMetadata is locked", __FUNCTION__); 3203b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala entry.count = 0; 3213b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return entry; 3223b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 323cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala res = find_camera_metadata_entry(mBuffer, tag, &entry); 324cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (CC_UNLIKELY( res != OK )) { 325cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala entry.count = 0; 326cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala entry.data.u8 = NULL; 327cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 328cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return entry; 329cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 330cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 331cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalacamera_metadata_ro_entry_t CameraMetadata::find(uint32_t tag) const { 332cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t res; 333cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_ro_entry entry; 334cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala res = find_camera_metadata_ro_entry(mBuffer, tag, &entry); 335cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (CC_UNLIKELY( res != OK )) { 336cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala entry.count = 0; 337cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala entry.data.u8 = NULL; 338cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 339cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return entry; 340cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 341cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 342cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalastatus_t CameraMetadata::erase(uint32_t tag) { 343cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_entry_t entry; 344cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala status_t res; 3453b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala if (mLocked) { 3463b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala ALOGE("%s: CameraMetadata is locked", __FUNCTION__); 3473b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala return INVALID_OPERATION; 3483b53bc9b41c262d22f094406e3751bc5a41ef2efEino-Ville Talvala } 349cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala res = find_camera_metadata_entry(mBuffer, tag, &entry); 350cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (res == NAME_NOT_FOUND) { 351cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return OK; 352cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } else if (res != OK) { 353cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala ALOGE("%s: Error looking for entry %s.%s (%x): %s %d", 354cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala __FUNCTION__, 355cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala get_camera_metadata_section_name(tag), 356cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala get_camera_metadata_tag_name(tag), tag, strerror(-res), res); 357cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return res; 358cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 359cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala res = delete_camera_metadata_entry(mBuffer, entry.index); 360cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (res != OK) { 361cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala ALOGE("%s: Error deleting entry %s.%s (%x): %s %d", 362cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala __FUNCTION__, 363cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala get_camera_metadata_section_name(tag), 364cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala get_camera_metadata_tag_name(tag), tag, strerror(-res), res); 365cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 366cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return res; 367cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 368cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 369cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalavoid CameraMetadata::dump(int fd, int verbosity, int indentation) const { 370cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala dump_indented_camera_metadata(mBuffer, fd, verbosity, indentation); 371cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 372cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 373cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvalastatus_t CameraMetadata::resizeIfNeeded(size_t extraEntries, size_t extraData) { 374cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (mBuffer == NULL) { 375cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mBuffer = allocate_camera_metadata(extraEntries * 2, extraData * 2); 376cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (mBuffer == NULL) { 377cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala ALOGE("%s: Can't allocate larger metadata buffer", __FUNCTION__); 378cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return NO_MEMORY; 379cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 380cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } else { 381cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala size_t currentEntryCount = get_camera_metadata_entry_count(mBuffer); 382cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala size_t currentEntryCap = get_camera_metadata_entry_capacity(mBuffer); 383cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala size_t newEntryCount = currentEntryCount + 384cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala extraEntries; 385cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala newEntryCount = (newEntryCount > currentEntryCap) ? 386cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala newEntryCount * 2 : currentEntryCap; 387cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 388cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala size_t currentDataCount = get_camera_metadata_data_count(mBuffer); 389cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala size_t currentDataCap = get_camera_metadata_data_capacity(mBuffer); 390cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala size_t newDataCount = currentDataCount + 391cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala extraData; 392cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala newDataCount = (newDataCount > currentDataCap) ? 393cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala newDataCount * 2 : currentDataCap; 394cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 395cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (newEntryCount > currentEntryCap || 396cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala newDataCount > currentDataCap) { 397cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala camera_metadata_t *oldBuffer = mBuffer; 398cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala mBuffer = allocate_camera_metadata(newEntryCount, 399cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala newDataCount); 400cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala if (mBuffer == NULL) { 401cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala ALOGE("%s: Can't allocate larger metadata buffer", __FUNCTION__); 402cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return NO_MEMORY; 403cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 404cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala append_camera_metadata(mBuffer, oldBuffer); 405cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala free_camera_metadata(oldBuffer); 406cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 407cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala } 408cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala return OK; 409cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala} 410cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala 411cab96a4a7a2900fa991ab77ae45ba8d4be97e054Eino-Ville Talvala}; // namespace android 412