MetaData.cpp revision 2cf9c5073ca3342ee52673ad68763fadd2c2be79
120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber/* 220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Copyright (C) 2009 The Android Open Source Project 320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * 420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * you may not use this file except in compliance with the License. 620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * You may obtain a copy of the License at 720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * 820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * 1020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * Unless required by applicable law or agreed to in writing, software 1120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 1220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * See the License for the specific language governing permissions and 1420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber * limitations under the License. 1520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber */ 1620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 1720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <stdlib.h> 1820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <string.h> 1920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 200c89199745bc1bf05b997fc7c342017807676b6fAndreas Huber#include <media/stagefright/MediaDebug.h> 2120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <media/stagefright/MetaData.h> 2220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2320111aa043c5f404472bc63b90bc5aad906b1101Andreas Hubernamespace android { 2420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2520111aa043c5f404472bc63b90bc5aad906b1101Andreas HuberMetaData::MetaData() { 2620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 2720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2820111aa043c5f404472bc63b90bc5aad906b1101Andreas HuberMetaData::MetaData(const MetaData &from) 2920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber : RefBase(), 3020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mItems(from.mItems) { 3120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 3220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 3320111aa043c5f404472bc63b90bc5aad906b1101Andreas HuberMetaData::~MetaData() { 3420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber clear(); 3520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 3620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 3720111aa043c5f404472bc63b90bc5aad906b1101Andreas Hubervoid MetaData::clear() { 3820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mItems.clear(); 3920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 4020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberbool MetaData::remove(uint32_t key) { 4220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ssize_t i = mItems.indexOfKey(key); 4320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if (i < 0) { 4520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return false; 4620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 4720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 4820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mItems.removeItemsAt(i); 4920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 5020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return true; 5120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 5220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 5320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberbool MetaData::setCString(uint32_t key, const char *value) { 5420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return setData(key, TYPE_C_STRING, value, strlen(value) + 1); 5520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 5620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 5720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberbool MetaData::setInt32(uint32_t key, int32_t value) { 5820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return setData(key, TYPE_INT32, &value, sizeof(value)); 5920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 6020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 6148c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huberbool MetaData::setInt64(uint32_t key, int64_t value) { 6248c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber return setData(key, TYPE_INT64, &value, sizeof(value)); 6348c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber} 6448c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber 6520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberbool MetaData::setFloat(uint32_t key, float value) { 6620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return setData(key, TYPE_FLOAT, &value, sizeof(value)); 6720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 6820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 6920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberbool MetaData::setPointer(uint32_t key, void *value) { 7020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return setData(key, TYPE_POINTER, &value, sizeof(value)); 7120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 7220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 73f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huberbool MetaData::setRect( 74f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber uint32_t key, 75f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber int32_t left, int32_t top, 76f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber int32_t right, int32_t bottom) { 77f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber Rect r; 78f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber r.mLeft = left; 79f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber r.mTop = top; 80f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber r.mRight = right; 81f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber r.mBottom = bottom; 82f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 83f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber return setData(key, TYPE_RECT, &r, sizeof(r)); 84f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber} 85f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 862cf9c5073ca3342ee52673ad68763fadd2c2be79James Dongbool MetaData::findCString(uint32_t key, const char **value) { 8720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t type; 8820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber const void *data; 8920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber size_t size; 9020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if (!findData(key, &type, &data, &size) || type != TYPE_C_STRING) { 9120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return false; 9220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 9320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 9420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber *value = (const char *)data; 9520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 9620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return true; 9720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 9820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 992cf9c5073ca3342ee52673ad68763fadd2c2be79James Dongbool MetaData::findInt32(uint32_t key, int32_t *value) { 10020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t type; 10120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber const void *data; 10220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber size_t size; 10320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if (!findData(key, &type, &data, &size) || type != TYPE_INT32) { 10420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return false; 10520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 10620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 1070c89199745bc1bf05b997fc7c342017807676b6fAndreas Huber CHECK_EQ(size, sizeof(*value)); 10820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 10920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber *value = *(int32_t *)data; 11020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 11120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return true; 11220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 11320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 1142cf9c5073ca3342ee52673ad68763fadd2c2be79James Dongbool MetaData::findInt64(uint32_t key, int64_t *value) { 11548c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber uint32_t type; 11648c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber const void *data; 11748c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber size_t size; 11848c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber if (!findData(key, &type, &data, &size) || type != TYPE_INT64) { 11948c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber return false; 12048c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber } 12148c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber 12248c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber CHECK_EQ(size, sizeof(*value)); 12348c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber 12448c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber *value = *(int64_t *)data; 12548c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber 12648c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber return true; 12748c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber} 12848c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber 1292cf9c5073ca3342ee52673ad68763fadd2c2be79James Dongbool MetaData::findFloat(uint32_t key, float *value) { 13020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t type; 13120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber const void *data; 13220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber size_t size; 13320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if (!findData(key, &type, &data, &size) || type != TYPE_FLOAT) { 13420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return false; 13520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 13620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 1370c89199745bc1bf05b997fc7c342017807676b6fAndreas Huber CHECK_EQ(size, sizeof(*value)); 13820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 13920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber *value = *(float *)data; 14020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 14120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return true; 14220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 14320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 1442cf9c5073ca3342ee52673ad68763fadd2c2be79James Dongbool MetaData::findPointer(uint32_t key, void **value) { 14520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t type; 14620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber const void *data; 14720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber size_t size; 14820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if (!findData(key, &type, &data, &size) || type != TYPE_POINTER) { 14920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return false; 15020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 15120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 1520c89199745bc1bf05b997fc7c342017807676b6fAndreas Huber CHECK_EQ(size, sizeof(*value)); 15320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 15420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber *value = *(void **)data; 15520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 15620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return true; 15720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 15820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 159f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huberbool MetaData::findRect( 160f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber uint32_t key, 161f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber int32_t *left, int32_t *top, 1622cf9c5073ca3342ee52673ad68763fadd2c2be79James Dong int32_t *right, int32_t *bottom) { 163f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber uint32_t type; 164f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber const void *data; 165f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber size_t size; 166f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber if (!findData(key, &type, &data, &size) || type != TYPE_RECT) { 167f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber return false; 168f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber } 169f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 170f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber CHECK_EQ(size, sizeof(Rect)); 171f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 172f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber const Rect *r = (const Rect *)data; 173f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber *left = r->mLeft; 174f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber *top = r->mTop; 175f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber *right = r->mRight; 176f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber *bottom = r->mBottom; 177f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 178f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber return true; 179f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber} 180f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 18120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberbool MetaData::setData( 18220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t key, uint32_t type, const void *data, size_t size) { 18320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool overwrote_existing = true; 18420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 18520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ssize_t i = mItems.indexOfKey(key); 18620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if (i < 0) { 18720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber typed_data item; 18820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber i = mItems.add(key, item); 18920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 19020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber overwrote_existing = false; 19120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 19220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 19320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber typed_data &item = mItems.editValueAt(i); 19420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 19520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber item.setData(type, data, size); 19620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 19720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return overwrote_existing; 19820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 19920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 20020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberbool MetaData::findData(uint32_t key, uint32_t *type, 20120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber const void **data, size_t *size) const { 20220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ssize_t i = mItems.indexOfKey(key); 20320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 20420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if (i < 0) { 20520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return false; 20620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 20720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 20820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber const typed_data &item = mItems.valueAt(i); 20920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 21020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber item.getData(type, data, size); 21120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 21220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return true; 21320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 21420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 21520111aa043c5f404472bc63b90bc5aad906b1101Andreas HuberMetaData::typed_data::typed_data() 21620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber : mType(0), 21720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mSize(0) { 21820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 21920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 22020111aa043c5f404472bc63b90bc5aad906b1101Andreas HuberMetaData::typed_data::~typed_data() { 22120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber clear(); 22220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 22320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 22420111aa043c5f404472bc63b90bc5aad906b1101Andreas HuberMetaData::typed_data::typed_data(const typed_data &from) 22520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber : mType(from.mType), 22620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mSize(0) { 22720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber allocateStorage(from.mSize); 22820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber memcpy(storage(), from.storage(), mSize); 22920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 23020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 23120111aa043c5f404472bc63b90bc5aad906b1101Andreas HuberMetaData::typed_data &MetaData::typed_data::operator=( 23220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber const MetaData::typed_data &from) { 23320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if (this != &from) { 23420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber clear(); 23520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mType = from.mType; 23620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber allocateStorage(from.mSize); 23720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber memcpy(storage(), from.storage(), mSize); 23820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 23920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 24020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return *this; 24120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 24220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 24320111aa043c5f404472bc63b90bc5aad906b1101Andreas Hubervoid MetaData::typed_data::clear() { 24420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber freeStorage(); 24520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 24620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mType = 0; 24720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 24820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 24920111aa043c5f404472bc63b90bc5aad906b1101Andreas Hubervoid MetaData::typed_data::setData( 25020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t type, const void *data, size_t size) { 25120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber clear(); 25220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 25320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mType = type; 25420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber allocateStorage(size); 25520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber memcpy(storage(), data, size); 25620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 25720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 25820111aa043c5f404472bc63b90bc5aad906b1101Andreas Hubervoid MetaData::typed_data::getData( 25920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t *type, const void **data, size_t *size) const { 26020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber *type = mType; 26120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber *size = mSize; 26220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber *data = storage(); 26320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 26420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 26520111aa043c5f404472bc63b90bc5aad906b1101Andreas Hubervoid MetaData::typed_data::allocateStorage(size_t size) { 26620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mSize = size; 26720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 26820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if (usesReservoir()) { 26920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return; 27020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 27120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 27220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber u.ext_data = malloc(mSize); 27320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 27420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 27520111aa043c5f404472bc63b90bc5aad906b1101Andreas Hubervoid MetaData::typed_data::freeStorage() { 27620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if (!usesReservoir()) { 27720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber if (u.ext_data) { 27820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber free(u.ext_data); 27920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 28020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 28120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 28220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber mSize = 0; 28320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} 28420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 28520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} // namespace android 28620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 287