annotate Plugins/Input/aac/libmp4v2/ocidescriptors.cpp @ 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 #include "mp4common.h"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
23
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
24 MP4ContentClassDescriptor::MP4ContentClassDescriptor()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
25 : MP4Descriptor()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
26 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
27 AddProperty( /* 0 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
28 new MP4Integer32Property("classificationEntity"));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
29 AddProperty( /* 1 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
30 new MP4Integer16Property("classificationTable"));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
31 AddProperty( /* 2 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
32 new MP4BytesProperty("contentClassificationData"));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
33 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
34
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
35 void MP4ContentClassDescriptor::Read(MP4File* pFile)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
36 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
37 ReadHeader(pFile);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
38
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
39 /* byte properties need to know how long they are before reading */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
40 ((MP4BytesProperty*)m_pProperties[2])->SetValueSize(m_size - 6);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
41
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
42 ReadProperties(pFile);
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 MP4KeywordDescriptor::MP4KeywordDescriptor()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
46 : MP4Descriptor()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
47 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
48 AddProperty( /* 0 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
49 new MP4BytesProperty("languageCode", 3));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
50 AddProperty( /* 1 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
51 new MP4BitfieldProperty("isUTF8String", 1));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
52 AddProperty( /* 2 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
53 new MP4BitfieldProperty("reserved", 7));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
54 MP4Integer8Property* pCount =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
55 new MP4Integer8Property("keywordCount");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
56 AddProperty(pCount); /* 3 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
57
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
58 MP4TableProperty* pTable = new MP4TableProperty("keywords", pCount);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
59 AddProperty(pTable); /* 4 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
60
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
61 pTable->AddProperty( /* 4, 0 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
62 new MP4StringProperty("string", Counted));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
63
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
64 SetReadMutate(2);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
65 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
66
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
67 void MP4KeywordDescriptor::Mutate()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
68 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
69 bool utf8Flag = ((MP4BitfieldProperty*)m_pProperties[1])->GetValue();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
70 MP4Property* pProperty =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
71 ((MP4TableProperty*)m_pProperties[4])->GetProperty(0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
72 ASSERT(pProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
73 ((MP4StringProperty*)pProperty)->SetUnicode(!utf8Flag);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
74 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
75
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
76 MP4RatingDescriptor::MP4RatingDescriptor()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
77 : MP4Descriptor()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
78 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
79 AddProperty( /* 0 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
80 new MP4Integer32Property("ratingEntity"));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
81 AddProperty( /* 1 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
82 new MP4Integer16Property("ratingCriteria"));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
83 AddProperty( /* 2 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
84 new MP4BytesProperty("ratingInfo"));
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 void MP4RatingDescriptor::Read(MP4File* pFile)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
88 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
89 ReadHeader(pFile);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
90
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
91 /* byte properties need to know how long they are before reading */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
92 ((MP4BytesProperty*)m_pProperties[2])->SetValueSize(m_size - 6);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
93
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
94 ReadProperties(pFile);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
95 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
96
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
97 MP4LanguageDescriptor::MP4LanguageDescriptor()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
98 : MP4Descriptor()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
99 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
100 AddProperty( /* 0 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
101 new MP4BytesProperty("languageCode", 3));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
102 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
103
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
104 MP4ShortTextDescriptor::MP4ShortTextDescriptor()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
105 : MP4Descriptor()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
106 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
107 AddProperty( /* 0 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
108 new MP4BytesProperty("languageCode", 3));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
109 AddProperty( /* 1 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
110 new MP4BitfieldProperty("isUTF8String", 1));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
111 AddProperty( /* 2 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
112 new MP4BitfieldProperty("reserved", 7));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
113 AddProperty( /* 3 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
114 new MP4StringProperty("eventName", Counted));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
115 AddProperty( /* 4 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
116 new MP4StringProperty("eventText", Counted));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
117
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
118 SetReadMutate(2);
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 void MP4ShortTextDescriptor::Mutate()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
122 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
123 bool utf8Flag = ((MP4BitfieldProperty*)m_pProperties[1])->GetValue();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
124 ((MP4StringProperty*)m_pProperties[3])->SetUnicode(!utf8Flag);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
125 ((MP4StringProperty*)m_pProperties[4])->SetUnicode(!utf8Flag);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
126 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
127
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
128 MP4ExpandedTextDescriptor::MP4ExpandedTextDescriptor()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
129 : MP4Descriptor()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
130 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
131 AddProperty( /* 0 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
132 new MP4BytesProperty("languageCode", 3));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
133 AddProperty( /* 1 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
134 new MP4BitfieldProperty("isUTF8String", 1));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
135 AddProperty( /* 2 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
136 new MP4BitfieldProperty("reserved", 7));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
137 MP4Integer8Property* pCount =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
138 new MP4Integer8Property("itemCount");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
139 AddProperty(pCount); /* 3 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
140
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
141 MP4TableProperty* pTable = new MP4TableProperty("items", pCount);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
142 AddProperty(pTable); /* 4 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
143
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
144 pTable->AddProperty( /* Table 0 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
145 new MP4StringProperty("itemDescription", Counted));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
146 pTable->AddProperty( /* Table 1 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
147 new MP4StringProperty("itemText", Counted));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
148
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
149 AddProperty( /* 5 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
150 new MP4StringProperty("nonItemText"));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
151 ((MP4StringProperty*)m_pProperties[5])->SetExpandedCountedFormat(true);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
152
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
153 SetReadMutate(2);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
154 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
155
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
156 void MP4ExpandedTextDescriptor::Mutate()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
157 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
158 bool utf8Flag = ((MP4BitfieldProperty*)m_pProperties[1])->GetValue();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
159
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
160 MP4Property* pProperty =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
161 ((MP4TableProperty*)m_pProperties[4])->GetProperty(0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
162 ASSERT(pProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
163 ((MP4StringProperty*)pProperty)->SetUnicode(!utf8Flag);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
164
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
165 pProperty = ((MP4TableProperty*)m_pProperties[4])->GetProperty(1);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
166 ASSERT(pProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
167 ((MP4StringProperty*)pProperty)->SetUnicode(!utf8Flag);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
168
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
169 ((MP4StringProperty*)m_pProperties[5])->SetUnicode(!utf8Flag);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
170 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
171
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
172 class MP4CreatorTableProperty : public MP4TableProperty {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
173 public:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
174 MP4CreatorTableProperty(char* name, MP4Integer8Property* pCountProperty) :
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
175 MP4TableProperty(name, pCountProperty) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
176 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
177 protected:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
178 void ReadEntry(MP4File* pFile, u_int32_t index);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
179 void WriteEntry(MP4File* pFile, u_int32_t index);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
180 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
181
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
182 MP4CreatorDescriptor::MP4CreatorDescriptor(u_int8_t tag)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
183 : MP4Descriptor(tag)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
184 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
185 MP4Integer8Property* pCount =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
186 new MP4Integer8Property("creatorCount");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
187 AddProperty(pCount); /* 0 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
188
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
189 MP4TableProperty* pTable = new MP4CreatorTableProperty("creators", pCount);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
190 AddProperty(pTable); /* 1 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
191
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
192 pTable->AddProperty( /* Table 0 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
193 new MP4BytesProperty("languageCode", 3, 3));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
194 pTable->AddProperty( /* Table 1 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
195 new MP4BitfieldProperty("isUTF8String", 1));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
196 pTable->AddProperty( /* Table 2 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
197 new MP4BitfieldProperty("reserved", 7));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
198 pTable->AddProperty( /* Table 3 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
199 new MP4StringProperty("name", Counted));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
200 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
201
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
202 void MP4CreatorTableProperty::ReadEntry(MP4File* pFile, u_int32_t index)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
203 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
204 m_pProperties[0]->Read(pFile, index);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
205 m_pProperties[1]->Read(pFile, index);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
206
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
207 bool utf8Flag = ((MP4BitfieldProperty*)m_pProperties[1])->GetValue(index);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
208 ((MP4StringProperty*)m_pProperties[3])->SetUnicode(!utf8Flag);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
209
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
210 m_pProperties[2]->Read(pFile, index);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
211 m_pProperties[3]->Read(pFile, index);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
212 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
213
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
214 void MP4CreatorTableProperty::WriteEntry(MP4File* pFile, u_int32_t index)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
215 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
216 bool utf8Flag = ((MP4BitfieldProperty*)m_pProperties[1])->GetValue(index);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
217 ((MP4StringProperty*)m_pProperties[3])->SetUnicode(!utf8Flag);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
218
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
219 MP4TableProperty::WriteEntry(pFile, index);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
220 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
221
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
222 MP4CreationDescriptor::MP4CreationDescriptor(u_int8_t tag)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
223 : MP4Descriptor(tag)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
224 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
225 AddProperty( /* 0 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
226 new MP4BitfieldProperty("contentCreationDate", 40));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
227 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
228
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
229 MP4SmpteCameraDescriptor::MP4SmpteCameraDescriptor()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
230 : MP4Descriptor()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
231 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
232 MP4Integer8Property* pCount =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
233 new MP4Integer8Property("parameterCount");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
234 AddProperty(pCount);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
235
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
236 MP4TableProperty* pTable = new MP4TableProperty("parameters", pCount);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
237 AddProperty(pTable);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
238
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
239 pTable->AddProperty(
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
240 new MP4Integer8Property("id"));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
241 pTable->AddProperty(
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
242 new MP4Integer32Property("value"));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
243 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
244
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
245 MP4UnknownOCIDescriptor::MP4UnknownOCIDescriptor()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
246 : MP4Descriptor()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
247 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
248 AddProperty( /* 0 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
249 new MP4BytesProperty("data"));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
250 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
251
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
252 void MP4UnknownOCIDescriptor::Read(MP4File* pFile)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
253 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
254 ReadHeader(pFile);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
255
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
256 /* byte properties need to know how long they are before reading */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
257 ((MP4BytesProperty*)m_pProperties[0])->SetValueSize(m_size);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
258
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
259 ReadProperties(pFile);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
260 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
261
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
262 MP4Descriptor* CreateOCIDescriptor(u_int8_t tag)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
263 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
264 MP4Descriptor* pDescriptor = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
265
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
266 switch (tag) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
267 case MP4ContentClassDescrTag:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
268 pDescriptor = new MP4ContentClassDescriptor();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
269 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
270 case MP4KeywordDescrTag:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
271 pDescriptor = new MP4KeywordDescriptor();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
272 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
273 case MP4RatingDescrTag:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
274 pDescriptor = new MP4RatingDescriptor();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
275 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
276 case MP4LanguageDescrTag:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
277 pDescriptor = new MP4LanguageDescriptor();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
278 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
279 case MP4ShortTextDescrTag:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
280 pDescriptor = new MP4ShortTextDescriptor();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
281 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
282 case MP4ExpandedTextDescrTag:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
283 pDescriptor = new MP4ExpandedTextDescriptor();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
284 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
285 case MP4ContentCreatorDescrTag:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
286 case MP4OCICreatorDescrTag:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
287 pDescriptor = new MP4CreatorDescriptor(tag);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
288 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
289 case MP4ContentCreationDescrTag:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
290 case MP4OCICreationDescrTag:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
291 pDescriptor = new MP4CreationDescriptor(tag);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
292 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
293 case MP4SmpteCameraDescrTag:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
294 pDescriptor = new MP4SmpteCameraDescriptor();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
295 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
296 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
297
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
298 if (pDescriptor == NULL) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
299 if (tag >= MP4OCIDescrTagsStart && tag <= MP4OCIDescrTagsEnd) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
300 pDescriptor = new MP4UnknownOCIDescriptor();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
301 pDescriptor->SetTag(tag);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
302 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
303 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
304
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
305 return pDescriptor;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
306 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
307