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#ifndef META_DATA_H_ 1820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 1920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#define META_DATA_H_ 2020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <sys/types.h> 2220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <stdint.h> 2420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <utils/RefBase.h> 2620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <utils/KeyedVector.h> 27feba11fd788c99b0b63e0bce724730817688d82fMarco Nelissen#include <utils/String8.h> 2820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2920111aa043c5f404472bc63b90bc5aad906b1101Andreas Hubernamespace android { 3020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 3148c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber// The following keys map to int32_t data unless indicated otherwise. 3220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberenum { 3348c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyMIMEType = 'mime', // cstring 34b45c01c2b8588ff431b511151666a55a39f0a6aeJames Dong kKeyWidth = 'widt', // int32_t, image pixel 35b45c01c2b8588ff431b511151666a55a39f0a6aeJames Dong kKeyHeight = 'heig', // int32_t, image pixel 36b45c01c2b8588ff431b511151666a55a39f0a6aeJames Dong kKeyDisplayWidth = 'dWid', // int32_t, display/presentation 37b45c01c2b8588ff431b511151666a55a39f0a6aeJames Dong kKeyDisplayHeight = 'dHgt', // int32_t, display/presentation 38e9810fae2ca6620337b75a787786cc0ea52adecdAndreas Huber kKeySARWidth = 'sarW', // int32_t, sampleAspectRatio width 39e9810fae2ca6620337b75a787786cc0ea52adecdAndreas Huber kKeySARHeight = 'sarH', // int32_t, sampleAspectRatio height 40f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 41f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber // a rectangle, if absent assumed to be (0, 0, width - 1, height - 1) 42f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber kKeyCropRect = 'crop', 43f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 4430db2709395c73fb3b4ee334119ceba68c95ab13James Dong kKeyRotation = 'rotA', // int32_t (angle in degrees) 45ddcc4a66d848deef6fb4689e64e30cd9bd2684feJames Dong kKeyIFramesInterval = 'ifiv', // int32_t 46ddcc4a66d848deef6fb4689e64e30cd9bd2684feJames Dong kKeyStride = 'strd', // int32_t 47ddcc4a66d848deef6fb4689e64e30cd9bd2684feJames Dong kKeySliceHeight = 'slht', // int32_t 48ddcc4a66d848deef6fb4689e64e30cd9bd2684feJames Dong kKeyChannelCount = '#chn', // int32_t 49786618ffe881aceb64d65a6a2e2d76ede6e01ec0Jean-Michel Trivi kKeyChannelMask = 'chnm', // int32_t 50393410a441b6d06daf286ed496470e9d6b2b6ca8James Dong kKeySampleRate = 'srte', // int32_t (audio sampling rate Hz) 51393410a441b6d06daf286ed496470e9d6b2b6ca8James Dong kKeyFrameRate = 'frmR', // int32_t (video frame rate fps) 52b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber kKeyBitRate = 'brte', // int32_t (bps) 5348c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyESDS = 'esds', // raw data 54aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke kKeyAACProfile = 'aacp', // int32_t 5548c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyAVCC = 'avcc', // raw data 563b5a6b9fa6c6825a1d0b441429e2bb365b259827Harish Mahendrakar kKeyHVCC = 'hvcc', // raw data 57244ba87d20aeb29c9cad727820fa1e803ec3643cJames Dong kKeyD263 = 'd263', // raw data 58ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber kKeyVorbisInfo = 'vinf', // raw data 59ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber kKeyVorbisBooks = 'vboo', // raw data 60bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian kKeyOpusHeader = 'ohdr', // raw data 61bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian kKeyOpusCodecDelay = 'ocod', // uint64_t (codec delay in ns) 62bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian kKeyOpusSeekPreRoll = 'ospr', // uint64_t (seek preroll in ns) 63dbc03445db2bbf83b64f0c0a5dc62e61408864d7Andreas Huber kKeyWantsNALFragments = 'NALf', 6430ab66297501757d745b9ae10da61adcd891f497Andreas Huber kKeyIsSyncFrame = 'sync', // int32_t (bool) 6530ab66297501757d745b9ae10da61adcd891f497Andreas Huber kKeyIsCodecConfig = 'conf', // int32_t (bool) 6648c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyTime = 'time', // int64_t (usecs) 67965e4239ca1cf6c824c1f8ce23116f9ba8cf6ebdJames Dong kKeyDecodingTime = 'decT', // int64_t (decoding timestamp in usecs) 6839ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber kKeyNTPTime = 'ntpT', // uint64_t (ntp-timestamp) 69abd1f4f870925d6776dbe4b930b759a1ab6595caAndreas Huber kKeyTargetTime = 'tarT', // int64_t (usecs) 70d707fcb3e29707ca4a5935c294ef0b38eb5aba5fJames Dong kKeyDriftTime = 'dftT', // int64_t (usecs) 713c3763d2ee1cd1fba7fe522fbaf0faca315d8c2aJames Dong kKeyAnchorTime = 'ancT', // int64_t (usecs) 7248c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyDuration = 'dura', // int64_t (usecs) 73dbc03445db2bbf83b64f0c0a5dc62e61408864d7Andreas Huber kKeyColorFormat = 'colf', 7448c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyPlatformPrivate = 'priv', // pointer 7548c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyDecoderComponent = 'decC', // cstring 76dbc03445db2bbf83b64f0c0a5dc62e61408864d7Andreas Huber kKeyBufferID = 'bfID', 77e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber kKeyMaxInputSize = 'inpS', 787e04dcf8d6784dd56f53aa90bf34431ab4f0710cAndreas Huber kKeyThumbnailTime = 'thbT', // int64_t (usecs) 79dcd25efb46c41c8d24a0a9cf61fb57f84149709eGloria Wang kKeyTrackID = 'trID', 80dcd25efb46c41c8d24a0a9cf61fb57f84149709eGloria Wang kKeyIsDRM = 'idrm', // int32_t (bool) 81b636abde14f2612ea236257846b9ab15d87d4623Marco Nelissen kKeyEncoderDelay = 'encd', // int32_t (frames) 82b636abde14f2612ea236257846b9ab15d87d4623Marco Nelissen kKeyEncoderPadding = 'encp', // int32_t (frames) 83fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber 84fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyAlbum = 'albu', // cstring 85fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyArtist = 'arti', // cstring 8666ac4df65516ebfd0e500bfca75dc4b5ef8d674eMarco Nelissen kKeyAlbumArtist = 'aart', // cstring 87fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyComposer = 'comp', // cstring 88fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyGenre = 'genr', // cstring 89fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyTitle = 'titl', // cstring 90fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyYear = 'year', // cstring 91fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyAlbumArt = 'albA', // compressed image data 92fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyAlbumArtMIME = 'alAM', // cstring 93bd4bc59262df90dc85752684a1d4a92833a535a3Andreas Huber kKeyAuthor = 'auth', // cstring 94bd4bc59262df90dc85752684a1d4a92833a535a3Andreas Huber kKeyCDTrackNumber = 'cdtr', // cstring 956c8a9a4132337a3419a72a735f0b40df0b82061fMarco Nelissen kKeyDiscNumber = 'dnum', // cstring 96bd4bc59262df90dc85752684a1d4a92833a535a3Andreas Huber kKeyDate = 'date', // cstring 9772b8c5ae6a5f97a4fcfc6d23d33159d6ae50179cAndreas Huber kKeyWriter = 'writ', // cstring 9811f8109ad8646d3acd9a0987613229cde59d52c1Marco Nelissen kKeyCompilation = 'cpil', // cstring 994948818cb91176df74c972ac27b2f392b5d148bcJames Dong kKeyLocation = 'loc ', // cstring 1008f5f2fcee5c12d08df71d17017410c50951fc2e3James Dong kKeyTimeScale = 'tmsl', // int32_t 10193d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong 102145bfe5eb3e08c9689c28f6bf3287a979438b04bJames Dong // video profile and level 103145bfe5eb3e08c9689c28f6bf3287a979438b04bJames Dong kKeyVideoProfile = 'vprf', // int32_t 104145bfe5eb3e08c9689c28f6bf3287a979438b04bJames Dong kKeyVideoLevel = 'vlev', // int32_t 105145bfe5eb3e08c9689c28f6bf3287a979438b04bJames Dong 10693d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // Set this key to enable authoring files in 64-bit offset 10793d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong kKey64BitFileOffset = 'fobt', // int32_t (bool) 108b4d5320bda29cd9694461c9b61d0211f801ff0afJames Dong kKey2ByteNalLength = '2NAL', // int32_t (bool) 10993d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong 11093d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // Identify the file output format for authoring 11193d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // Please see <media/mediarecorder.h> for the supported 11293d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // file output formats. 11393d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong kKeyFileType = 'ftyp', // int32_t 11493d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong 11593d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // Track authoring progress status 11693d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // kKeyTrackTimeStatus is used to track progress in elapsed time 11793d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong kKeyTrackTimeStatus = 'tktm', // int64_t 11893d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong 119e756d9753c7cffe2e9731a31fa98a3e8f37151c9ztenghui kKeyRealTimeRecording = 'rtrc', // bool (int32_t) 1200dff606f42292b8a31b9eee842877f9875279dabJames Dong kKeyNumBuffers = 'nbbf', // int32_t 121e259531ce59ab1f31de5a23124b22536f6a5a767James Dong 1228ae49d87b98d57d6758b0c51b95e28a6581a79f1Andreas Huber // Ogg files can be tagged to be automatically looping... 1238ae49d87b98d57d6758b0c51b95e28a6581a79f1Andreas Huber kKeyAutoLoop = 'autL', // bool (int32_t) 124db6222212528637d8f2afa7f49fc3c8c915bafbeAndreas Huber 125db6222212528637d8f2afa7f49fc3c8c915bafbeAndreas Huber kKeyValidSamples = 'valD', // int32_t 1262b82e9652ba049e754c2cc74e381282f231d5fbfAndreas Huber 1272b82e9652ba049e754c2cc74e381282f231d5fbfAndreas Huber kKeyIsUnreadable = 'unre', // bool (int32_t) 1286a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis 1296a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis // An indication that a video buffer has been rendered. 1306a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis kKeyRendered = 'rend', // bool (int32_t) 1317a1e3e81264189e23a1db2b174e1b5a5d4c7d1c3Gloria Wang 1327a1e3e81264189e23a1db2b174e1b5a5d4c7d1c3Gloria Wang // The language code for this media 1337a1e3e81264189e23a1db2b174e1b5a5d4c7d1c3Gloria Wang kKeyMediaLanguage = 'lang', // cstring 1343b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang 1353b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang // To store the timed text format data 1363b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang kKeyTextFormatData = 'text', // raw data 1370bb6b4c5da2451ee0973372b0a3858b15c742689Andreas Huber 1380bb6b4c5da2451ee0973372b0a3858b15c742689Andreas Huber kKeyRequiresSecureBuffers = 'secu', // bool (int32_t) 139ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 140ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber kKeyIsADTS = 'adts', // bool (int32_t) 141db170bb1cae145d07efc803a3c208963de0c6087Eric Laurent kKeyAACAOT = 'aaot', // int32_t 1425892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber 1435892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // If a MediaBuffer's data represents (at least partially) encrypted 1445892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // data, the following fields aid in decryption. 1455892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // The data can be thought of as pairs of plain and encrypted data 1465892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // fragments, i.e. plain and encrypted data alternate. 1475892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // The first fragment is by convention plain data (if that's not the 1485892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // case, simply specify plain fragment size of 0). 1495892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // kKeyEncryptedSizes and kKeyPlainSizes each map to an array of 1505892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // size_t values. The sum total of all size_t values of both arrays 1515892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // must equal the amount of data (i.e. MediaBuffer's range_length()). 1525892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // If both arrays are present, they must be of the same size. 1535892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // If only encrypted sizes are present it is assumed that all 1545892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // plain sizes are 0, i.e. all fragments are encrypted. 1555892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // To programmatically set these array, use the MetaData::setData API, i.e. 1565892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // const size_t encSizes[]; 1575892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // meta->setData( 1585892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // kKeyEncryptedSizes, 0 /* type */, encSizes, sizeof(encSizes)); 1595892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // A plain sizes array by itself makes no sense. 1605892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber kKeyEncryptedSizes = 'encr', // size_t[] 1615892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber kKeyPlainSizes = 'plai', // size_t[] 1625892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber kKeyCryptoKey = 'cryK', // uint8_t[16] 1635892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber kKeyCryptoIV = 'cryI', // uint8_t[16] 164f69e53033f23f9f70fcdb28a3c2e650de0147459Andreas Huber kKeyCryptoMode = 'cryM', // int32_t 1655544c66ba0aa789a997b376df503a5ffae425dc7Marco Nelissen 1665544c66ba0aa789a997b376df503a5ffae425dc7Marco Nelissen kKeyCryptoDefaultIVSize = 'cryS', // int32_t 1675544c66ba0aa789a997b376df503a5ffae425dc7Marco Nelissen 1685544c66ba0aa789a997b376df503a5ffae425dc7Marco Nelissen kKeyPssh = 'pssh', // raw data 169dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih 170dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih // Please see MediaFormat.KEY_IS_AUTOSELECT. 171dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih kKeyTrackIsAutoselect = 'auto', // bool (int32_t) 172dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih // Please see MediaFormat.KEY_IS_DEFAULT. 173dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih kKeyTrackIsDefault = 'dflt', // bool (int32_t) 174dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih // Similar to MediaFormat.KEY_IS_FORCED_SUBTITLE but pertains to av tracks as well. 175dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih kKeyTrackIsForced = 'frcd', // bool (int32_t) 17620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 17720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 17820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberenum { 17920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber kTypeESDS = 'esds', 18020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber kTypeAVCC = 'avcc', 1813b5a6b9fa6c6825a1d0b441429e2bb365b259827Harish Mahendrakar kTypeHVCC = 'hvcc', 182244ba87d20aeb29c9cad727820fa1e803ec3643cJames Dong kTypeD263 = 'd263', 18320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 18420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 18520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass MetaData : public RefBase { 18620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpublic: 18720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber MetaData(); 18820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber MetaData(const MetaData &from); 18920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 19020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber enum Type { 19120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber TYPE_NONE = 'none', 19220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber TYPE_C_STRING = 'cstr', 19320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber TYPE_INT32 = 'in32', 19448c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber TYPE_INT64 = 'in64', 19520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber TYPE_FLOAT = 'floa', 19620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber TYPE_POINTER = 'ptr ', 197f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber TYPE_RECT = 'rect', 19820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber }; 19920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 20020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void clear(); 20120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool remove(uint32_t key); 20220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 20320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool setCString(uint32_t key, const char *value); 20420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool setInt32(uint32_t key, int32_t value); 20548c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber bool setInt64(uint32_t key, int64_t value); 20620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool setFloat(uint32_t key, float value); 20720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool setPointer(uint32_t key, void *value); 20820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 209f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber bool setRect( 210f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber uint32_t key, 211f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber int32_t left, int32_t top, 212f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber int32_t right, int32_t bottom); 213f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 2142cf9c5073ca3342ee52673ad68763fadd2c2be79James Dong bool findCString(uint32_t key, const char **value); 2152cf9c5073ca3342ee52673ad68763fadd2c2be79James Dong bool findInt32(uint32_t key, int32_t *value); 2162cf9c5073ca3342ee52673ad68763fadd2c2be79James Dong bool findInt64(uint32_t key, int64_t *value); 2172cf9c5073ca3342ee52673ad68763fadd2c2be79James Dong bool findFloat(uint32_t key, float *value); 2182cf9c5073ca3342ee52673ad68763fadd2c2be79James Dong bool findPointer(uint32_t key, void **value); 21920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 220f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber bool findRect( 221f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber uint32_t key, 222f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber int32_t *left, int32_t *top, 2232cf9c5073ca3342ee52673ad68763fadd2c2be79James Dong int32_t *right, int32_t *bottom); 224f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 22520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool setData(uint32_t key, uint32_t type, const void *data, size_t size); 22620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 22720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool findData(uint32_t key, uint32_t *type, 22820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber const void **data, size_t *size) const; 22920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 230328abde67f57c026ac44e927f9244c40832499c8Oscar Rydhé bool hasData(uint32_t key) const; 231328abde67f57c026ac44e927f9244c40832499c8Oscar Rydhé 232feba11fd788c99b0b63e0bce724730817688d82fMarco Nelissen void dumpToLog() const; 233feba11fd788c99b0b63e0bce724730817688d82fMarco Nelissen 23420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberprotected: 23520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual ~MetaData(); 23620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 23720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberprivate: 23820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber struct typed_data { 23920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber typed_data(); 24020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ~typed_data(); 24120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 24220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber typed_data(const MetaData::typed_data &); 24320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber typed_data &operator=(const MetaData::typed_data &); 24420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 24520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void clear(); 24620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void setData(uint32_t type, const void *data, size_t size); 24720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void getData(uint32_t *type, const void **data, size_t *size) const; 248feba11fd788c99b0b63e0bce724730817688d82fMarco Nelissen String8 asString() const; 24920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 25020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber private: 25120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t mType; 25220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber size_t mSize; 25320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 25420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber union { 25520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void *ext_data; 25620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber float reservoir; 25720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } u; 25820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 25920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool usesReservoir() const { 26020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return mSize <= sizeof(u.reservoir); 26120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 26220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 26320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void allocateStorage(size_t size); 26420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void freeStorage(); 26520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 26620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void *storage() { 26720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return usesReservoir() ? &u.reservoir : u.ext_data; 26820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 26920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 27020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber const void *storage() const { 27120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return usesReservoir() ? &u.reservoir : u.ext_data; 27220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 27320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber }; 27420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 275f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber struct Rect { 276f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber int32_t mLeft, mTop, mRight, mBottom; 277f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber }; 278f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 27920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber KeyedVector<uint32_t, typed_data> mItems; 28020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 28120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // MetaData &operator=(const MetaData &); 28220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 28320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 28420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} // namespace android 28520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 28620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#endif // META_DATA_H_ 287