-
Notifications
You must be signed in to change notification settings - Fork 230
/
AP_AtomDefinitions.h
340 lines (277 loc) · 23.4 KB
/
AP_AtomDefinitions.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
//==================================================================//
/*
AtomicParsley - AtomDefs.h
AtomicParsley is GPL software; you can freely distribute,
redistribute, modify & use under the terms of the GNU General
Public License; either version 2 or its successor.
AtomicParsley is distributed under the GPL "AS IS", without
any warranty; without the implied warranty of merchantability
or fitness for either an expressed or implied particular purpose.
Please see the included GNU General Public License (GPL) for
your rights and further details; see the file COPYING. If you
cannot, write to the Free Software Foundation, 59 Temple Place
Suite 330, Boston, MA 02111-1307, USA. Or www.fsf.org
Copyright ©2006-2007 puck_lock
with contributions from others; see the CREDITS file
*/
//==================================================================//
/*
AtomicParsley is a lightweight command line program for reading,
parsing and setting metadata into MPEG-4 files, in particular,
iTunes-style metadata.
Original: https://sourceforge.net/projects/atomicparsley/
Upstream: https://bitbucket.org/wez/atomicparsley
Mirror : https://github.com/wez/atomicparsley
The Original code base has been abandoned.
All new work is done in the Upstream fork.
Note: AtomicParsley sources use tabs with a Tab Stop of 2 !
*/
//==================================================================//
/*
MP4RA - MP4-family Registration Authority
Official Registration Authority for ISOBMFF family of standards.
Website: http://mp4ra.org/
ISOBMFF - ISO Base Media File Format
Reference Software: https://github.com/MPEGGroup/isobmff
*/
//==================================================================//
#ifndef ATOM_DEFINITIONS_H
#define ATOM_DEFINITIONS_H
// Excerpt from ap_types.h:
enum {
PARENT_ATOM = 0, //container atom
SIMPLE_PARENT_ATOM = 1,
DUAL_STATE_ATOM = 2, //acts as both parent (contains other atoms) & child (carries data)
CHILD_ATOM = 3, //atom that does NOT contain any children
UNKNOWN_ATOM_TYPE = 4
};
enum {
REQUIRED_ONCE = 30, //means total of 1 atom per file (or total of 1 if parent atom is required to be present)
REQUIRED_ONE = 31, //means 1 atom per container atom; totalling many per file (or required present if optional parent atom is present)
REQUIRED_VARIABLE = 32, //means 1 or more atoms per container atom are required to be present
PARENT_SPECIFIC = 33, //means (iTunes-style metadata) the atom defines how many are present; most are MAX 1 'data' atoms; 'covr' is ?unlimited?
OPTIONAL_ONCE = 34, //means total of 1 atom per file, but not required
OPTIONAL_ONE = 35, //means 1 atom per container atom but not required; many may be present in a file
OPTIONAL_MANY = 36, //means more than 1 occurrence per container atom
REQ_FAMILIAL_ONE = OPTIONAL_ONE, //means that one of the family of atoms defined by the spec is required by the parent atom
UKNOWN_REQUIREMENTS = 38
};
enum {
SIMPLE_ATOM = 50,
VERSIONED_ATOM = 51,
EXTENDED_ATOM = 52,
PACKED_LANG_ATOM = 53,
UNKNOWN_ATOM = 59
};
// Structure that defines the known atoms used by the mpeg-4 family of specifications.
typedef struct {
const char* known_atom_name;
const char* known_parent_atoms[5]; //max known to be tested
unsigned char container_state;
signed char presence_requirements;
unsigned char box_type;
} AtomDefinition;
// Derived from AtomDefs.h:
// Changed entries are commented with "//UNTRUNC:".
const AtomDefinition KnownAtoms[] = {
//name parent atom(s) container number box_type
{"<()>", {"_ANY_LEVEL"}, UNKNOWN_ATOM_TYPE, UKNOWN_REQUIREMENTS, UNKNOWN_ATOM }, //our unknown atom (self-defined)
{"ftyp", {"FILE_LEVEL"}, CHILD_ATOM, REQUIRED_ONCE, SIMPLE_ATOM },
{"moov", {"FILE_LEVEL"}, PARENT_ATOM, REQUIRED_ONCE, SIMPLE_ATOM },
{"mdat", {"FILE_LEVEL"}, CHILD_ATOM, OPTIONAL_MANY, SIMPLE_ATOM },
{"pdin", {"FILE_LEVEL"}, CHILD_ATOM, OPTIONAL_ONCE, VERSIONED_ATOM },
{"moof", {"FILE_LEVEL"}, PARENT_ATOM, OPTIONAL_MANY, SIMPLE_ATOM },
{"mfhd", {"moof"}, CHILD_ATOM, REQUIRED_ONE, VERSIONED_ATOM },
{"traf", {"moof"}, PARENT_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"tfhd", {"traf"}, CHILD_ATOM, REQUIRED_ONE, VERSIONED_ATOM },
{"trun", {"traf"}, CHILD_ATOM, REQUIRED_ONE, VERSIONED_ATOM },
{"mfra", {"FILE_LEVEL"}, PARENT_ATOM, OPTIONAL_ONCE, SIMPLE_ATOM },
{"tfra", {"mfra"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"mfro", {"mfra"}, CHILD_ATOM, REQUIRED_ONE, VERSIONED_ATOM },
{"free", {"_ANY_LEVEL"}, CHILD_ATOM, OPTIONAL_MANY, SIMPLE_ATOM },
{"skip", {"_ANY_LEVEL"}, CHILD_ATOM, OPTIONAL_MANY, SIMPLE_ATOM },
{"uuid", {"_ANY_LEVEL"}, CHILD_ATOM, REQUIRED_ONCE, EXTENDED_ATOM },
{"mvhd", {"moov"}, CHILD_ATOM, REQUIRED_ONCE, VERSIONED_ATOM },
{"iods", {"moov"}, CHILD_ATOM, OPTIONAL_ONCE, VERSIONED_ATOM },
{"drm ", {"moov"}, CHILD_ATOM, OPTIONAL_ONCE, VERSIONED_ATOM }, // 3gp/MobileMP4
{"trak", {"moov"}, PARENT_ATOM, OPTIONAL_MANY, SIMPLE_ATOM },
{"tkhd", {"trak"}, CHILD_ATOM, OPTIONAL_MANY, VERSIONED_ATOM },
{"tref", {"trak"}, PARENT_ATOM, OPTIONAL_MANY, SIMPLE_ATOM },
{"mdia", {"trak"}, PARENT_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"tapt", {"trak"}, PARENT_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"clef", {"tapt"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"prof", {"tapt"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"enof", {"tapt"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"mdhd", {"mdia"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"minf", {"mdia"}, PARENT_ATOM, REQUIRED_ONE, SIMPLE_ATOM },
{"hdlr", {"mdia", "meta", "minf"}, CHILD_ATOM, REQUIRED_ONE, VERSIONED_ATOM }, //minf parent present in chapterized
{"vmhd", {"minf"}, CHILD_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"smhd", {"minf"}, CHILD_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"hmhd", {"minf"}, CHILD_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"nmhd", {"minf"}, CHILD_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"gmhd", {"minf"}, CHILD_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM }, //present in chapterized
{"dinf", {"minf", "meta"}, PARENT_ATOM, OPTIONAL_ONE, SIMPLE_ATOM }, //required in minf
{"dref", {"dinf"}, CHILD_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM }, //UNTRUNC: container DUAL_STATE_ATOM -> CHILD_ATOM, nunmber REQUIRED_ONE -> REQ_FAMILIAL_ONE
{"url ", {"dinf"}, CHILD_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM }, //UNTRUNC: parent "dref" -> "dinf", number OPTIONAL_MANY -> REQ_FAMILIAL_ONE
{"urn ", {"dinf"}, CHILD_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM }, //UNTRUNC: parent "dref" -> "dinf", number OPTIONAL_MANY -> REQ_FAMILIAL_ONE
//{"alis", {"dref"}, CHILD_ATOM, OPTIONAL_MANY, VERSIONED_ATOM }, //UNTRUNC: Removed Entry
//{"cios", {"dref"}, CHILD_ATOM, OPTIONAL_MANY, VERSIONED_ATOM }, //UNTRUNC: Removed Entry
{"stbl", {"minf"}, PARENT_ATOM, REQUIRED_ONE, SIMPLE_ATOM },
{"stts", {"stbl"}, CHILD_ATOM, REQUIRED_ONE, VERSIONED_ATOM },
{"ctts", {"stbl"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"cslg", {"stbl"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM }, //UNTRUNC: New Entry
{"stsd", {"stbl"}, DUAL_STATE_ATOM, REQUIRED_ONE, VERSIONED_ATOM },
{"stsz", {"stbl"}, CHILD_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"stz2", {"stbl"}, CHILD_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"stsc", {"stbl"}, CHILD_ATOM, REQUIRED_ONE, VERSIONED_ATOM },
{"stco", {"stbl"}, CHILD_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"co64", {"stbl"}, CHILD_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"stss", {"stbl"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"stsh", {"stbl"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"stdp", {"stbl"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"padb", {"stbl"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"sdtp", {"stbl", "traf"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"sbgp", {"stbl", "traf"}, CHILD_ATOM, OPTIONAL_MANY, VERSIONED_ATOM },
{"sbgp", {"stbl"}, CHILD_ATOM, OPTIONAL_MANY, VERSIONED_ATOM },
{"stps", {"stbl"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"edts", {"trak"}, PARENT_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"elst", {"edts"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"udta", {"moov", "trak"}, PARENT_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"meta", {"FILE_LEVEL", "moov", "trak", "udta"}, DUAL_STATE_ATOM, OPTIONAL_ONE, VERSIONED_ATOM }, //optionally contains info
{"mvex", {"moov"}, PARENT_ATOM, OPTIONAL_ONCE, SIMPLE_ATOM },
{"mehd", {"mvex"}, CHILD_ATOM, OPTIONAL_ONCE, VERSIONED_ATOM },
{"trex", {"mvex"}, CHILD_ATOM, REQUIRED_ONE, VERSIONED_ATOM },
//{"stsl", {"????"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM }, //contained by a sample entry box
{"subs", {"stbl", "traf"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"xml ", {"meta"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"bxml", {"meta"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"iloc", {"meta"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"pitm", {"meta"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"ipro", {"meta"}, PARENT_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"iinf", {"meta"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM }, //UNTRUNC: container DUAL_STATE_ATOM -> CHILD_ATOM
{"infe", {"meta"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM }, //UNTRUNC: parent "iinf" -> "meta"
{"sinf", {"ipro", "drms", "drmi"}, PARENT_ATOM, REQUIRED_ONE, SIMPLE_ATOM }, //parent atom is also "Protected Sample Entry"
{"frma", {"sinf"}, CHILD_ATOM, REQUIRED_ONE, SIMPLE_ATOM },
{"imif", {"sinf"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"schm", {"sinf", "srpp"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"schi", {"sinf", "srpp"}, DUAL_STATE_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"skcr", {"sinf"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"user", {"schi"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"key ", {"schi"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM }, //could be required in 'drms'/'drmi'
{"iviv", {"schi"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"righ", {"schi"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"name", {"schi"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"priv", {"schi"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"iKMS", {"schi"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM }, // 'iAEC', '264b', 'iOMA', 'ICSD'
{"iSFM", {"schi"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"iSLT", {"schi"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM }, //boxes with 'k***' are also here; reserved
{"IKEY", {"tref"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"hint", {"tref"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"dpnd", {"tref"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"ipir", {"tref"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"mpod", {"tref"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"sync", {"tref"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"chap", {"tref"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM }, //?possible versioned?
{"ipmc", {"moov", "meta"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM },
{"tims", {"rtp "}, CHILD_ATOM, REQUIRED_ONE, SIMPLE_ATOM },
{"tsro", {"rtp "}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"snro", {"rtp "}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"srpp", {"srtp"}, CHILD_ATOM, REQUIRED_ONE, VERSIONED_ATOM },
{"hnti", {"udta"}, PARENT_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"rtp ", {"hnti"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM }, //'rtp ' is defined twice in different containers
{"sdp ", {"hnti"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"hinf", {"udta"}, PARENT_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"name", {"udta"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"trpy", {"hinf"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"nump", {"hinf"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"tpyl", {"hinf"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"totl", {"hinf"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"npck", {"hinf"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"maxr", {"hinf"}, CHILD_ATOM, OPTIONAL_MANY, SIMPLE_ATOM },
{"dmed", {"hinf"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"dimm", {"hinf"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"drep", {"hinf"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"tmin", {"hinf"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"tmax", {"hinf"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"pmax", {"hinf"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"dmax", {"hinf"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"payt", {"hinf"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"tpay", {"hinf"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
{"drms", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"drmi", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"alac", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"mp4a", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"mp4s", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"mp4v", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"avc1", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"avcp", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"text", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"jpeg", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"tx3g", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"rtp ", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM }, //"rtp " occurs twice; disparate meanings
{"srtp", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, SIMPLE_ATOM },
{"enca", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"encv", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"enct", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"encs", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"samr", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"sawb", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"sawp", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"s263", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"sevc", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"sqcp", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"ssmv", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
{"tmcd", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM },
//{"mjp2", {"stsd"}, DUAL_STATE_ATOM, REQ_FAMILIAL_ONE, VERSIONED_ATOM }, //mjpeg2000 //UNTRUNC: Removed Entry
{"alac", {"alac"}, CHILD_ATOM, REQUIRED_ONE, SIMPLE_ATOM },
{"avcC", {"avc1", "drmi"}, CHILD_ATOM, REQUIRED_ONE, SIMPLE_ATOM },
{"damr", {"samr", "sawb"}, CHILD_ATOM, REQUIRED_ONE, SIMPLE_ATOM },
{"d263", {"s263"}, CHILD_ATOM, REQUIRED_ONE, SIMPLE_ATOM },
{"dawp", {"sawp"}, CHILD_ATOM, REQUIRED_ONE, SIMPLE_ATOM },
{"devc", {"sevc"}, CHILD_ATOM, REQUIRED_ONE, SIMPLE_ATOM },
{"dqcp", {"sqcp"}, CHILD_ATOM, REQUIRED_ONE, SIMPLE_ATOM },
{"dsmv", {"ssmv"}, CHILD_ATOM, REQUIRED_ONE, SIMPLE_ATOM },
{"bitr", {"d263"}, CHILD_ATOM, REQUIRED_ONE, SIMPLE_ATOM },
{"btrt", {"avc1"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM }, //found in NeroAVC
{"m4ds", {"avc1"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM }, //?possible versioned?
{"ftab", {"tx3g"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM },
//{"jp2h", {"mjp2"}, PARENT_ATOM, OPTIONAL_ONE, SIMPLE_ATOM }, //mjpeg2000 //UNTRUNC: Removed Entry
//{"ihdr", {"jp2h"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM }, //mjpeg2000 //UNTRUNC: Removed Entry
//{"colr", {"jp2h"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM }, //mjpeg2000 //UNTRUNC: Removed Entry
//{"fiel", {"mjp2"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM }, //mjpeg2000 //UNTRUNC: Removed Entry
//{"jp2p", {"mjp2"}, CHILD_ATOM, OPTIONAL_ONE, VERSIONED_ATOM }, //mjpeg2000 //UNTRUNC: Removed Entry
//{"jsub", {"mjp2"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM }, //mjpeg2000 //UNTRUNC: Removed Entry
//{"orfo", {"mjp2"}, CHILD_ATOM, OPTIONAL_ONE, SIMPLE_ATOM }, //mjpeg2000 //UNTRUNC: Removed Entry
{"cprt", {"udta"}, CHILD_ATOM, OPTIONAL_MANY, PACKED_LANG_ATOM }, //the only ISO defined metadata tag; also a 3gp asset
{"titl", {"udta"}, CHILD_ATOM, OPTIONAL_MANY, PACKED_LANG_ATOM }, //3gp assets
{"auth", {"udta"}, CHILD_ATOM, OPTIONAL_MANY, PACKED_LANG_ATOM },
{"perf", {"udta"}, CHILD_ATOM, OPTIONAL_MANY, PACKED_LANG_ATOM },
{"gnre", {"udta"}, CHILD_ATOM, OPTIONAL_MANY, PACKED_LANG_ATOM },
{"dscp", {"udta"}, CHILD_ATOM, OPTIONAL_MANY, PACKED_LANG_ATOM },
{"albm", {"udta"}, CHILD_ATOM, OPTIONAL_MANY, PACKED_LANG_ATOM },
{"yrrc", {"udta"}, CHILD_ATOM, OPTIONAL_MANY, VERSIONED_ATOM },
{"rtng", {"udta"}, CHILD_ATOM, OPTIONAL_MANY, PACKED_LANG_ATOM },
{"clsf", {"udta"}, CHILD_ATOM, OPTIONAL_MANY, PACKED_LANG_ATOM },
{"kywd", {"udta"}, CHILD_ATOM, OPTIONAL_MANY, PACKED_LANG_ATOM },
{"loci", {"udta"}, CHILD_ATOM, OPTIONAL_MANY, PACKED_LANG_ATOM },
{"ID32", {"meta"}, CHILD_ATOM, OPTIONAL_MANY, PACKED_LANG_ATOM }, //id3v2 tag
//{"tsel", {"udta"}, CHILD_ATOM, OPTIONAL_MANY, SIMPLE_ATOM }, //but only at track level in a 3gp file //UNTRUNC: Removed Entry
//{"chpl", {"udta"}, CHILD_ATOM, OPTIONAL_ONCE, VERSIONED_ATOM }, //Nero - seems to be versioned
//{"ndrm", {"udta"}, CHILD_ATOM, OPTIONAL_ONCE, VERSIONED_ATOM }, //Nero - seems to be versioned
//{"tags", {"udta"}, CHILD_ATOM, OPTIONAL_ONCE, SIMPLE_ATOM }, //Another Nero-Creationª
// ...so if they claim that "tags doesn't have any children",
// why does nerotags.exe say "tshd atom"? If 'tags' doesn't
// have any children, then tshd can't be an atom....
// Clearly, they are EternallyRightª and everyone else is
// always wrong.
//Pish! Seems that Nero is simply unable to register any atoms.
{"ilst", {"meta"}, PARENT_ATOM, OPTIONAL_ONCE, SIMPLE_ATOM }, //iTunes metadata container
{"----", {"ilst"}, PARENT_ATOM, OPTIONAL_MANY, SIMPLE_ATOM }, //reverse dns metadata
{"mean", {"----"}, CHILD_ATOM, REQUIRED_ONE, VERSIONED_ATOM },
{"name", {"----"}, CHILD_ATOM, REQUIRED_ONE, VERSIONED_ATOM },
//{".><.", {"dref"}, CHILD_ATOM, OPTIONAL_MANY, VERSIONED_ATOM }, //support any future named child to dref; keep 4th from end; manual return //UNTRUNC: Removed Entry
{"esds", {"SAMPLE_DESC"}, CHILD_ATOM, REQUIRED_ONE, SIMPLE_ATOM }, //multiple parents; keep 3rd from end; manual return
//{"(..)", {"ilst"}, PARENT_ATOM, OPTIONAL_ONE, SIMPLE_ATOM }, //multiple parents; keep 2nd from end; manual return //UNTRUNC: Removed Entry
//{"data", {"ITUNES_METADATA"}, CHILD_ATOM, PARENT_SPECIFIC, VERSIONED_ATOM } //multiple parents //UNTRUNC: Removed Entry
};
#endif // ATOM_DEFINITIONS_H