2
|
1 /*
|
|
2 * The contents of this file are subject to the Mozilla Public
|
|
3 * License Version 1.1 (the "License"); you may not use this file
|
|
4 * except in compliance with the License. You may obtain a copy of
|
|
5 * the License at http://www.mozilla.org/MPL/
|
|
6 *
|
|
7 * Software distributed under the License is distributed on an "AS
|
|
8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
9 * implied. See the License for the specific language governing
|
|
10 * rights and limitations under the License.
|
|
11 *
|
|
12 * The Original Code is MPEG4IP.
|
|
13 *
|
|
14 * The Initial Developer of the Original Code is Cisco Systems Inc.
|
|
15 * Portions created by Cisco Systems Inc. are
|
|
16 * Copyright (C) Cisco Systems Inc. 2001. All Rights Reserved.
|
|
17 *
|
|
18 * Contributor(s):
|
|
19 * Dave Mackie dmackie@cisco.com
|
|
20 */
|
|
21
|
|
22 #ifndef __MP4_DESCRIPTOR_INCLUDED__
|
|
23 #define __MP4_DESCRIPTOR_INCLUDED__
|
|
24
|
|
25 class MP4Descriptor {
|
|
26 public:
|
|
27 MP4Descriptor(u_int8_t tag = 0);
|
|
28
|
|
29 virtual ~MP4Descriptor();
|
|
30
|
|
31 u_int8_t GetTag() {
|
|
32 return m_tag;
|
|
33 }
|
|
34 void SetTag(u_int8_t tag) {
|
|
35 m_tag = tag;
|
|
36 }
|
|
37
|
|
38 void SetParentAtom(MP4Atom* pParentAtom) {
|
|
39 m_pParentAtom = pParentAtom;
|
|
40 for (u_int32_t i = 0; i < m_pProperties.Size(); i++) {
|
|
41 m_pProperties[i]->SetParentAtom(pParentAtom);
|
|
42 }
|
|
43 }
|
|
44
|
|
45 void AddProperty(MP4Property* pProperty);
|
|
46
|
|
47 virtual void Generate();
|
|
48 virtual void Read(MP4File* pFile);
|
|
49 virtual void Write(MP4File* pFile);
|
|
50 virtual void Dump(FILE* pFile, u_int8_t indent, bool dumpImplicits);
|
|
51
|
|
52 MP4Property* GetProperty(u_int32_t index) {
|
|
53 return m_pProperties[index];
|
|
54 }
|
|
55
|
|
56 // use with extreme caution
|
|
57 void SetProperty(u_int32_t index, MP4Property* pProperty) {
|
|
58 m_pProperties[index] = pProperty;
|
|
59 }
|
|
60
|
|
61 bool FindProperty(const char* name,
|
|
62 MP4Property** ppProperty, u_int32_t* pIndex = NULL) {
|
|
63 return FindContainedProperty(name, ppProperty, pIndex);
|
|
64 }
|
|
65
|
|
66 void WriteToMemory(MP4File* pFile,
|
|
67 u_int8_t** ppBytes, u_int64_t* pNumBytes);
|
|
68
|
|
69 protected:
|
|
70 void SetReadMutate(u_int32_t propIndex) {
|
|
71 m_readMutatePoint = propIndex;
|
|
72 }
|
|
73
|
|
74 void ReadHeader(MP4File* pFile);
|
|
75 void ReadProperties(MP4File* pFile,
|
|
76 u_int32_t startIndex = 0, u_int32_t count = 0xFFFFFFFF);
|
|
77
|
|
78 virtual void Mutate() {
|
|
79 // default is a no-op
|
|
80 };
|
|
81
|
|
82 bool FindContainedProperty(const char* name,
|
|
83 MP4Property** ppProperty, u_int32_t* pIndex);
|
|
84
|
|
85 u_int8_t GetDepth();
|
|
86
|
|
87 protected:
|
|
88 MP4Atom* m_pParentAtom;
|
|
89 u_int8_t m_tag;
|
|
90 u_int64_t m_start;
|
|
91 u_int32_t m_size;
|
|
92 MP4PropertyArray m_pProperties;
|
|
93 u_int32_t m_readMutatePoint;
|
|
94 };
|
|
95
|
|
96 #endif /* __MP4_DESCRIPTOR_INCLUDED__ */
|