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

[svn] - more sanity checking
author nenolod
date Fri, 03 Mar 2006 20:09:52 -0800
parents fa848bd484d8
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. 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 * Contributor(s):
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
19 * Dave Mackie dmackie@cisco.com
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
20 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
21
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
22 #ifndef __MP4_DESCRIPTOR_INCLUDED__
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
23 #define __MP4_DESCRIPTOR_INCLUDED__
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
24
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
25 class MP4Descriptor {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
26 public:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
27 MP4Descriptor(u_int8_t tag = 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
28
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
29 virtual ~MP4Descriptor();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
30
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
31 u_int8_t GetTag() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
32 return m_tag;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
33 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
34 void SetTag(u_int8_t tag) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
35 m_tag = tag;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
36 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
37
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
38 void SetParentAtom(MP4Atom* pParentAtom) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
39 m_pParentAtom = pParentAtom;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
40 for (u_int32_t i = 0; i < m_pProperties.Size(); i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
41 m_pProperties[i]->SetParentAtom(pParentAtom);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
42 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
43 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
44
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
45 void AddProperty(MP4Property* pProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
46
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
47 virtual void Generate();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
48 virtual void Read(MP4File* pFile);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
49 virtual void Write(MP4File* pFile);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
50 virtual void Dump(FILE* pFile, u_int8_t indent, bool dumpImplicits);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
51
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
52 MP4Property* GetProperty(u_int32_t index) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
53 return m_pProperties[index];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
54 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
55
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
56 // use with extreme caution
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
57 void SetProperty(u_int32_t index, MP4Property* pProperty) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
58 m_pProperties[index] = pProperty;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
59 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
60
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
61 bool FindProperty(const char* name,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
62 MP4Property** ppProperty, u_int32_t* pIndex = NULL) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
63 return FindContainedProperty(name, ppProperty, pIndex);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
64 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
65
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
66 void WriteToMemory(MP4File* pFile,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
67 u_int8_t** ppBytes, u_int64_t* pNumBytes);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
68
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
69 protected:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
70 void SetReadMutate(u_int32_t propIndex) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
71 m_readMutatePoint = propIndex;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
72 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
73
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
74 void ReadHeader(MP4File* pFile);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
75 void ReadProperties(MP4File* pFile,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
76 u_int32_t startIndex = 0, u_int32_t count = 0xFFFFFFFF);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
77
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
78 virtual void Mutate() {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
79 // default is a no-op
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
80 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
81
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
82 bool FindContainedProperty(const char* name,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
83 MP4Property** ppProperty, u_int32_t* pIndex);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
84
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
85 u_int8_t GetDepth();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
86
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
87 protected:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
88 MP4Atom* m_pParentAtom;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
89 u_int8_t m_tag;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
90 u_int64_t m_start;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
91 u_int32_t m_size;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
92 MP4PropertyArray m_pProperties;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
93 u_int32_t m_readMutatePoint;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
94 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
95
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
96 #endif /* __MP4_DESCRIPTOR_INCLUDED__ */