annotate Plugins/Input/aac/libmp4v2/mp4meta.cpp @ 790:8f437afc4f4a trunk

[svn] - more sanity checking
author nenolod
date Fri, 03 Mar 2006 20:09:52 -0800
parents f2dc045d2327
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
2 * The contents of this file are subject to the Mozilla Public
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
3 * License Version 1.1 (the "License"); you may not use this file
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
4 * except in compliance with the License. You may obtain a copy of
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
5 * the License at http://www.mozilla.org/MPL/
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
6 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
7 * Software distributed under the License is distributed on an "AS
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
9 * implied. See the License for the specific language governing
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
10 * rights and limitations under the License.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
11 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
12 * The Original Code is MPEG4IP.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
13 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
14 * The Initial Developer of the Original Code is Cisco Systems Inc.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
15 * Portions created by Cisco Systems Inc. are
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
16 * Copyright (C) Cisco Systems Inc. 2001. 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 * M. Bakker mbakker at nero.com
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
20 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
21 * Apple iTunes Metadata handling
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
22 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
23
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
24 /**
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
25
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
26 The iTunes tagging seems to support any tag field name
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
27 but there are some predefined fields, also known from the QuickTime format
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
28
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
29 predefined fields (the ones I know of until now):
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
30 - ©nam : Name of the song/movie (string)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
31 - ©ART : Name of the artist/performer (string)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
32 - ©wrt : Name of the writer (string)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
33 - ©alb : Name of the album (string)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
34 - ©day : Year (4 bytes, e.g. "2003") (string)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
35 - ©too : Tool(s) used to create the file (string)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
36 - ©cmt : Comment (string)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
37 - ©gen : Custom genre (string)
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
38 - ©grp : Grouping (string)
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
39 - trkn : Tracknumber (8 byte string)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
40 16 bit: empty
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
41 16 bit: tracknumber
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
42 16 bit: total tracks on album
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
43 16 bit: empty
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
44 - disk : Disknumber (8 byte string)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
45 16 bit: empty
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
46 16 bit: disknumber
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
47 16 bit: total number of disks
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
48 16 bit: empty
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
49 - gnre : Genre (16 bit genre) (ID3v1 index + 1)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
50 - cpil : Part of a compilation (1 byte, 1 or 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
51 - tmpo : Tempo in BPM (16 bit)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
52 - covr : Cover art (xx bytes binary data)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
53 - ---- : Free form metadata, can have any name and any data
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
54
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
55 **/
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
56
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
57 #include "mp4common.h"
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
58
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
59 bool MP4File::GetMetadataByIndex(u_int32_t index,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
60 const char** ppName,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
61 u_int8_t** ppValue, u_int32_t* pValueSize)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
62 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
63 char s[256];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
64
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
65 sprintf(s, "moov.udta.meta.ilst.*[%u].data.metadata", index);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
66 GetBytesProperty(s, ppValue, pValueSize);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
67
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
68 sprintf(s, "moov.udta.meta.ilst.*[%u]", index);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
69 MP4Atom* pParent = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
70 *ppName = pParent->GetType();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
71
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
72 /* check for free form tagfield */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
73 if (memcmp(*ppName, "----", 4) == 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
74 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
75 u_int8_t* pV;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
76 u_int32_t VSize = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
77 char *pN;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
78
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
79 sprintf(s, "moov.udta.meta.ilst.*[%u].name.metadata", index);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
80 GetBytesProperty(s, &pV, &VSize);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
81
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
82 pN = (char*)malloc((VSize+1)*sizeof(char));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
83 memset(pN, 0, (VSize+1)*sizeof(char));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
84 memcpy(pN, pV, VSize*sizeof(char));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
85
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
86 *ppName = pN;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
87 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
88
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
89 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
90 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
91
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
92 bool MP4File::CreateMetadataAtom(const char* name)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
93 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
94 char s[256];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
95 char t[256];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
96
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
97 sprintf(t, "udta.meta.ilst.%s.data", name);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
98 sprintf(s, "moov.udta.meta.ilst.%s.data", name);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
99 AddDescendantAtoms("moov", t);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
100 MP4Atom *pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
101
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
102 if (!pMetaAtom)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
103 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
104
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
105 /* some fields need special flags set */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
106 if ((uint8_t)name[0] == 0251)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
107 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
108 pMetaAtom->SetFlags(0x1);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
109 } else if ((memcmp(name, "cpil", 4) == 0) || (memcmp(name, "tmpo", 4) == 0)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
110 pMetaAtom->SetFlags(0x15);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
111 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
112
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
113 MP4Atom *pHdlrAtom = m_pRootAtom->FindAtom("moov.udta.meta.hdlr");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
114 MP4StringProperty *pStringProperty = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
115 MP4BytesProperty *pBytesProperty = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
116 ASSERT(pHdlrAtom);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
117
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
118 pHdlrAtom->FindProperty(
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
119 "hdlr.handlerType", (MP4Property**)&pStringProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
120 ASSERT(pStringProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
121 pStringProperty->SetValue("mdir");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
122
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
123 u_int8_t val[12];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
124 memset(val, 0, 12*sizeof(u_int8_t));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
125 val[0] = 0x61;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
126 val[1] = 0x70;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
127 val[2] = 0x70;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
128 val[3] = 0x6c;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
129 pHdlrAtom->FindProperty(
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
130 "hdlr.reserved2", (MP4Property**)&pBytesProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
131 ASSERT(pBytesProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
132 pBytesProperty->SetReadOnly(false);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
133 pBytesProperty->SetValue(val, 12);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
134 pBytesProperty->SetReadOnly(true);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
135
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
136 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
137 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
138
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
139 bool MP4File::DeleteMetadataAtom(const char* name)
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
140 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
141 MP4Atom *pMetaAtom = NULL;
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
142 char s[256];
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
143
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
144 sprintf(s, "moov.udta.meta.ilst.%s", name);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
145 pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
146
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
147 /* if it exists, delete it */
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
148 if (pMetaAtom)
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
149 {
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
150 MP4Atom *pParent = pMetaAtom->GetParentAtom();
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
151
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
152 pParent->DeleteChildAtom(pMetaAtom);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
153
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
154 delete pMetaAtom;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
155
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
156 return true;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
157 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
158
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
159 return false;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
160 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
161
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
162 bool MP4File::SetMetadataString (const char *atom, const char *value)
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
163 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
164 char atomstring[40];
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
165 MP4Atom *pMetaAtom;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
166 MP4BytesProperty *pMetadataProperty = NULL;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
167 sprintf(atomstring, "moov.udta.meta.ilst.%s.data", atom);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
168
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
169 pMetaAtom = m_pRootAtom->FindAtom(atomstring);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
170
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
171 if (!pMetaAtom)
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
172 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
173 if (!CreateMetadataAtom(atom))
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
174 return false;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
175
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
176 pMetaAtom = m_pRootAtom->FindAtom(atomstring);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
177 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
178
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
179 pMetaAtom->FindProperty("data.metadata", (MP4Property**)&pMetadataProperty);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
180 ASSERT(pMetadataProperty);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
181
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
182 pMetadataProperty->SetValue((u_int8_t*)value, strlen(value));
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
183
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
184 return true;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
185 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
186
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
187 bool MP4File::GetMetadataString (const char *atom, char **value)
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
188 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
189 unsigned char *val = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
190 u_int32_t valSize = 0;
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
191 char atomstring[60];
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
192 sprintf(atomstring, "moov.udta.meta.ilst.%s.data.metadata", atom);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
193
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
194 *value = NULL;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
195
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
196 GetBytesProperty(atomstring, (u_int8_t**)&val, &valSize);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
197
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
198 if (valSize > 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
199 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
200 *value = (char*)malloc((valSize+1)*sizeof(unsigned char));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
201 memset(*value, 0, (valSize+1)*sizeof(unsigned char));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
202 memcpy(*value, val, valSize*sizeof(unsigned char));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
203 return true;
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
204 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
205 return false;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
206 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
207
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
208 bool MP4File::SetMetadataName(const char* value)
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
209 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
210 return SetMetadataString("\251nam", value);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
211 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
212
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
213 bool MP4File::GetMetadataName(char** value)
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
214 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
215 return GetMetadataString("\251nam", value);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
216 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
217
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
218 bool MP4File::DeleteMetadataName()
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
219 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
220 return DeleteMetadataAtom("\251nam");
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
221 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
222
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
223 bool MP4File::SetMetadataWriter(const char* value)
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
224 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
225 return SetMetadataString("\251wrt", value);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
226 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
227
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
228 bool MP4File::GetMetadataWriter(char** value)
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
229 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
230 return GetMetadataString("\251wrt", value);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
231 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
232
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
233 bool MP4File::DeleteMetadataWriter()
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
234 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
235 return DeleteMetadataAtom("\251wrt");
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
236 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
237
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
238 bool MP4File::SetMetadataAlbum(const char* value)
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
239 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
240 return SetMetadataString("\251alb", value);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
241 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
242
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
243 bool MP4File::GetMetadataAlbum(char** value)
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
244 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
245 return GetMetadataString("\251alb", value);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
246 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
247
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
248 bool MP4File::DeleteMetadataAlbum()
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
249 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
250 return DeleteMetadataAtom("\251alb");
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
251 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
252
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
253 bool MP4File::SetMetadataArtist(const char* value)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
254 {
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
255 return SetMetadataString("\251ART", value);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
256 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
257
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
258 bool MP4File::GetMetadataArtist(char** value)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
259 {
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
260 return GetMetadataString("\251ART", value);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
261 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
262
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
263 bool MP4File::DeleteMetadataArtist()
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
264 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
265 return DeleteMetadataAtom("\251ART");
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
266 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
267
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
268 bool MP4File::SetMetadataTool(const char* value)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
269 {
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
270 return SetMetadataString("\251too", value);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
271 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
272
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
273 bool MP4File::GetMetadataTool(char** value)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
274 {
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
275 return GetMetadataString("\251too", value);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
276 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
277
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
278 bool MP4File::DeleteMetadataTool()
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
279 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
280 return DeleteMetadataAtom("\251too");
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
281 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
282
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
283 bool MP4File::SetMetadataComment(const char* value)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
284 {
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
285 return SetMetadataString("\251cmt", value);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
286 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
287
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
288 bool MP4File::GetMetadataComment(char** value)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
289 {
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
290 return GetMetadataString("\251cmt", value);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
291 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
292
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
293 bool MP4File::DeleteMetadataComment()
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
294 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
295 return DeleteMetadataAtom("\251cmt");
61
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 bool MP4File::SetMetadataYear(const char* value)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
299 {
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
300 if (strlen(value) != 4) return false;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
301
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
302 return SetMetadataString("\251day", value);
61
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 bool MP4File::GetMetadataYear(char** value)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
306 {
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
307 return GetMetadataString("\251day", value);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
308 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
309
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
310 bool MP4File::DeleteMetadataYear()
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
311 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
312 return DeleteMetadataAtom("\251day");
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
313 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
314
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
315 bool MP4File::SetMetadataTrack(u_int16_t track, u_int16_t totalTracks)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
316 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
317 unsigned char t[9];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
318 const char *s = "moov.udta.meta.ilst.trkn.data";
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
319 MP4BytesProperty *pMetadataProperty = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
320 MP4Atom *pMetaAtom = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
321
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
322 pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
323
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
324 if (!pMetaAtom)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
325 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
326 if (!CreateMetadataAtom("trkn"))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
327 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
328
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
329 pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
330 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
331
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
332 memset(t, 0, 9*sizeof(unsigned char));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
333 t[2] = (unsigned char)(track>>8)&0xFF;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
334 t[3] = (unsigned char)(track)&0xFF;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
335 t[4] = (unsigned char)(totalTracks>>8)&0xFF;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
336 t[5] = (unsigned char)(totalTracks)&0xFF;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
337
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
338 pMetaAtom->FindProperty("data.metadata", (MP4Property**)&pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
339 ASSERT(pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
340
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
341 pMetadataProperty->SetValue((u_int8_t*)t, 8);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
342
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
343 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
344 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
345
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
346 bool MP4File::GetMetadataTrack(u_int16_t* track, u_int16_t* totalTracks)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
347 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
348 unsigned char *val = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
349 u_int32_t valSize = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
350 const char *s = "moov.udta.meta.ilst.trkn.data.metadata";
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
351
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
352 *track = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
353 *totalTracks = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
354
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
355 GetBytesProperty(s, (u_int8_t**)&val, &valSize);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
356
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
357 if (valSize != 8)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
358 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
359
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
360 *track = (u_int16_t)(val[3]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
361 *track += (u_int16_t)(val[2]<<8);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
362 *totalTracks = (u_int16_t)(val[5]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
363 *totalTracks += (u_int16_t)(val[4]<<8);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
364
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
365 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
366 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
367
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
368 bool MP4File::DeleteMetadataTrack()
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
369 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
370 return DeleteMetadataAtom("trkn");
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
371 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
372
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
373 bool MP4File::SetMetadataDisk(u_int16_t disk, u_int16_t totalDisks)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
374 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
375 unsigned char t[9];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
376 const char *s = "moov.udta.meta.ilst.disk.data";
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
377 MP4BytesProperty *pMetadataProperty = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
378 MP4Atom *pMetaAtom = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
379
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
380 pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
381
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
382 if (!pMetaAtom)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
383 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
384 if (!CreateMetadataAtom("disk"))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
385 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
386
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
387 pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
388 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
389
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
390 memset(t, 0, 9*sizeof(unsigned char));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
391 t[2] = (unsigned char)(disk>>8)&0xFF;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
392 t[3] = (unsigned char)(disk)&0xFF;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
393 t[4] = (unsigned char)(totalDisks>>8)&0xFF;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
394 t[5] = (unsigned char)(totalDisks)&0xFF;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
395
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
396 pMetaAtom->FindProperty("data.metadata", (MP4Property**)&pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
397 ASSERT(pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
398
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
399 pMetadataProperty->SetValue((u_int8_t*)t, 8);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
400
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
401 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
402 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
403
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
404 bool MP4File::GetMetadataDisk(u_int16_t* disk, u_int16_t* totalDisks)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
405 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
406 unsigned char *val = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
407 u_int32_t valSize = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
408 const char *s = "moov.udta.meta.ilst.disk.data.metadata";
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
409
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
410 *disk = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
411 *totalDisks = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
412
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
413 GetBytesProperty(s, (u_int8_t**)&val, &valSize);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
414
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
415 if (valSize != 8)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
416 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
417
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
418 *disk = (u_int16_t)(val[3]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
419 *disk += (u_int16_t)(val[2]<<8);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
420 *totalDisks = (u_int16_t)(val[5]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
421 *totalDisks += (u_int16_t)(val[4]<<8);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
422
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
423 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
424 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
425
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
426 bool MP4File::DeleteMetadataDisk()
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
427 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
428 return DeleteMetadataAtom("disk");
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
429 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
430
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
431 static const char* ID3v1GenreList[] = {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
432 "Blues", "Classic Rock", "Country", "Dance", "Disco", "Funk",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
433 "Grunge", "Hip-Hop", "Jazz", "Metal", "New Age", "Oldies",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
434 "Other", "Pop", "R&B", "Rap", "Reggae", "Rock",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
435 "Techno", "Industrial", "Alternative", "Ska", "Death Metal", "Pranks",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
436 "Soundtrack", "Euro-Techno", "Ambient", "Trip-Hop", "Vocal", "Jazz+Funk",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
437 "Fusion", "Trance", "Classical", "Instrumental", "Acid", "House",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
438 "Game", "Sound Clip", "Gospel", "Noise", "AlternRock", "Bass",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
439 "Soul", "Punk", "Space", "Meditative", "Instrumental Pop", "Instrumental Rock",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
440 "Ethnic", "Gothic", "Darkwave", "Techno-Industrial", "Electronic", "Pop-Folk",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
441 "Eurodance", "Dream", "Southern Rock", "Comedy", "Cult", "Gangsta",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
442 "Top 40", "Christian Rap", "Pop/Funk", "Jungle", "Native American", "Cabaret",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
443 "New Wave", "Psychadelic", "Rave", "Showtunes", "Trailer", "Lo-Fi",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
444 "Tribal", "Acid Punk", "Acid Jazz", "Polka", "Retro", "Musical",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
445 "Rock & Roll", "Hard Rock", "Folk", "Folk/Rock", "National Folk", "Swing",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
446 "Fast-Fusion", "Bebob", "Latin", "Revival", "Celtic", "Bluegrass", "Avantgarde",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
447 "Gothic Rock", "Progressive Rock", "Psychedelic Rock", "Symphonic Rock", "Slow Rock", "Big Band",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
448 "Chorus", "Easy Listening", "Acoustic", "Humour", "Speech", "Chanson",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
449 "Opera", "Chamber Music", "Sonata", "Symphony", "Booty Bass", "Primus",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
450 "Porn Groove", "Satire", "Slow Jam", "Club", "Tango", "Samba",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
451 "Folklore", "Ballad", "Power Ballad", "Rhythmic Soul", "Freestyle", "Duet",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
452 "Punk Rock", "Drum Solo", "A capella", "Euro-House", "Dance Hall",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
453 "Goa", "Drum & Bass", "Club House", "Hardcore", "Terror",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
454 "Indie", "BritPop", "NegerPunk", "Polsk Punk", "Beat",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
455 "Christian Gangsta", "Heavy Metal", "Black Metal", "Crossover", "Contemporary C",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
456 "Christian Rock", "Merengue", "Salsa", "Thrash Metal", "Anime", "JPop",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
457 "SynthPop",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
458 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
459
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
460 int GenreToString(char** GenreStr, const int genre)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
461 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
462 if (genre > 0 &&
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
463 genre <= (int)(sizeof(ID3v1GenreList)/sizeof(*ID3v1GenreList)))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
464 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
465 *GenreStr = (char*)malloc((strlen(ID3v1GenreList[genre-1])+1)*sizeof(char));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
466 memset(*GenreStr, 0, (strlen(ID3v1GenreList[genre-1])+1)*sizeof(char));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
467 strcpy(*GenreStr, ID3v1GenreList[genre-1]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
468 return 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
469 } else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
470 *GenreStr = (char*)malloc(2*sizeof(char));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
471 memset(*GenreStr, 0, 2*sizeof(char));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
472 return 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
473 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
474 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
475
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
476 int StringToGenre(const char* GenreStr)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
477 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
478 unsigned int i;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
479
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
480 for (i = 0; i < sizeof(ID3v1GenreList)/sizeof(*ID3v1GenreList); i++)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
481 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
482 if (strcasecmp(GenreStr, ID3v1GenreList[i]) == 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
483 return i+1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
484 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
485 return 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
486 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
487
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
488 bool MP4File::SetMetadataGenre(const char* value)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
489 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
490 u_int16_t genreIndex = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
491 unsigned char t[3];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
492 MP4BytesProperty *pMetadataProperty = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
493 MP4Atom *pMetaAtom = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
494
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
495 genreIndex = StringToGenre(value);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
496
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
497 const char *s = "moov.udta.meta.ilst.gnre.data";
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
498 const char *sroot = "moov.udta.meta.ilst.gnre";
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
499 const char *s2 = "moov.udta.meta.ilst.\251gen.data";
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
500 const char *s2root = "moov.udta.meta.ilst.\251gen";
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
501 if (genreIndex != 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
502 {
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
503 pMetaAtom = m_pRootAtom->FindAtom(s);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
504 if (!pMetaAtom)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
505 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
506 if (!CreateMetadataAtom("gnre"))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
507 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
508
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
509 pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
510 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
511
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
512 memset(t, 0, 3*sizeof(unsigned char));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
513 t[0] = (unsigned char)(genreIndex>>8)&0xFF;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
514 t[1] = (unsigned char)(genreIndex)&0xFF;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
515
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
516 pMetaAtom->FindProperty("data.metadata", (MP4Property**)&pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
517 ASSERT(pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
518
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
519 pMetadataProperty->SetValue((u_int8_t*)t, 2);
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
520
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
521 // remove other style of genre atom, if this one is added
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
522 pMetaAtom = m_pRootAtom->FindAtom(s2root);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
523 if (pMetaAtom != NULL) {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
524 MP4Atom *pParent = pMetaAtom->GetParentAtom();
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
525 pParent->DeleteChildAtom(pMetaAtom);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
526 delete pMetaAtom;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
527 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
528
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
529
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
530 (void)DeleteMetadataAtom( "\251gen" );
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
531
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
532 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
533 } else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
534 pMetaAtom = m_pRootAtom->FindAtom(s2);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
535
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
536 if (!pMetaAtom)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
537 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
538 if (!CreateMetadataAtom("\251gen"))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
539 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
540
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
541 pMetaAtom = m_pRootAtom->FindAtom(s2);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
542 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
543
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
544 pMetaAtom->FindProperty("data.metadata", (MP4Property**)&pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
545 ASSERT(pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
546
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
547 pMetadataProperty->SetValue((u_int8_t*)value, strlen(value));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
548
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
549 // remove other gnre atom if this one is entered
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
550 pMetaAtom = m_pRootAtom->FindAtom(sroot);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
551 if (pMetaAtom != NULL) {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
552 MP4Atom *pParent = pMetaAtom->GetParentAtom();
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
553 pParent->DeleteChildAtom(pMetaAtom);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
554 delete pMetaAtom;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
555 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
556 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
557 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
558
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
559 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
560 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
561
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
562 bool MP4File::GetMetadataGenre(char** value)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
563 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
564 u_int16_t genreIndex = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
565 unsigned char *val = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
566 u_int32_t valSize = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
567 const char *t = "moov.udta.meta.ilst.gnre";
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
568 const char *s = "moov.udta.meta.ilst.gnre.data.metadata";
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
569
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
570 *value = NULL;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
571
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
572 MP4Atom *gnre = FindAtom(t);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
573
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
574 if (gnre)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
575 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
576 GetBytesProperty(s, (u_int8_t**)&val, &valSize);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
577
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
578 if (valSize != 2)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
579 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
580
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
581 genreIndex = (u_int16_t)(val[1]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
582 genreIndex += (u_int16_t)(val[0]<<8);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
583
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
584 GenreToString(value, genreIndex);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
585
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
586 (void)DeleteMetadataAtom( "gnre" );
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
587
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
588 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
589 } else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
590 const char *s2 = "moov.udta.meta.ilst.\251gen.data.metadata";
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
591
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
592 val = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
593 valSize = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
594
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
595 GetBytesProperty(s2, (u_int8_t**)&val, &valSize);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
596
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
597 if (valSize > 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
598 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
599 *value = (char*)malloc((valSize+1)*sizeof(unsigned char));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
600 memset(*value, 0, (valSize+1)*sizeof(unsigned char));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
601 memcpy(*value, val, valSize*sizeof(unsigned char));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
602 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
603 } else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
604 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
605 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
606 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
607
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
608 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
609 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
610
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
611 bool MP4File::DeleteMetadataGenre()
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
612 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
613 bool val1 = DeleteMetadataAtom("\251gen");
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
614 bool val2 = DeleteMetadataAtom("gnre");
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
615 return val1 || val2;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
616 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
617
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
618 bool MP4File::SetMetadataGrouping(const char* value)
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
619 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
620 return SetMetadataString("\251grp", value);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
621 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
622
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
623 bool MP4File::GetMetadataGrouping(char** value)
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
624 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
625 return GetMetadataString("\251grp", value);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
626 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
627
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
628 bool MP4File::DeleteMetadataGrouping()
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
629 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
630 return DeleteMetadataAtom("\251grp");
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
631 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
632
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
633 bool MP4File::SetMetadataTempo(u_int16_t tempo)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
634 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
635 unsigned char t[3];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
636 const char *s = "moov.udta.meta.ilst.tmpo.data";
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
637 MP4BytesProperty *pMetadataProperty = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
638 MP4Atom *pMetaAtom = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
639
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
640 pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
641
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
642 if (!pMetaAtom)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
643 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
644 if (!CreateMetadataAtom("tmpo"))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
645 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
646
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
647 pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
648 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
649
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
650 memset(t, 0, 3*sizeof(unsigned char));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
651 t[0] = (unsigned char)(tempo>>8)&0xFF;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
652 t[1] = (unsigned char)(tempo)&0xFF;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
653
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
654 pMetaAtom->FindProperty("data.metadata", (MP4Property**)&pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
655 ASSERT(pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
656
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
657 pMetadataProperty->SetValue((u_int8_t*)t, 2);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
658
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
659 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
660 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
661
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
662 bool MP4File::GetMetadataTempo(u_int16_t* tempo)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
663 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
664 unsigned char *val = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
665 u_int32_t valSize = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
666 const char *s = "moov.udta.meta.ilst.tmpo.data.metadata";
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
667
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
668 *tempo = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
669
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
670 GetBytesProperty(s, (u_int8_t**)&val, &valSize);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
671
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
672 if (valSize != 2)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
673 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
674
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
675 *tempo = (u_int16_t)(val[1]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
676 *tempo += (u_int16_t)(val[0]<<8);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
677
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
678 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
679 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
680
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
681 bool MP4File::DeleteMetadataTempo()
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
682 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
683 return DeleteMetadataAtom("tmpo");
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
684 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
685
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
686 bool MP4File::SetMetadataCompilation(u_int8_t compilation)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
687 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
688 const char *s = "moov.udta.meta.ilst.cpil.data";
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
689 MP4BytesProperty *pMetadataProperty = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
690 MP4Atom *pMetaAtom = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
691
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
692 pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
693
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
694 if (!pMetaAtom)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
695 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
696 if (!CreateMetadataAtom("cpil"))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
697 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
698
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
699 pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
700 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
701
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
702 pMetaAtom->FindProperty("data.metadata", (MP4Property**)&pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
703 ASSERT(pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
704
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
705 compilation &= 0x1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
706 pMetadataProperty->SetValue((u_int8_t*)&compilation, 1);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
707
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
708 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
709 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
710
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
711 bool MP4File::GetMetadataCompilation(u_int8_t* compilation)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
712 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
713 unsigned char *val = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
714 u_int32_t valSize = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
715 const char *s = "moov.udta.meta.ilst.cpil.data.metadata";
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
716
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
717 *compilation = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
718
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
719 GetBytesProperty(s, (u_int8_t**)&val, &valSize);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
720
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
721 if (valSize != 1)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
722 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
723
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
724 *compilation = (u_int16_t)(val[0]);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
725
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
726 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
727 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
728
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
729 bool MP4File::DeleteMetadataCompilation()
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
730 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
731 return DeleteMetadataAtom("cpil");
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
732 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
733
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
734 bool MP4File::SetMetadataCoverArt(u_int8_t *coverArt, u_int32_t size)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
735 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
736 const char *s = "moov.udta.meta.ilst.covr.data";
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
737 MP4BytesProperty *pMetadataProperty = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
738 MP4Atom *pMetaAtom = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
739
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
740 pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
741
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
742 if (!pMetaAtom)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
743 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
744 if (!CreateMetadataAtom("covr"))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
745 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
746
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
747 pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
748 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
749
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
750 pMetaAtom->FindProperty("data.metadata", (MP4Property**)&pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
751 ASSERT(pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
752
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
753 pMetadataProperty->SetValue(coverArt, size);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
754
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
755 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
756 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
757
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
758 bool MP4File::GetMetadataCoverArt(u_int8_t **coverArt, u_int32_t *size)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
759 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
760 const char *s = "moov.udta.meta.ilst.covr.data.metadata";
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
761
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
762 *coverArt = NULL;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
763 *size = 0;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
764
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
765 GetBytesProperty(s, coverArt, size);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
766
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
767 if (size == 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
768 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
769
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
770 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
771 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
772
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
773 bool MP4File::DeleteMetadataCoverArt()
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
774 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
775 return DeleteMetadataAtom("covr");
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
776 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
777
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
778 bool MP4File::SetMetadataFreeForm(char *name, u_int8_t* pValue, u_int32_t valueSize)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
779 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
780 MP4Atom *pMetaAtom = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
781 MP4BytesProperty *pMetadataProperty = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
782 char s[256];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
783 int i = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
784
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
785 while (1)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
786 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
787 MP4BytesProperty *pMetadataProperty;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
788
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
789 sprintf(s, "moov.udta.meta.ilst.----[%u].name", i);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
790
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
791 MP4Atom *pTagAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
792
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
793 if (!pTagAtom)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
794 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
795
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
796 pTagAtom->FindProperty("name.metadata", (MP4Property**)&pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
797 if (pMetadataProperty)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
798 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
799 u_int8_t* pV;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
800 u_int32_t VSize = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
801
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
802 pMetadataProperty->GetValue(&pV, &VSize);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
803
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
804 if (VSize != 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
805 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
806 if (memcmp(pV, name, VSize) == 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
807 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
808 sprintf(s, "moov.udta.meta.ilst.----[%u].data.metadata", i);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
809 SetBytesProperty(s, pValue, valueSize);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
810
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
811 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
812 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
813 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
814 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
815
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
816 i++;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
817 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
818
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
819 /* doesn't exist yet, create it */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
820 char t[256];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
821
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
822 sprintf(t, "udta.meta.ilst.----[%u]", i);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
823 sprintf(s, "moov.udta.meta.ilst.----[%u].data", i);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
824 AddDescendantAtoms("moov", t);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
825
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
826 pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
827
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
828 if (!pMetaAtom)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
829 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
830
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
831 pMetaAtom->SetFlags(0x1);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
832
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
833 MP4Atom *pHdlrAtom = m_pRootAtom->FindAtom("moov.udta.meta.hdlr");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
834 MP4StringProperty *pStringProperty = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
835 MP4BytesProperty *pBytesProperty = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
836 ASSERT(pHdlrAtom);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
837
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
838 pHdlrAtom->FindProperty(
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
839 "hdlr.handlerType", (MP4Property**)&pStringProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
840 ASSERT(pStringProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
841 pStringProperty->SetValue("mdir");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
842
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
843 u_int8_t val[12];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
844 memset(val, 0, 12*sizeof(u_int8_t));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
845 val[0] = 0x61;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
846 val[1] = 0x70;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
847 val[2] = 0x70;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
848 val[3] = 0x6c;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
849 pHdlrAtom->FindProperty(
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
850 "hdlr.reserved2", (MP4Property**)&pBytesProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
851 ASSERT(pBytesProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
852 pBytesProperty->SetReadOnly(false);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
853 pBytesProperty->SetValue(val, 12);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
854 pBytesProperty->SetReadOnly(true);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
855
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
856 pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
857 pMetaAtom->FindProperty("data.metadata", (MP4Property**)&pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
858 ASSERT(pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
859 pMetadataProperty->SetValue(pValue, valueSize);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
860
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
861 sprintf(s, "moov.udta.meta.ilst.----[%u].name", i);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
862 pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
863 pMetaAtom->FindProperty("name.metadata", (MP4Property**)&pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
864 ASSERT(pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
865 pMetadataProperty->SetValue((u_int8_t*)name, strlen(name));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
866
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
867 sprintf(s, "moov.udta.meta.ilst.----[%u].mean", i);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
868 pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
869 pMetaAtom->FindProperty("mean.metadata", (MP4Property**)&pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
870 ASSERT(pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
871 pMetadataProperty->SetValue((u_int8_t*)"com.apple.iTunes", 16); /* ?? */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
872
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
873 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
874 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
875
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
876 bool MP4File::GetMetadataFreeForm(char *name, u_int8_t** ppValue, u_int32_t *pValueSize)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
877 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
878 char s[256];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
879 int i = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
880
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
881 *ppValue = NULL;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
882 *pValueSize = 0;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
883
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
884 while (1)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
885 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
886 MP4BytesProperty *pMetadataProperty;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
887
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
888 sprintf(s, "moov.udta.meta.ilst.----[%u].name", i);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
889
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
890 MP4Atom *pTagAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
891
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
892 if (!pTagAtom)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
893 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
894
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
895 pTagAtom->FindProperty("name.metadata", (MP4Property**)&pMetadataProperty);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
896 if (pMetadataProperty)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
897 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
898 u_int8_t* pV;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
899 u_int32_t VSize = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
900
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
901 pMetadataProperty->GetValue(&pV, &VSize);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
902
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
903 if (VSize != 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
904 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
905 if (memcmp(pV, name, VSize) == 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
906 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
907 sprintf(s, "moov.udta.meta.ilst.----[%u].data.metadata", i);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
908 GetBytesProperty(s, ppValue, pValueSize);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
909
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
910 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
911 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
912 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
913 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
914
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
915 i++;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
916 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
917 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
918
201
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
919 bool MP4File::DeleteMetadataFreeForm(char *name)
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
920 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
921 char s[256];
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
922 int i = 0;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
923
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
924 while (1)
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
925 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
926 MP4BytesProperty *pMetadataProperty;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
927
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
928 sprintf(s, "moov.udta.meta.ilst.----[%u].name", i);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
929
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
930 MP4Atom *pTagAtom = m_pRootAtom->FindAtom(s);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
931
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
932 if (!pTagAtom)
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
933 return false;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
934
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
935 pTagAtom->FindProperty("name.metadata", (MP4Property**)&pMetadataProperty);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
936 if (pMetadataProperty)
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
937 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
938 u_int8_t* pV;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
939 u_int32_t VSize = 0;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
940
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
941 pMetadataProperty->GetValue(&pV, &VSize);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
942
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
943 if (VSize != 0)
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
944 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
945 if (memcmp(pV, name, VSize) == 0)
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
946 {
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
947 sprintf(s, "----[%u]", i);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
948
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
949 return DeleteMetadataAtom(s);
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
950 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
951 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
952 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
953
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
954 i++;
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
955 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
956 }
f2dc045d2327 [svn] libmp4v2 goes back to the future
chainsaw
parents: 199
diff changeset
957
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
958 bool MP4File::MetadataDelete()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
959 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
960 MP4Atom *pMetaAtom = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
961 char s[256];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
962
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
963 sprintf(s, "moov.udta.meta");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
964 pMetaAtom = m_pRootAtom->FindAtom(s);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
965
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
966 /* if it exists, delete it */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
967 if (pMetaAtom)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
968 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
969 MP4Atom *pParent = pMetaAtom->GetParentAtom();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
970
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
971 pParent->DeleteChildAtom(pMetaAtom);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
972
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
973 delete pMetaAtom;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
974
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
975 return true;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
976 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
977
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
978 return false;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
979 }