annotate Plugins/Input/aac/libmp4v2/mp4atom.h @ 790:8f437afc4f4a trunk

[svn] - more sanity checking
author nenolod
date Fri, 03 Mar 2006 20:09:52 -0800
parents f2dc045d2327
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
2 * The contents of this file are subject to the Mozilla Public
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
3 * License Version 1.1 (the "License"); you may not use this file
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
4 * except in compliance with the License. You may obtain a copy of
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
5 * the License at http://www.mozilla.org/MPL/
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
6 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
7 * Software distributed under the License is distributed on an "AS
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
9 * implied. See the License for the specific language governing
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
10 * rights and limitations under the License.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
11 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
12 * The Original Code is MPEG4IP.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
13 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
14 * The Initial Developer of the Original Code is Cisco Systems Inc.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
15 * Portions created by Cisco Systems Inc. are
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
16 * Copyright (C) Cisco Systems Inc. 2001 - 2004. All Rights Reserved.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
17 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
18 * 3GPP features implementation is based on 3GPP's TS26.234-v5.60,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
19 * and was contributed by Ximpo Group Ltd.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
20 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
21 * Portions created by Ximpo Group Ltd. are
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
22 * Copyright (C) Ximpo Group Ltd. 2003, 2004. All Rights Reserved.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
23 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
24 * Contributor(s):
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
25 * Dave Mackie dmackie@cisco.com
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
26 * Ximpo Group Ltd. mp4v2@ximpo.com
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
27 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
28
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
29 #ifndef __MP4_ATOM_INCLUDED__
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
30 #define __MP4_ATOM_INCLUDED__
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
31
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
32 class MP4Atom;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
33 MP4ARRAY_DECL(MP4Atom, MP4Atom*);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
34
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
35 #define Required true
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
36 #define Optional false
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
37 #define OnlyOne true
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
38 #define Many false
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
39 #define Counted true
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
40
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
41 /* helper class */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
42 class MP4AtomInfo {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
43 public:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
44 MP4AtomInfo() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
45 m_name = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
46 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
47 MP4AtomInfo(const char* name, bool mandatory, bool onlyOne);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
48
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
49 const char* m_name;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
50 bool m_mandatory;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
51 bool m_onlyOne;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
52 u_int32_t m_count;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
53 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
54
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
55 MP4ARRAY_DECL(MP4AtomInfo, MP4AtomInfo*);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
56
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
57 class MP4Atom {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
58 public:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
59 MP4Atom(const char* type = NULL);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
60 virtual ~MP4Atom();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
62 static MP4Atom* ReadAtom(MP4File* pFile, MP4Atom* pParentAtom);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
63 static MP4Atom* CreateAtom(const char* type);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
64 static bool IsReasonableType(const char* type);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
65
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
66 MP4File* GetFile() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
67 return m_pFile;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
68 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
69 void SetFile(MP4File* pFile) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
70 m_pFile = pFile;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
71 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
72
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
73 u_int64_t GetStart() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
74 return m_start;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
75 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
76 void SetStart(u_int64_t pos) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
77 m_start = pos;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
78 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
79
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
80 u_int64_t GetEnd() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
81 return m_end;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
82 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
83 void SetEnd(u_int64_t pos) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
84 m_end = pos;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
85 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
86
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
87 u_int64_t GetSize() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
88 return m_size;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
89 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
90 void SetSize(u_int64_t size) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
91 m_size = size;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
92 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
93
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
94 const char* GetType() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
95 return m_type;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
96 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
97 void SetType(const char* type) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
98 if (type && *type != '\0') {
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
99 // not needed ASSERT(strlen(type) == 4);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
100 memcpy(m_type, type, 4);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
101 m_type[4] = '\0';
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
102 } else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
103 memset(m_type, 0, 5);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
104 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
105 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
106
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
107 void GetExtendedType(u_int8_t* pExtendedType) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
108 memcpy(pExtendedType, m_extendedType, sizeof(m_extendedType));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
109 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
110 void SetExtendedType(u_int8_t* pExtendedType) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
111 memcpy(m_extendedType, pExtendedType, sizeof(m_extendedType));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
112 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
113
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
114 bool IsUnknownType() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
115 return m_unknownType;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
116 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
117 void SetUnknownType(bool unknownType = true) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
118 m_unknownType = unknownType;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
119 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
120
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
121 bool IsRootAtom() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
122 return m_type[0] == '\0';
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
123 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
124
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
125 MP4Atom* GetParentAtom() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
126 return m_pParentAtom;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
127 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
128 void SetParentAtom(MP4Atom* pParentAtom) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
129 m_pParentAtom = pParentAtom;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
130 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
131
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
132 void AddChildAtom(MP4Atom* pChildAtom) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
133 pChildAtom->SetFile(m_pFile);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
134 pChildAtom->SetParentAtom(this);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
135 m_pChildAtoms.Add(pChildAtom);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
136 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
137
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
138 void InsertChildAtom(MP4Atom* pChildAtom, u_int32_t index) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
139 pChildAtom->SetFile(m_pFile);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
140 pChildAtom->SetParentAtom(this);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
141 m_pChildAtoms.Insert(pChildAtom, index);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
142 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
143
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
144 void DeleteChildAtom(MP4Atom* pChildAtom) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
145 for (MP4ArrayIndex i = 0; i < m_pChildAtoms.Size(); i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
146 if (m_pChildAtoms[i] == pChildAtom) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
147 m_pChildAtoms.Delete(i);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
148 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
149 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
150 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
151 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
152
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
153 u_int32_t GetNumberOfChildAtoms() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
154 return m_pChildAtoms.Size();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
155 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
156
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
157 MP4Atom* GetChildAtom(u_int32_t index) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
158 return m_pChildAtoms[index];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
159 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
160
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
161 MP4Property* GetProperty(u_int32_t index) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
162 return m_pProperties[index];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
163 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
164
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
165 MP4Atom* FindAtom(const char* name);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
166
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
167 MP4Atom* FindChildAtom(const char* name);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
168
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
169 bool FindProperty(const char* name,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
170 MP4Property** ppProperty, u_int32_t* pIndex = NULL);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
171
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
172 u_int32_t GetFlags();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
173 void SetFlags(u_int32_t flags);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
174
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
175 u_int8_t GetDepth();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
176
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
177 void Skip();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
178
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
179 virtual void Generate();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
180 virtual void Read();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
181 virtual void BeginWrite(bool use64 = false);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
182 virtual void Write();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
183 virtual void Rewrite();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
184 virtual void FinishWrite(bool use64 = false);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
185 virtual void Dump(FILE* pFile, u_int8_t indent, bool dumpImplicits);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
186
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
187 protected:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
188 void AddProperty(MP4Property* pProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
189
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
190 void AddVersionAndFlags();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
191
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
192 void AddReserved(char* name, u_int32_t size);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
193
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
194 void ExpectChildAtom(const char* name,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
195 bool mandatory, bool onlyOne = true);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
196
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
197 MP4AtomInfo* FindAtomInfo(const char* name);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
198
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
199 bool IsMe(const char* name);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
200
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
201 bool FindContainedProperty(const char* name,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
202 MP4Property** ppProperty, u_int32_t* pIndex);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
203
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
204 void ReadProperties(
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
205 u_int32_t startIndex = 0, u_int32_t count = 0xFFFFFFFF);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
206 void ReadChildAtoms();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
207
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
208 void WriteProperties(
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
209 u_int32_t startIndex = 0, u_int32_t count = 0xFFFFFFFF);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
210 void WriteChildAtoms();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
211
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
212 u_int8_t GetVersion();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
213 void SetVersion(u_int8_t version);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
214
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
215 /* debugging aid */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
216 u_int32_t GetVerbosity();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
217
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
218 protected:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
219 MP4File* m_pFile;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
220 u_int64_t m_start;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
221 u_int64_t m_end;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
222 u_int64_t m_size;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
223 char m_type[5];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
224 bool m_unknownType;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
225 u_int8_t m_extendedType[16];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
226
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
227 MP4Atom* m_pParentAtom;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
228 u_int8_t m_depth;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
229
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
230 MP4PropertyArray m_pProperties;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
231 MP4AtomInfoArray m_pChildAtomInfos;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
232 MP4AtomArray m_pChildAtoms;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
233 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
234
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
235 inline u_int32_t ATOMID(const char* type) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
236 return STRTOINT32(type);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
237 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
238
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
239 #endif /* __MP4_ATOM_INCLUDED__ */