MetaData.h revision 8f5f2fcee5c12d08df71d17017410c50951fc2e3
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> 2720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 2820111aa043c5f404472bc63b90bc5aad906b1101Andreas Hubernamespace android { 2920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 3048c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber// The following keys map to int32_t data unless indicated otherwise. 3120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberenum { 3248c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyMIMEType = 'mime', // cstring 33ddcc4a66d848deef6fb4689e64e30cd9bd2684feJames Dong kKeyWidth = 'widt', // int32_t 34ddcc4a66d848deef6fb4689e64e30cd9bd2684feJames Dong kKeyHeight = 'heig', // int32_t 35ddcc4a66d848deef6fb4689e64e30cd9bd2684feJames Dong kKeyIFramesInterval = 'ifiv', // int32_t 36ddcc4a66d848deef6fb4689e64e30cd9bd2684feJames Dong kKeyStride = 'strd', // int32_t 37ddcc4a66d848deef6fb4689e64e30cd9bd2684feJames Dong kKeySliceHeight = 'slht', // int32_t 38ddcc4a66d848deef6fb4689e64e30cd9bd2684feJames Dong kKeyChannelCount = '#chn', // int32_t 392dec2b5be2056c6d9428897dc672185872d30d17James Dong kKeySampleRate = 'srte', // int32_t (also video frame rate) 40b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber kKeyBitRate = 'brte', // int32_t (bps) 4148c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyESDS = 'esds', // raw data 4248c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyAVCC = 'avcc', // raw data 43ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber kKeyVorbisInfo = 'vinf', // raw data 44ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber kKeyVorbisBooks = 'vboo', // raw data 45dbc03445db2bbf83b64f0c0a5dc62e61408864d7Andreas Huber kKeyWantsNALFragments = 'NALf', 4630ab66297501757d745b9ae10da61adcd891f497Andreas Huber kKeyIsSyncFrame = 'sync', // int32_t (bool) 4730ab66297501757d745b9ae10da61adcd891f497Andreas Huber kKeyIsCodecConfig = 'conf', // int32_t (bool) 4848c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyTime = 'time', // int64_t (usecs) 4948c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyDuration = 'dura', // int64_t (usecs) 50dbc03445db2bbf83b64f0c0a5dc62e61408864d7Andreas Huber kKeyColorFormat = 'colf', 5148c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyPlatformPrivate = 'priv', // pointer 5248c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyDecoderComponent = 'decC', // cstring 53dbc03445db2bbf83b64f0c0a5dc62e61408864d7Andreas Huber kKeyBufferID = 'bfID', 54e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber kKeyMaxInputSize = 'inpS', 557e04dcf8d6784dd56f53aa90bf34431ab4f0710cAndreas Huber kKeyThumbnailTime = 'thbT', // int64_t (usecs) 56fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber 57fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyAlbum = 'albu', // cstring 58fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyArtist = 'arti', // cstring 5966ac4df65516ebfd0e500bfca75dc4b5ef8d674eMarco Nelissen kKeyAlbumArtist = 'aart', // cstring 60fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyComposer = 'comp', // cstring 61fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyGenre = 'genr', // cstring 62fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyTitle = 'titl', // cstring 63fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyYear = 'year', // cstring 64fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyAlbumArt = 'albA', // compressed image data 65fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyAlbumArtMIME = 'alAM', // cstring 66bd4bc59262df90dc85752684a1d4a92833a535a3Andreas Huber kKeyAuthor = 'auth', // cstring 67bd4bc59262df90dc85752684a1d4a92833a535a3Andreas Huber kKeyCDTrackNumber = 'cdtr', // cstring 686c8a9a4132337a3419a72a735f0b40df0b82061fMarco Nelissen kKeyDiscNumber = 'dnum', // cstring 69bd4bc59262df90dc85752684a1d4a92833a535a3Andreas Huber kKeyDate = 'date', // cstring 7072b8c5ae6a5f97a4fcfc6d23d33159d6ae50179cAndreas Huber kKeyWriter = 'writ', // cstring 718f5f2fcee5c12d08df71d17017410c50951fc2e3James Dong kKeyTimeScale = 'tmsl', // int32_t 7293d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong 73145bfe5eb3e08c9689c28f6bf3287a979438b04bJames Dong // video profile and level 74145bfe5eb3e08c9689c28f6bf3287a979438b04bJames Dong kKeyVideoProfile = 'vprf', // int32_t 75145bfe5eb3e08c9689c28f6bf3287a979438b04bJames Dong kKeyVideoLevel = 'vlev', // int32_t 76145bfe5eb3e08c9689c28f6bf3287a979438b04bJames Dong 7793d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // Set this key to enable authoring files in 64-bit offset 7893d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong kKey64BitFileOffset = 'fobt', // int32_t (bool) 7993d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong 8093d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // Identify the file output format for authoring 8193d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // Please see <media/mediarecorder.h> for the supported 8293d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // file output formats. 8393d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong kKeyFileType = 'ftyp', // int32_t 8493d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong 8593d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // Track authoring progress status 8693d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // kKeyTrackTimeStatus is used to track progress in elapsed time 8793d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // kKeyTrackFrameStatus is used to track progress in authored frames 8893d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong kKeyTrackFrameStatus = 'tkfm', // int32_t 8993d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong kKeyTrackTimeStatus = 'tktm', // int64_t 9093d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong 9120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 9220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 9320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberenum { 9420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber kTypeESDS = 'esds', 9520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber kTypeAVCC = 'avcc', 9620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 9720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 9820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass MetaData : public RefBase { 9920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpublic: 10020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber MetaData(); 10120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber MetaData(const MetaData &from); 10220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 10320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber enum Type { 10420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber TYPE_NONE = 'none', 10520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber TYPE_C_STRING = 'cstr', 10620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber TYPE_INT32 = 'in32', 10748c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber TYPE_INT64 = 'in64', 10820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber TYPE_FLOAT = 'floa', 10920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber TYPE_POINTER = 'ptr ', 11020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber }; 11120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 11220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void clear(); 11320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool remove(uint32_t key); 11420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 11520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool setCString(uint32_t key, const char *value); 11620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool setInt32(uint32_t key, int32_t value); 11748c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber bool setInt64(uint32_t key, int64_t value); 11820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool setFloat(uint32_t key, float value); 11920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool setPointer(uint32_t key, void *value); 12020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 12120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool findCString(uint32_t key, const char **value); 12220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool findInt32(uint32_t key, int32_t *value); 12348c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber bool findInt64(uint32_t key, int64_t *value); 12420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool findFloat(uint32_t key, float *value); 12520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool findPointer(uint32_t key, void **value); 12620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 12720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool setData(uint32_t key, uint32_t type, const void *data, size_t size); 12820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 12920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool findData(uint32_t key, uint32_t *type, 13020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber const void **data, size_t *size) const; 13120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 13220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberprotected: 13320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual ~MetaData(); 13420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 13520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberprivate: 13620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber struct typed_data { 13720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber typed_data(); 13820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ~typed_data(); 13920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 14020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber typed_data(const MetaData::typed_data &); 14120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber typed_data &operator=(const MetaData::typed_data &); 14220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 14320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void clear(); 14420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void setData(uint32_t type, const void *data, size_t size); 14520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void getData(uint32_t *type, const void **data, size_t *size) const; 14620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 14720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber private: 14820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t mType; 14920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber size_t mSize; 15020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 15120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber union { 15220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void *ext_data; 15320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber float reservoir; 15420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } u; 15520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 15620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool usesReservoir() const { 15720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return mSize <= sizeof(u.reservoir); 15820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 15920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 16020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void allocateStorage(size_t size); 16120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void freeStorage(); 16220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 16320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void *storage() { 16420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return usesReservoir() ? &u.reservoir : u.ext_data; 16520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 16620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 16720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber const void *storage() const { 16820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return usesReservoir() ? &u.reservoir : u.ext_data; 16920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 17020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber }; 17120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 17220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber KeyedVector<uint32_t, typed_data> mItems; 17320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 17420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // MetaData &operator=(const MetaData &); 17520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 17620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 17720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} // namespace android 17820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 17920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#endif // META_DATA_H_ 180