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 25b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen#include <binder/Parcel.h> 2620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <utils/RefBase.h> 2720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#include <utils/KeyedVector.h> 28feba11fd788c99b0b63e0bce724730817688d82fMarco Nelissen#include <utils/String8.h> 2920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 3020111aa043c5f404472bc63b90bc5aad906b1101Andreas Hubernamespace android { 3120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 3248c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber// The following keys map to int32_t data unless indicated otherwise. 3320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberenum { 3448c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyMIMEType = 'mime', // cstring 35b45c01c2b8588ff431b511151666a55a39f0a6aeJames Dong kKeyWidth = 'widt', // int32_t, image pixel 36b45c01c2b8588ff431b511151666a55a39f0a6aeJames Dong kKeyHeight = 'heig', // int32_t, image pixel 37b45c01c2b8588ff431b511151666a55a39f0a6aeJames Dong kKeyDisplayWidth = 'dWid', // int32_t, display/presentation 38b45c01c2b8588ff431b511151666a55a39f0a6aeJames Dong kKeyDisplayHeight = 'dHgt', // int32_t, display/presentation 39e9810fae2ca6620337b75a787786cc0ea52adecdAndreas Huber kKeySARWidth = 'sarW', // int32_t, sampleAspectRatio width 40e9810fae2ca6620337b75a787786cc0ea52adecdAndreas Huber kKeySARHeight = 'sarH', // int32_t, sampleAspectRatio height 41f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 42f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber // a rectangle, if absent assumed to be (0, 0, width - 1, height - 1) 43f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber kKeyCropRect = 'crop', 44f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 4530db2709395c73fb3b4ee334119ceba68c95ab13James Dong kKeyRotation = 'rotA', // int32_t (angle in degrees) 46ddcc4a66d848deef6fb4689e64e30cd9bd2684feJames Dong kKeyIFramesInterval = 'ifiv', // int32_t 47ddcc4a66d848deef6fb4689e64e30cd9bd2684feJames Dong kKeyStride = 'strd', // int32_t 48ddcc4a66d848deef6fb4689e64e30cd9bd2684feJames Dong kKeySliceHeight = 'slht', // int32_t 49ddcc4a66d848deef6fb4689e64e30cd9bd2684feJames Dong kKeyChannelCount = '#chn', // int32_t 50786618ffe881aceb64d65a6a2e2d76ede6e01ec0Jean-Michel Trivi kKeyChannelMask = 'chnm', // int32_t 51393410a441b6d06daf286ed496470e9d6b2b6ca8James Dong kKeySampleRate = 'srte', // int32_t (audio sampling rate Hz) 5278bd91b15ee8ea5aa2ab5a8cad7e892cb2d01c1bLajos Molnar kKeyPcmEncoding = 'PCMe', // int32_t (audio encoding enum) 53393410a441b6d06daf286ed496470e9d6b2b6ca8James Dong kKeyFrameRate = 'frmR', // int32_t (video frame rate fps) 54b841f14f8e51f2365945281fbfa54ef6a1b1b5a6Andreas Huber kKeyBitRate = 'brte', // int32_t (bps) 5546f80165c595d81dda68f8f3fea27f4fb04937ddLajos Molnar kKeyMaxBitRate = 'mxBr', // int32_t (bps) 560dc8be97f0fbee707b69b24b3a8d914f88c77423Lajos Molnar kKeyStreamHeader = 'stHd', // raw data 5748c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyESDS = 'esds', // raw data 58aeb8fd460ed87d032b3fb8bb61e21eb542ce0f5bDave Burke kKeyAACProfile = 'aacp', // int32_t 5948c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyAVCC = 'avcc', // raw data 603b5a6b9fa6c6825a1d0b441429e2bb365b259827Harish Mahendrakar kKeyHVCC = 'hvcc', // raw data 61244ba87d20aeb29c9cad727820fa1e803ec3643cJames Dong kKeyD263 = 'd263', // raw data 62ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber kKeyVorbisInfo = 'vinf', // raw data 63ee7ff20e69498ebd53dd9717a0f984188341a75eAndreas Huber kKeyVorbisBooks = 'vboo', // raw data 64bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian kKeyOpusHeader = 'ohdr', // raw data 65bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian kKeyOpusCodecDelay = 'ocod', // uint64_t (codec delay in ns) 66bf927f8ec7979f2b64331c2b2f12a6a5dba05bcaVignesh Venkatasubramanian kKeyOpusSeekPreRoll = 'ospr', // uint64_t (seek preroll in ns) 67d0d32c0d39b56d7e85fcaa61f3245ac7bbb1f9ebVignesh Venkatasubramanian kKeyVp9CodecPrivate = 'vp9p', // raw data (vp9 csd information) 68dbc03445db2bbf83b64f0c0a5dc62e61408864d7Andreas Huber kKeyWantsNALFragments = 'NALf', 6930ab66297501757d745b9ae10da61adcd891f497Andreas Huber kKeyIsSyncFrame = 'sync', // int32_t (bool) 7030ab66297501757d745b9ae10da61adcd891f497Andreas Huber kKeyIsCodecConfig = 'conf', // int32_t (bool) 7148c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyTime = 'time', // int64_t (usecs) 72965e4239ca1cf6c824c1f8ce23116f9ba8cf6ebdJames Dong kKeyDecodingTime = 'decT', // int64_t (decoding timestamp in usecs) 7339ddf8e0f18766f7ba1e3246b774aa6ebd93eea8Andreas Huber kKeyNTPTime = 'ntpT', // uint64_t (ntp-timestamp) 74abd1f4f870925d6776dbe4b930b759a1ab6595caAndreas Huber kKeyTargetTime = 'tarT', // int64_t (usecs) 75d707fcb3e29707ca4a5935c294ef0b38eb5aba5fJames Dong kKeyDriftTime = 'dftT', // int64_t (usecs) 763c3763d2ee1cd1fba7fe522fbaf0faca315d8c2aJames Dong kKeyAnchorTime = 'ancT', // int64_t (usecs) 7748c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyDuration = 'dura', // int64_t (usecs) 78c93a13669ce1b5a9e6527b4c86c9d8f5e92be828Lajos Molnar kKeyPixelFormat = 'pixf', // int32_t 79c93a13669ce1b5a9e6527b4c86c9d8f5e92be828Lajos Molnar kKeyColorFormat = 'colf', // int32_t 80c93a13669ce1b5a9e6527b4c86c9d8f5e92be828Lajos Molnar kKeyColorSpace = 'cols', // int32_t 8148c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyPlatformPrivate = 'priv', // pointer 8248c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber kKeyDecoderComponent = 'decC', // cstring 83dbc03445db2bbf83b64f0c0a5dc62e61408864d7Andreas Huber kKeyBufferID = 'bfID', 84e5adbeee3401915ff8e1a983396ce3554436b11cAndreas Huber kKeyMaxInputSize = 'inpS', 85a0d0ba51ad60a68117a0ee78e37ab78715b8a069Chong Zhang kKeyMaxWidth = 'maxW', 86a0d0ba51ad60a68117a0ee78e37ab78715b8a069Chong Zhang kKeyMaxHeight = 'maxH', 877e04dcf8d6784dd56f53aa90bf34431ab4f0710cAndreas Huber kKeyThumbnailTime = 'thbT', // int64_t (usecs) 88dcd25efb46c41c8d24a0a9cf61fb57f84149709eGloria Wang kKeyTrackID = 'trID', 89dcd25efb46c41c8d24a0a9cf61fb57f84149709eGloria Wang kKeyIsDRM = 'idrm', // int32_t (bool) 90b636abde14f2612ea236257846b9ab15d87d4623Marco Nelissen kKeyEncoderDelay = 'encd', // int32_t (frames) 91b636abde14f2612ea236257846b9ab15d87d4623Marco Nelissen kKeyEncoderPadding = 'encp', // int32_t (frames) 92fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber 93fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyAlbum = 'albu', // cstring 94fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyArtist = 'arti', // cstring 9566ac4df65516ebfd0e500bfca75dc4b5ef8d674eMarco Nelissen kKeyAlbumArtist = 'aart', // cstring 96fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyComposer = 'comp', // cstring 97fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyGenre = 'genr', // cstring 98fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyTitle = 'titl', // cstring 99fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyYear = 'year', // cstring 100fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyAlbumArt = 'albA', // compressed image data 101fc9ba09e3bb368f823d473f5e2bb9aa32dba6289Andreas Huber kKeyAlbumArtMIME = 'alAM', // cstring 102bd4bc59262df90dc85752684a1d4a92833a535a3Andreas Huber kKeyAuthor = 'auth', // cstring 103bd4bc59262df90dc85752684a1d4a92833a535a3Andreas Huber kKeyCDTrackNumber = 'cdtr', // cstring 1046c8a9a4132337a3419a72a735f0b40df0b82061fMarco Nelissen kKeyDiscNumber = 'dnum', // cstring 105bd4bc59262df90dc85752684a1d4a92833a535a3Andreas Huber kKeyDate = 'date', // cstring 10672b8c5ae6a5f97a4fcfc6d23d33159d6ae50179cAndreas Huber kKeyWriter = 'writ', // cstring 10711f8109ad8646d3acd9a0987613229cde59d52c1Marco Nelissen kKeyCompilation = 'cpil', // cstring 1084948818cb91176df74c972ac27b2f392b5d148bcJames Dong kKeyLocation = 'loc ', // cstring 1098f5f2fcee5c12d08df71d17017410c50951fc2e3James Dong kKeyTimeScale = 'tmsl', // int32_t 1108cfad968d5ec429b033caff9743f1ef15090be61Chong Zhang kKeyCaptureFramerate = 'capF', // float (capture fps) 11193d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong 112145bfe5eb3e08c9689c28f6bf3287a979438b04bJames Dong // video profile and level 113145bfe5eb3e08c9689c28f6bf3287a979438b04bJames Dong kKeyVideoProfile = 'vprf', // int32_t 114145bfe5eb3e08c9689c28f6bf3287a979438b04bJames Dong kKeyVideoLevel = 'vlev', // int32_t 115145bfe5eb3e08c9689c28f6bf3287a979438b04bJames Dong 11693d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // Set this key to enable authoring files in 64-bit offset 11793d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong kKey64BitFileOffset = 'fobt', // int32_t (bool) 118b4d5320bda29cd9694461c9b61d0211f801ff0afJames Dong kKey2ByteNalLength = '2NAL', // int32_t (bool) 11993d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong 12093d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // Identify the file output format for authoring 12193d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // Please see <media/mediarecorder.h> for the supported 12293d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // file output formats. 12393d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong kKeyFileType = 'ftyp', // int32_t 12493d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong 12593d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // Track authoring progress status 12693d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong // kKeyTrackTimeStatus is used to track progress in elapsed time 12793d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong kKeyTrackTimeStatus = 'tktm', // int64_t 12893d6b102a13afa23bfa80d74c399d93d542e6ad6James Dong 129e756d9753c7cffe2e9731a31fa98a3e8f37151c9ztenghui kKeyRealTimeRecording = 'rtrc', // bool (int32_t) 1300dff606f42292b8a31b9eee842877f9875279dabJames Dong kKeyNumBuffers = 'nbbf', // int32_t 131e259531ce59ab1f31de5a23124b22536f6a5a767James Dong 1328ae49d87b98d57d6758b0c51b95e28a6581a79f1Andreas Huber // Ogg files can be tagged to be automatically looping... 1338ae49d87b98d57d6758b0c51b95e28a6581a79f1Andreas Huber kKeyAutoLoop = 'autL', // bool (int32_t) 134db6222212528637d8f2afa7f49fc3c8c915bafbeAndreas Huber 135db6222212528637d8f2afa7f49fc3c8c915bafbeAndreas Huber kKeyValidSamples = 'valD', // int32_t 1362b82e9652ba049e754c2cc74e381282f231d5fbfAndreas Huber 1372b82e9652ba049e754c2cc74e381282f231d5fbfAndreas Huber kKeyIsUnreadable = 'unre', // bool (int32_t) 1386a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis 1396a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis // An indication that a video buffer has been rendered. 1406a9da9fc558263548ebfbae2cbf177eb7454a41bJamie Gennis kKeyRendered = 'rend', // bool (int32_t) 1417a1e3e81264189e23a1db2b174e1b5a5d4c7d1c3Gloria Wang 1427a1e3e81264189e23a1db2b174e1b5a5d4c7d1c3Gloria Wang // The language code for this media 1437a1e3e81264189e23a1db2b174e1b5a5d4c7d1c3Gloria Wang kKeyMediaLanguage = 'lang', // cstring 1443b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang 1453b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang // To store the timed text format data 1463b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang kKeyTextFormatData = 'text', // raw data 1470bb6b4c5da2451ee0973372b0a3858b15c742689Andreas Huber 1480bb6b4c5da2451ee0973372b0a3858b15c742689Andreas Huber kKeyRequiresSecureBuffers = 'secu', // bool (int32_t) 149ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber 150ed3e3e046840d5bf1ca84a8c0cc097425e89d6d6Andreas Huber kKeyIsADTS = 'adts', // bool (int32_t) 151db170bb1cae145d07efc803a3c208963de0c6087Eric Laurent kKeyAACAOT = 'aaot', // int32_t 1525892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber 1535892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // If a MediaBuffer's data represents (at least partially) encrypted 1545892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // data, the following fields aid in decryption. 1555892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // The data can be thought of as pairs of plain and encrypted data 1565892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // fragments, i.e. plain and encrypted data alternate. 1575892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // The first fragment is by convention plain data (if that's not the 1585892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // case, simply specify plain fragment size of 0). 1595892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // kKeyEncryptedSizes and kKeyPlainSizes each map to an array of 1605892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // size_t values. The sum total of all size_t values of both arrays 1615892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // must equal the amount of data (i.e. MediaBuffer's range_length()). 1625892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // If both arrays are present, they must be of the same size. 1635892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // If only encrypted sizes are present it is assumed that all 1645892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // plain sizes are 0, i.e. all fragments are encrypted. 1655892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // To programmatically set these array, use the MetaData::setData API, i.e. 1665892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // const size_t encSizes[]; 1675892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // meta->setData( 1685892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // kKeyEncryptedSizes, 0 /* type */, encSizes, sizeof(encSizes)); 1695892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber // A plain sizes array by itself makes no sense. 1705892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber kKeyEncryptedSizes = 'encr', // size_t[] 1715892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber kKeyPlainSizes = 'plai', // size_t[] 1725892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber kKeyCryptoKey = 'cryK', // uint8_t[16] 1735892e3e173f20e01956f318ae7dce43d46c5fc1dAndreas Huber kKeyCryptoIV = 'cryI', // uint8_t[16] 174f69e53033f23f9f70fcdb28a3c2e650de0147459Andreas Huber kKeyCryptoMode = 'cryM', // int32_t 1755544c66ba0aa789a997b376df503a5ffae425dc7Marco Nelissen 1765544c66ba0aa789a997b376df503a5ffae425dc7Marco Nelissen kKeyCryptoDefaultIVSize = 'cryS', // int32_t 1775544c66ba0aa789a997b376df503a5ffae425dc7Marco Nelissen 1785544c66ba0aa789a997b376df503a5ffae425dc7Marco Nelissen kKeyPssh = 'pssh', // raw data 179bc7aae4ff7e72e5bf0fa888f946835840a4357bbChong Zhang kKeyCASystemID = 'caid', // int32_t 180bc7aae4ff7e72e5bf0fa888f946835840a4357bbChong Zhang kKeyCASessionID = 'seid', // raw data 181dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih 182dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih // Please see MediaFormat.KEY_IS_AUTOSELECT. 183dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih kKeyTrackIsAutoselect = 'auto', // bool (int32_t) 184dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih // Please see MediaFormat.KEY_IS_DEFAULT. 185dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih kKeyTrackIsDefault = 'dflt', // bool (int32_t) 186dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih // Similar to MediaFormat.KEY_IS_FORCED_SUBTITLE but pertains to av tracks as well. 187dd235727a1b4e283deeb581559f99c2c8889da07Robert Shih kKeyTrackIsForced = 'frcd', // bool (int32_t) 188f8bd851cc652501239a8e3759b21890dfa2afdeaRobert Shih 189f8bd851cc652501239a8e3759b21890dfa2afdeaRobert Shih // H264 supplemental enhancement information offsets/sizes 190f8bd851cc652501239a8e3759b21890dfa2afdeaRobert Shih kKeySEI = 'sei ', // raw data 1913694d7cf40d1645bf05246cf38595eed606bb650Jaesung Chung 1923694d7cf40d1645bf05246cf38595eed606bb650Jaesung Chung // MPEG user data offsets 1933694d7cf40d1645bf05246cf38595eed606bb650Jaesung Chung kKeyMpegUserData = 'mpud', // size_t[] 1944f2559d3cdeb7187dedca186d5abc65af4bdb031Robert Shih 1954f2559d3cdeb7187dedca186d5abc65af4bdb031Robert Shih // Size of NALU length in mkv/mp4 1964f2559d3cdeb7187dedca186d5abc65af4bdb031Robert Shih kKeyNalLengthSize = 'nals', // int32_t 197caaa15b1c8ca1632100cf8e64e82007239210339Ronghua Wu 198caaa15b1c8ca1632100cf8e64e82007239210339Ronghua Wu // HDR related 199d637d296bb0954756d3d231633fad73fadd70316Lajos Molnar kKeyHdrStaticInfo = 'hdrS', // HDRStaticInfo 200caaa15b1c8ca1632100cf8e64e82007239210339Ronghua Wu 201caaa15b1c8ca1632100cf8e64e82007239210339Ronghua Wu // color aspects 202caaa15b1c8ca1632100cf8e64e82007239210339Ronghua Wu kKeyColorRange = 'cRng', // int32_t, color range, value defined by ColorAspects.Range 203caaa15b1c8ca1632100cf8e64e82007239210339Ronghua Wu kKeyColorPrimaries = 'cPrm', // int32_t, 204caaa15b1c8ca1632100cf8e64e82007239210339Ronghua Wu // color Primaries, value defined by ColorAspects.Primaries 205caaa15b1c8ca1632100cf8e64e82007239210339Ronghua Wu kKeyTransferFunction = 'tFun', // int32_t, 206caaa15b1c8ca1632100cf8e64e82007239210339Ronghua Wu // transfer Function, value defined by ColorAspects.Transfer. 207caaa15b1c8ca1632100cf8e64e82007239210339Ronghua Wu kKeyColorMatrix = 'cMtx', // int32_t, 208caaa15b1c8ca1632100cf8e64e82007239210339Ronghua Wu // color Matrix, value defined by ColorAspects.MatrixCoeffs. 2094dbff11975e737482537e1636051690188f3fbc4Praveen Chavan kKeyTemporalLayerId = 'iLyr', // int32_t, temporal layer-id. 0-based (0 => base layer) 2104dbff11975e737482537e1636051690188f3fbc4Praveen Chavan kKeyTemporalLayerCount = 'cLyr', // int32_t, number of temporal layers encoded 21120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 21220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 21320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberenum { 21420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber kTypeESDS = 'esds', 21520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber kTypeAVCC = 'avcc', 2163b5a6b9fa6c6825a1d0b441429e2bb365b259827Harish Mahendrakar kTypeHVCC = 'hvcc', 217244ba87d20aeb29c9cad727820fa1e803ec3643cJames Dong kTypeD263 = 'd263', 21820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 21920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 22020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberclass MetaData : public RefBase { 22120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberpublic: 22220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber MetaData(); 22320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber MetaData(const MetaData &from); 22420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 22520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber enum Type { 22620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber TYPE_NONE = 'none', 22720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber TYPE_C_STRING = 'cstr', 22820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber TYPE_INT32 = 'in32', 22948c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber TYPE_INT64 = 'in64', 23020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber TYPE_FLOAT = 'floa', 23120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber TYPE_POINTER = 'ptr ', 232f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber TYPE_RECT = 'rect', 23320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber }; 23420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 23520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void clear(); 23620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool remove(uint32_t key); 23720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 23820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool setCString(uint32_t key, const char *value); 23920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool setInt32(uint32_t key, int32_t value); 24048c948b1137e7bbdb161b51908657ab72ac5e2daAndreas Huber bool setInt64(uint32_t key, int64_t value); 24120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool setFloat(uint32_t key, float value); 24220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool setPointer(uint32_t key, void *value); 24320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 244f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber bool setRect( 245f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber uint32_t key, 246f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber int32_t left, int32_t top, 247f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber int32_t right, int32_t bottom); 248f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 2492cf9c5073ca3342ee52673ad68763fadd2c2be79James Dong bool findCString(uint32_t key, const char **value); 2502cf9c5073ca3342ee52673ad68763fadd2c2be79James Dong bool findInt32(uint32_t key, int32_t *value); 2512cf9c5073ca3342ee52673ad68763fadd2c2be79James Dong bool findInt64(uint32_t key, int64_t *value); 2522cf9c5073ca3342ee52673ad68763fadd2c2be79James Dong bool findFloat(uint32_t key, float *value); 2532cf9c5073ca3342ee52673ad68763fadd2c2be79James Dong bool findPointer(uint32_t key, void **value); 25420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 255f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber bool findRect( 256f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber uint32_t key, 257f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber int32_t *left, int32_t *top, 2582cf9c5073ca3342ee52673ad68763fadd2c2be79James Dong int32_t *right, int32_t *bottom); 259f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 26020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool setData(uint32_t key, uint32_t type, const void *data, size_t size); 26120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 26220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool findData(uint32_t key, uint32_t *type, 26320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber const void **data, size_t *size) const; 26420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 265328abde67f57c026ac44e927f9244c40832499c8Oscar Rydhé bool hasData(uint32_t key) const; 266328abde67f57c026ac44e927f9244c40832499c8Oscar Rydhé 26769d3d8a9540b0da787ea0beccad2517f057dd54dMarco Nelissen String8 toString() const; 268feba11fd788c99b0b63e0bce724730817688d82fMarco Nelissen void dumpToLog() const; 269feba11fd788c99b0b63e0bce724730817688d82fMarco Nelissen 270b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen status_t writeToParcel(Parcel &parcel); 271b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen status_t updateFromParcel(const Parcel &parcel); 272b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen static sp<MetaData> createFromParcel(const Parcel &parcel); 273b2487f03f12dcafdb801fc0007c8df8412397f44Marco Nelissen 27420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberprotected: 27520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber virtual ~MetaData(); 27620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 27720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huberprivate: 27820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber struct typed_data { 27920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber typed_data(); 28020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber ~typed_data(); 28120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 28220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber typed_data(const MetaData::typed_data &); 28320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber typed_data &operator=(const MetaData::typed_data &); 28420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 28520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void clear(); 28620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void setData(uint32_t type, const void *data, size_t size); 28720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void getData(uint32_t *type, const void **data, size_t *size) const; 28869d3d8a9540b0da787ea0beccad2517f057dd54dMarco Nelissen // may include hexdump of binary data if verbose=true 28969d3d8a9540b0da787ea0beccad2517f057dd54dMarco Nelissen String8 asString(bool verbose) const; 29020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 29120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber private: 29220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber uint32_t mType; 29320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber size_t mSize; 29420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 29520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber union { 29620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void *ext_data; 29720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber float reservoir; 29820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } u; 29920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 30020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber bool usesReservoir() const { 30120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return mSize <= sizeof(u.reservoir); 30220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 30320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 304f26400c9d01a0e2f71690d5ebc644270f098d590Marco Nelissen void *allocateStorage(size_t size); 30520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void freeStorage(); 30620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 30720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber void *storage() { 30820111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return usesReservoir() ? &u.reservoir : u.ext_data; 30920111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 31020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 31120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber const void *storage() const { 31220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber return usesReservoir() ? &u.reservoir : u.ext_data; 31320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber } 31420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber }; 31520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 316f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber struct Rect { 317f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber int32_t mLeft, mTop, mRight, mBottom; 318f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber }; 319f5ab57c2d5e02af7483c94eddb177e4f5c9e9892Andreas Huber 32020111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber KeyedVector<uint32_t, typed_data> mItems; 32120111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 32220111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber // MetaData &operator=(const MetaData &); 32320111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber}; 32420111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 32520111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber} // namespace android 32620111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber 32720111aa043c5f404472bc63b90bc5aad906b1101Andreas Huber#endif // META_DATA_H_ 328