annotate Input/aac/libmp4v2/descriptors.cpp @ 38:4e0397865a31 trunk

[svn] Regenerate a bunch of stuff :)
author nenolod
date Wed, 26 Oct 2005 10:57:27 -0700
parents 6a86fdd4dea4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
1 /*
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
2 * The contents of this file are subject to the Mozilla Public
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
3 * License Version 1.1 (the "License"); you may not use this file
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
4 * except in compliance with the License. You may obtain a copy of
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
5 * the License at http://www.mozilla.org/MPL/
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
6 *
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
7 * Software distributed under the License is distributed on an "AS
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
9 * implied. See the License for the specific language governing
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
10 * rights and limitations under the License.
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
11 *
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
12 * The Original Code is MPEG4IP.
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
13 *
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
14 * The Initial Developer of the Original Code is Cisco Systems Inc.
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
15 * Portions created by Cisco Systems Inc. are
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
16 * Copyright (C) Cisco Systems Inc. 2001. All Rights Reserved.
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
17 *
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
18 * Contributor(s):
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
19 * Dave Mackie dmackie@cisco.com
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
20 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
21
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
22 #include "mp4common.h"
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
23
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
24 MP4IODescriptor::MP4IODescriptor()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
25 : MP4Descriptor(MP4FileIODescrTag)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
26 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
27 /* N.B. other member functions depend on the property indicies */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
28 AddProperty( /* 0 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
29 new MP4BitfieldProperty("objectDescriptorId", 10));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
30 AddProperty( /* 1 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
31 new MP4BitfieldProperty("URLFlag", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
32 AddProperty( /* 2 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
33 new MP4BitfieldProperty("includeInlineProfileLevelFlag", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
34 AddProperty( /* 3 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
35 new MP4BitfieldProperty("reserved", 4));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
36 AddProperty( /* 4 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
37 new MP4StringProperty("URL", Counted));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
38 AddProperty( /* 5 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
39 new MP4Integer8Property("ODProfileLevelId"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
40 AddProperty( /* 6 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
41 new MP4Integer8Property("sceneProfileLevelId"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
42 AddProperty( /* 7 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
43 new MP4Integer8Property("audioProfileLevelId"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
44 AddProperty( /* 8 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
45 new MP4Integer8Property("visualProfileLevelId"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
46 AddProperty( /* 9 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
47 new MP4Integer8Property("graphicsProfileLevelId"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
48 AddProperty( /* 10 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
49 new MP4DescriptorProperty("esIds",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
50 MP4ESIDIncDescrTag, 0, Required, Many));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
51 AddProperty( /* 11 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
52 new MP4DescriptorProperty("ociDescr",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
53 MP4OCIDescrTagsStart, MP4OCIDescrTagsEnd, Optional, Many));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
54 AddProperty( /* 12 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
55 new MP4DescriptorProperty("ipmpDescrPtr",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
56 MP4IPMPPtrDescrTag, 0, Optional, Many));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
57 AddProperty( /* 13 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
58 new MP4DescriptorProperty("extDescr",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
59 MP4ExtDescrTagsStart, MP4ExtDescrTagsEnd, Optional, Many));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
60
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
61 SetReadMutate(2);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
62 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
63
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
64 void MP4IODescriptor::Generate()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
65 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
66 ((MP4BitfieldProperty*)m_pProperties[0])->SetValue(1);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
67 ((MP4BitfieldProperty*)m_pProperties[3])->SetValue(0xF);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
68 for (u_int32_t i = 5; i <= 9; i++) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
69 ((MP4Integer8Property*)m_pProperties[i])->SetValue(0xFF);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
70 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
71 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
72
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
73 void MP4IODescriptor::Mutate()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
74 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
75 bool urlFlag = ((MP4BitfieldProperty*)m_pProperties[1])->GetValue();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
76
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
77 m_pProperties[4]->SetImplicit(!urlFlag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
78 for (u_int32_t i = 5; i <= 12; i++) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
79 m_pProperties[i]->SetImplicit(urlFlag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
80 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
81 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
82
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
83 MP4ODescriptor::MP4ODescriptor()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
84 : MP4Descriptor(MP4FileODescrTag)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
85 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
86 /* N.B. other member functions depend on the property indicies */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
87 AddProperty( /* 0 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
88 new MP4BitfieldProperty("objectDescriptorId", 10));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
89 AddProperty( /* 1 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
90 new MP4BitfieldProperty("URLFlag", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
91 AddProperty( /* 2 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
92 new MP4BitfieldProperty("reserved", 5));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
93 AddProperty( /* 3 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
94 new MP4StringProperty("URL", Counted));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
95 AddProperty( /* 4 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
96 new MP4DescriptorProperty("esIds",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
97 MP4ESIDRefDescrTag, 0, Required, Many));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
98 AddProperty( /* 5 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
99 new MP4DescriptorProperty("ociDescr",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
100 MP4OCIDescrTagsStart, MP4OCIDescrTagsEnd, Optional, Many));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
101 AddProperty( /* 6 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
102 new MP4DescriptorProperty("ipmpDescrPtr",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
103 MP4IPMPPtrDescrTag, 0, Optional, Many));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
104 AddProperty( /* 7 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
105 new MP4DescriptorProperty("extDescr",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
106 MP4ExtDescrTagsStart, MP4ExtDescrTagsEnd, Optional, Many));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
107
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
108 SetReadMutate(2);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
109 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
110
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
111 void MP4ODescriptor::Generate()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
112 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
113 ((MP4BitfieldProperty*)m_pProperties[2])->SetValue(0x1F);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
114 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
115
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
116 void MP4ODescriptor::Mutate()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
117 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
118 bool urlFlag = ((MP4BitfieldProperty*)m_pProperties[1])->GetValue();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
119
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
120 m_pProperties[3]->SetImplicit(!urlFlag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
121 for (u_int32_t i = 4; i <= 6; i++) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
122 m_pProperties[i]->SetImplicit(urlFlag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
123 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
124 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
125
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
126 MP4ESIDIncDescriptor::MP4ESIDIncDescriptor()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
127 : MP4Descriptor(MP4ESIDIncDescrTag)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
128 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
129 AddProperty( /* 0 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
130 new MP4Integer32Property("id"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
131 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
132
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
133 MP4ESIDRefDescriptor::MP4ESIDRefDescriptor()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
134 : MP4Descriptor(MP4ESIDRefDescrTag)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
135 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
136 AddProperty( /* 0 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
137 new MP4Integer16Property("refIndex"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
138 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
139
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
140 MP4ESDescriptor::MP4ESDescriptor()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
141 : MP4Descriptor(MP4ESDescrTag)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
142 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
143 /* N.B. other class functions depend on the property indicies */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
144 AddProperty( /* 0 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
145 new MP4Integer16Property("ESID"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
146 AddProperty( /* 1 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
147 new MP4BitfieldProperty("streamDependenceFlag", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
148 AddProperty( /* 2 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
149 new MP4BitfieldProperty("URLFlag", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
150 AddProperty( /* 3 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
151 new MP4BitfieldProperty("OCRstreamFlag", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
152 AddProperty( /* 4 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
153 new MP4BitfieldProperty("streamPriority", 5));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
154 AddProperty( /* 5 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
155 new MP4Integer16Property("dependsOnESID"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
156 AddProperty( /* 6 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
157 new MP4StringProperty("URL", Counted));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
158 AddProperty( /* 7 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
159 new MP4Integer16Property("OCRESID"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
160 AddProperty( /* 8 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
161 new MP4DescriptorProperty("decConfigDescr",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
162 MP4DecConfigDescrTag, 0, Required, OnlyOne));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
163 AddProperty( /* 9 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
164 new MP4DescriptorProperty("slConfigDescr",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
165 MP4SLConfigDescrTag, 0, Required, OnlyOne));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
166 AddProperty( /* 10 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
167 new MP4DescriptorProperty("ipiPtr",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
168 MP4IPIPtrDescrTag, 0, Optional, OnlyOne));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
169 AddProperty( /* 11 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
170 new MP4DescriptorProperty("ipIds",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
171 MP4ContentIdDescrTag, MP4SupplContentIdDescrTag, Optional, Many));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
172 AddProperty( /* 12 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
173 new MP4DescriptorProperty("ipmpDescrPtr",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
174 MP4IPMPPtrDescrTag, 0, Optional, Many));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
175 AddProperty( /* 13 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
176 new MP4DescriptorProperty("langDescr",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
177 MP4LanguageDescrTag, 0, Optional, Many));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
178 AddProperty( /* 14 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
179 new MP4DescriptorProperty("qosDescr",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
180 MP4QosDescrTag, 0, Optional, OnlyOne));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
181 AddProperty( /* 15 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
182 new MP4DescriptorProperty("regDescr",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
183 MP4RegistrationDescrTag, 0, Optional, OnlyOne));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
184 AddProperty( /* 16 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
185 new MP4DescriptorProperty("extDescr",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
186 MP4ExtDescrTagsStart, MP4ExtDescrTagsEnd, Optional, Many));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
187
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
188 SetReadMutate(5);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
189 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
190
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
191 void MP4ESDescriptor::Mutate()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
192 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
193 bool streamDependFlag =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
194 ((MP4BitfieldProperty*)m_pProperties[1])->GetValue();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
195 m_pProperties[5]->SetImplicit(!streamDependFlag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
196
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
197 bool urlFlag =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
198 ((MP4BitfieldProperty*)m_pProperties[2])->GetValue();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
199 m_pProperties[6]->SetImplicit(!urlFlag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
200
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
201 bool ocrFlag =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
202 ((MP4BitfieldProperty*)m_pProperties[3])->GetValue();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
203 m_pProperties[7]->SetImplicit(!ocrFlag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
204 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
205
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
206 MP4DecConfigDescriptor::MP4DecConfigDescriptor()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
207 : MP4Descriptor(MP4DecConfigDescrTag)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
208 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
209 AddProperty( /* 0 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
210 new MP4Integer8Property("objectTypeId"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
211 AddProperty( /* 1 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
212 new MP4BitfieldProperty("streamType", 6));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
213 AddProperty( /* 2 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
214 new MP4BitfieldProperty("upStream", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
215 AddProperty( /* 3 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
216 new MP4BitfieldProperty("reserved", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
217 AddProperty( /* 4 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
218 new MP4BitfieldProperty("bufferSizeDB", 24));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
219 AddProperty( /* 5 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
220 new MP4Integer32Property("maxBitrate"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
221 AddProperty( /* 6 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
222 new MP4Integer32Property("avgBitrate"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
223 AddProperty( /* 7 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
224 new MP4DescriptorProperty("decSpecificInfo",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
225 MP4DecSpecificDescrTag, 0, Optional, OnlyOne));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
226 AddProperty( /* 8 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
227 new MP4DescriptorProperty("profileLevelIndicationIndexDescr",
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
228 MP4ExtProfileLevelDescrTag, 0, Optional, Many));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
229 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
230
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
231 void MP4DecConfigDescriptor::Generate()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
232 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
233 ((MP4BitfieldProperty*)m_pProperties[3])->SetValue(1);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
234 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
235
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
236 MP4DecSpecificDescriptor::MP4DecSpecificDescriptor()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
237 : MP4Descriptor(MP4DecSpecificDescrTag)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
238 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
239 AddProperty( /* 0 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
240 new MP4BytesProperty("info"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
241 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
242
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
243 void MP4DecSpecificDescriptor::Read(MP4File* pFile)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
244 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
245 ReadHeader(pFile);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
246
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
247 /* byte properties need to know how long they are before reading */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
248 ((MP4BytesProperty*)m_pProperties[0])->SetValueSize(m_size);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
249
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
250 ReadProperties(pFile);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
251 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
252
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
253 MP4SLConfigDescriptor::MP4SLConfigDescriptor()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
254 : MP4Descriptor(MP4SLConfigDescrTag)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
255 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
256 AddProperty( /* 0 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
257 new MP4Integer8Property("predefined"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
258 AddProperty( /* 1 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
259 new MP4BitfieldProperty("useAccessUnitStartFlag", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
260 AddProperty( /* 2 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
261 new MP4BitfieldProperty("useAccessUnitEndFlag", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
262 AddProperty( /* 3 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
263 new MP4BitfieldProperty("useRandomAccessPointFlag", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
264 AddProperty( /* 4 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
265 new MP4BitfieldProperty("hasRandomAccessUnitsOnlyFlag", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
266 AddProperty( /* 5 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
267 new MP4BitfieldProperty("usePaddingFlag", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
268 AddProperty( /* 6 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
269 new MP4BitfieldProperty("useTimeStampsFlag", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
270 AddProperty( /* 7 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
271 new MP4BitfieldProperty("useIdleFlag", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
272 AddProperty( /* 8 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
273 new MP4BitfieldProperty("durationFlag", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
274 AddProperty( /* 9 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
275 new MP4Integer32Property("timeStampResolution"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
276 AddProperty( /* 10 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
277 new MP4Integer32Property("OCRResolution"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
278 AddProperty( /* 11 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
279 new MP4Integer8Property("timeStampLength"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
280 AddProperty( /* 12 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
281 new MP4Integer8Property("OCRLength"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
282 AddProperty( /* 13 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
283 new MP4Integer8Property("AULength"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
284 AddProperty( /* 14 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
285 new MP4Integer8Property("instantBitrateLength"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
286 AddProperty( /* 15 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
287 new MP4BitfieldProperty("degradationPriortyLength", 4));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
288 AddProperty( /* 16 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
289 new MP4BitfieldProperty("AUSeqNumLength", 5));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
290 AddProperty( /* 17 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
291 new MP4BitfieldProperty("packetSeqNumLength", 5));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
292 AddProperty( /* 18 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
293 new MP4BitfieldProperty("reserved", 2));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
294
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
295 // if durationFlag
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
296 AddProperty( /* 19 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
297 new MP4Integer32Property("timeScale"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
298 AddProperty( /* 20 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
299 new MP4Integer16Property("accessUnitDuration"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
300 AddProperty( /* 21 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
301 new MP4Integer16Property("compositionUnitDuration"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
302
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
303 // if !useTimeStampsFlag
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
304 AddProperty( /* 22 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
305 new MP4BitfieldProperty("startDecodingTimeStamp", 64));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
306 AddProperty( /* 23 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
307 new MP4BitfieldProperty("startCompositionTimeStamp", 64));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
308 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
309
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
310 void MP4SLConfigDescriptor::Generate()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
311 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
312 // by default all tracks in an mp4 file
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
313 // use predefined SLConfig descriptor == 2
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
314 ((MP4Integer8Property*)m_pProperties[0])->SetValue(2);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
315
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
316 // which implies UseTimestampsFlag = 1
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
317 ((MP4BitfieldProperty*)m_pProperties[6])->SetValue(1);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
318
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
319 // reserved = 3
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
320 ((MP4BitfieldProperty*)m_pProperties[18])->SetValue(3);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
321 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
322
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
323 void MP4SLConfigDescriptor::Read(MP4File* pFile)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
324 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
325 ReadHeader(pFile);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
326
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
327 // read the first property, 'predefined'
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
328 ReadProperties(pFile, 0, 1);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
329
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
330 // if predefined == 0
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
331 if (((MP4Integer8Property*)m_pProperties[0])->GetValue() == 0) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
332
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
333 /* read the next 18 properties */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
334 ReadProperties(pFile, 1, 18);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
335 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
336
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
337 // now mutate
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
338 Mutate();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
339
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
340 // and read the remaining properties
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
341 ReadProperties(pFile, 19);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
342 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
343
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
344 void MP4SLConfigDescriptor::Mutate()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
345 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
346 u_int32_t i;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
347 u_int8_t predefined =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
348 ((MP4Integer8Property*)m_pProperties[0])->GetValue();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
349
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
350 if (predefined) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
351 // properties 1-18 are implicit
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
352 for (i = 1; i < m_pProperties.Size(); i++) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
353 m_pProperties[i]->SetImplicit(true);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
354 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
355
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
356 if (predefined == 1) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
357 // UseTimestampsFlag = 0
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
358 ((MP4BitfieldProperty*)m_pProperties[6])->SetValue(0);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
359
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
360 // TimestampResolution = 1000
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
361 ((MP4Integer32Property*)m_pProperties[9])->SetValue(1000);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
362
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
363 // TimeStampLength = 32
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
364 ((MP4Integer8Property*)m_pProperties[11])->SetValue(32);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
365
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
366 } else if (predefined == 2) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
367 // UseTimestampsFlag = 1
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
368 ((MP4BitfieldProperty*)m_pProperties[6])->SetValue(1);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
369 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
370 } else {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
371 #if 1
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
372 for (i = 1; i <= 18; i++) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
373 m_pProperties[i]->SetImplicit(false);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
374 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
375 ((MP4BitfieldProperty*)m_pProperties[18])->SetValue(3);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
376 #endif
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
377 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
378
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
379 bool durationFlag =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
380 ((MP4BitfieldProperty*)m_pProperties[8])->GetValue();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
381
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
382 for (i = 19; i <= 21; i++) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
383 m_pProperties[i]->SetImplicit(!durationFlag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
384 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
385
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
386 bool useTimeStampsFlag =
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
387 ((MP4BitfieldProperty*)m_pProperties[6])->GetValue();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
388
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
389 for (i = 22; i <= 23; i++) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
390 m_pProperties[i]->SetImplicit(useTimeStampsFlag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
391
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
392 u_int8_t timeStampLength = MIN(64,
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
393 ((MP4Integer8Property*)m_pProperties[11])->GetValue());
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
394
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
395 ((MP4BitfieldProperty*)m_pProperties[i])->SetNumBits(timeStampLength);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
396
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
397 // handle a nonsensical situation gracefully
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
398 if (timeStampLength == 0) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
399 m_pProperties[i]->SetImplicit(true);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
400 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
401 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
402 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
403
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
404 MP4IPIPtrDescriptor::MP4IPIPtrDescriptor()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
405 : MP4Descriptor(MP4IPIPtrDescrTag)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
406 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
407 AddProperty( /* 0 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
408 new MP4Integer16Property("IPIESId"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
409 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
410
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
411 MP4ContentIdDescriptor::MP4ContentIdDescriptor()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
412 : MP4Descriptor(MP4ContentIdDescrTag)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
413 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
414 AddProperty( /* 0 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
415 new MP4BitfieldProperty("compatibility", 2));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
416 AddProperty( /* 1 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
417 new MP4BitfieldProperty("contentTypeFlag", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
418 AddProperty( /* 2 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
419 new MP4BitfieldProperty("contentIdFlag", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
420 AddProperty( /* 3 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
421 new MP4BitfieldProperty("protectedContent", 1));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
422 AddProperty( /* 4 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
423 new MP4BitfieldProperty("reserved", 3));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
424 AddProperty( /* 5 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
425 new MP4Integer8Property("contentType"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
426 AddProperty( /* 6 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
427 new MP4Integer8Property("contentIdType"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
428 AddProperty( /* 7 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
429 new MP4BytesProperty("contentId"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
430 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
431
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
432 void MP4ContentIdDescriptor::Read(MP4File* pFile)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
433 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
434 ReadHeader(pFile);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
435
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
436 /* read the first property, 'compatiblity' */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
437 ReadProperties(pFile, 0, 1);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
438
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
439 /* if compatiblity != 0 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
440 if (((MP4Integer8Property*)m_pProperties[0])->GetValue() != 0) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
441 /* we don't understand it */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
442 VERBOSE_READ(pFile->GetVerbosity(),
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
443 printf("incompatible content id descriptor\n"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
444 return;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
445 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
446
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
447 /* read the next four properties */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
448 ReadProperties(pFile, 1, 4);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
449
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
450 /* which allows us to reconfigure ourselves */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
451 Mutate();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
452
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
453 /* read the remaining properties */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
454 ReadProperties(pFile, 5);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
455 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
456
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
457 void MP4ContentIdDescriptor::Mutate()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
458 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
459 bool contentTypeFlag = ((MP4BitfieldProperty*)m_pProperties[1])->GetValue();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
460 m_pProperties[5]->SetImplicit(!contentTypeFlag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
461
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
462 bool contentIdFlag = ((MP4BitfieldProperty*)m_pProperties[2])->GetValue();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
463 m_pProperties[6]->SetImplicit(!contentIdFlag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
464 m_pProperties[7]->SetImplicit(!contentIdFlag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
465 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
466
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
467 MP4SupplContentIdDescriptor::MP4SupplContentIdDescriptor()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
468 : MP4Descriptor(MP4SupplContentIdDescrTag)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
469 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
470 AddProperty( /* 0 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
471 new MP4BytesProperty("languageCode", 3));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
472 AddProperty( /* 1 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
473 new MP4StringProperty("title", Counted));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
474 AddProperty( /* 2 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
475 new MP4StringProperty("value", Counted));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
476 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
477
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
478 MP4IPMPPtrDescriptor::MP4IPMPPtrDescriptor()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
479 : MP4Descriptor(MP4IPMPPtrDescrTag)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
480 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
481 AddProperty( /* 0 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
482 new MP4Integer8Property("IPMPDescriptorId"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
483 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
484
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
485 MP4IPMPDescriptor::MP4IPMPDescriptor()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
486 : MP4Descriptor(MP4IPMPDescrTag)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
487 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
488 AddProperty( /* 0 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
489 new MP4Integer8Property("IPMPDescriptorId"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
490 AddProperty( /* 1 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
491 new MP4Integer16Property("IPMPSType"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
492 AddProperty( /* 2 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
493 new MP4BytesProperty("IPMPData"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
494 /* note: if IPMPSType == 0, IPMPData is an URL */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
495 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
496
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
497 void MP4IPMPDescriptor::Read(MP4File* pFile)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
498 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
499 ReadHeader(pFile);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
500
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
501 /* byte properties need to know how long they are before reading */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
502 ((MP4BytesProperty*)m_pProperties[2])->SetValueSize(m_size - 3);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
503
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
504 ReadProperties(pFile);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
505 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
506
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
507 MP4RegistrationDescriptor::MP4RegistrationDescriptor()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
508 : MP4Descriptor(MP4RegistrationDescrTag)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
509 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
510 AddProperty( /* 0 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
511 new MP4Integer32Property("formatIdentifier"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
512 AddProperty( /* 1 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
513 new MP4BytesProperty("additionalIdentificationInfo"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
514 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
515
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
516 void MP4RegistrationDescriptor::Read(MP4File* pFile)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
517 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
518 ReadHeader(pFile);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
519
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
520 /* byte properties need to know how long they are before reading */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
521 ((MP4BytesProperty*)m_pProperties[1])->SetValueSize(m_size - 4);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
522
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
523 ReadProperties(pFile);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
524 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
525
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
526 MP4ExtProfileLevelDescriptor::MP4ExtProfileLevelDescriptor()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
527 : MP4Descriptor(MP4ExtProfileLevelDescrTag)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
528 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
529 AddProperty( /* 0 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
530 new MP4Integer8Property("profileLevelIndicationIndex"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
531 AddProperty( /* 1 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
532 new MP4Integer8Property("ODProfileLevelIndication"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
533 AddProperty( /* 2 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
534 new MP4Integer8Property("sceneProfileLevelIndication"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
535 AddProperty( /* 3 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
536 new MP4Integer8Property("audioProfileLevelIndication"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
537 AddProperty( /* 4 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
538 new MP4Integer8Property("visualProfileLevelIndication"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
539 AddProperty( /* 5 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
540 new MP4Integer8Property("graphicsProfileLevelIndication"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
541 AddProperty( /* 6 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
542 new MP4Integer8Property("MPEGJProfileLevelIndication"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
543 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
544
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
545 MP4ExtensionDescriptor::MP4ExtensionDescriptor()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
546 : MP4Descriptor()
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
547 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
548 AddProperty( /* 0 */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
549 new MP4BytesProperty("data"));
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
550 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
551
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
552 void MP4ExtensionDescriptor::Read(MP4File* pFile)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
553 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
554 ReadHeader(pFile);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
555
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
556 /* byte properties need to know how long they are before reading */
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
557 ((MP4BytesProperty*)m_pProperties[0])->SetValueSize(m_size);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
558
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
559 ReadProperties(pFile);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
560 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
561
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
562 MP4Descriptor* MP4DescriptorProperty::CreateDescriptor(u_int8_t tag)
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
563 {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
564 MP4Descriptor* pDescriptor = NULL;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
565
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
566 switch (tag) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
567 case MP4ESDescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
568 pDescriptor = new MP4ESDescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
569 break;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
570 case MP4DecConfigDescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
571 pDescriptor = new MP4DecConfigDescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
572 break;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
573 case MP4DecSpecificDescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
574 pDescriptor = new MP4DecSpecificDescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
575 break;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
576 case MP4SLConfigDescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
577 pDescriptor = new MP4SLConfigDescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
578 break;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
579 case MP4ContentIdDescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
580 pDescriptor = new MP4ContentIdDescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
581 break;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
582 case MP4SupplContentIdDescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
583 pDescriptor = new MP4SupplContentIdDescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
584 break;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
585 case MP4IPIPtrDescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
586 pDescriptor = new MP4IPIPtrDescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
587 break;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
588 case MP4IPMPPtrDescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
589 pDescriptor = new MP4IPMPPtrDescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
590 break;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
591 case MP4IPMPDescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
592 pDescriptor = new MP4IPMPDescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
593 break;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
594 case MP4QosDescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
595 pDescriptor = new MP4QosDescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
596 break;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
597 case MP4RegistrationDescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
598 pDescriptor = new MP4RegistrationDescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
599 break;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
600 case MP4ESIDIncDescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
601 pDescriptor = new MP4ESIDIncDescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
602 break;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
603 case MP4ESIDRefDescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
604 pDescriptor = new MP4ESIDRefDescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
605 break;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
606 case MP4IODescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
607 case MP4FileIODescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
608 pDescriptor = new MP4IODescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
609 pDescriptor->SetTag(tag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
610 break;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
611 case MP4ODescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
612 case MP4FileODescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
613 pDescriptor = new MP4ODescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
614 pDescriptor->SetTag(tag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
615 break;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
616 case MP4ExtProfileLevelDescrTag:
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
617 pDescriptor = new MP4ExtProfileLevelDescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
618 break;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
619 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
620
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
621 if (pDescriptor == NULL) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
622 if (tag >= MP4OCIDescrTagsStart && tag <= MP4OCIDescrTagsEnd) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
623 pDescriptor = CreateOCIDescriptor(tag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
624 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
625
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
626 if (tag >= MP4ExtDescrTagsStart && tag <= MP4ExtDescrTagsEnd) {
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
627 pDescriptor = new MP4ExtensionDescriptor();
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
628 pDescriptor->SetTag(tag);
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
629 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
630 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
631
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
632 return pDescriptor;
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
633 }
6a86fdd4dea4 [svn] Replacement libmp4v2.
nenolod
parents:
diff changeset
634