annotate src/libaudtag/wma/wma.c @ 4887:0ddbd0025174 default tip

added libaudtag. (not used yet.)
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Wed, 05 May 2010 18:26:06 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4887
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
1 /*
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
2 * Copyright 2009 Paula Stanciu
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
3 *
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
4 * This file is part of Audacious.
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
5 *
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
6 * Audacious is free software: you can redistribute it and/or modify it under
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
7 * the terms of the GNU General Public License as published by the Free Software
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
8 * Foundation, version 3 of the License.
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
9 *
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
10 * Audacious is distributed in the hope that it will be useful, but WITHOUT ANY
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
11 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
12 * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
13 *
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
14 * You should have received a copy of the GNU General Public License along with
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
15 * Audacious. If not, see <http://www.gnu.org/licenses/>.
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
16 *
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
17 * The Audacious team does not consider modular code linking to Audacious or
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
18 * using our public API to be a derived work.
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
19 */
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
20
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
21 #include <inttypes.h>
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
22 #include <glib-2.0/glib/gstdio.h>
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
23 #include <audlegacy/tuple.h>
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
24
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
25 #include "guid.h"
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
26 #include "wma.h"
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
27 #include "wma_fmt.h"
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
28 #include "module.h"
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
29 #include "../util.h"
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
30
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
31 /* static functions */
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
32 static GenericHeader *read_generic_header(VFSFile * f, gboolean read_data)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
33 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
34 AUDDBG("read top-level header object\n");
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
35 g_return_val_if_fail((f != NULL), NULL);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
36 GenericHeader *header = g_new0(GenericHeader, 1);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
37 header->guid = guid_read_from_file(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
38 header->size = read_LEuint64(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
39 if (read_data)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
40 header->data = (gchar *) read_char_data(f, header->size);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
41 else
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
42 header->data = NULL;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
43
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
44 gchar *s = guid_convert_to_string(header->guid);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
45 AUDDBG("read GUID: %s\n", s);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
46 g_free(s);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
47
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
48 return header;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
49 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
50
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
51 static HeaderObj *read_top_header_object(VFSFile * f)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
52 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
53 AUDDBG("read top-level header object\n");
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
54 g_return_val_if_fail((f != NULL), NULL);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
55 HeaderObj *header = g_new0(HeaderObj, 1);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
56
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
57 //we have already read the GUID so we skip it (16 bytes)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
58 vfs_fseek(f, 16, SEEK_SET);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
59
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
60 header->size = read_LEuint64(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
61 header->objectsNr = read_LEuint32(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
62 AUDDBG("Number of child objects: %d\n", header->objectsNr);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
63
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
64 header->res1 = read_uint8(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
65 header->res2 = read_uint8(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
66
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
67 if ((header->size == -1) || (header->objectsNr == -1) || (header->res2 != 2))
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
68 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
69 g_free(header);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
70 return NULL;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
71 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
72 return header;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
73 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
74
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
75 static ContentDescrObj *read_content_descr_obj(VFSFile * f)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
76 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
77 ContentDescrObj *cdo = g_new0(ContentDescrObj, 1);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
78 cdo->guid = guid_read_from_file(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
79 cdo->size = read_LEuint64(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
80 cdo->title_length = read_LEuint16(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
81 cdo->author_length = read_LEuint16(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
82 cdo->copyright_length = read_LEuint16(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
83 cdo->desc_length = read_LEuint16(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
84 cdo->rating_length = read_LEuint16(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
85 cdo->title = fread_utf16(f, cdo->title_length);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
86 cdo->author = fread_utf16(f, cdo->author_length);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
87 cdo->copyright = fread_utf16(f, cdo->copyright_length);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
88 cdo->description = fread_utf16(f, cdo->desc_length);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
89 cdo->rating = fread_utf16(f, cdo->rating_length);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
90 return cdo;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
91 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
92
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
93 static ExtContentDescrObj *read_ext_content_descr_obj(VFSFile * f, Tuple * t, gboolean populate_tuple)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
94 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
95 ExtContentDescrObj *ecdo = g_new0(ExtContentDescrObj, 1);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
96 ecdo->guid = guid_read_from_file(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
97 ecdo->size = read_LEuint64(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
98 ecdo->content_desc_count = read_LEuint16(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
99 ecdo->descriptors = read_descriptors(f, ecdo->content_desc_count, t, populate_tuple);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
100 return ecdo;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
101 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
102
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
103 static guint find_descriptor_id(gchar * s)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
104 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
105 AUDDBG("finding descriptor id for '%s'\n", s);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
106 g_return_val_if_fail(s != NULL, -1);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
107 gchar *l[DESC_LAST] = { DESC_ALBUM_STR, DESC_YEAR_STR, DESC_GENRE_STR, DESC_TRACK_STR };
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
108 guint i;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
109 for (i = 0; i < DESC_LAST; i++)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
110 if (!strcmp(l[i], s))
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
111 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
112 AUDDBG("found descriptor %s\n", s);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
113 return i;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
114 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
115 return -1;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
116 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
117
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
118 static ContentDescriptor *read_descriptor(VFSFile * f, Tuple * t, gboolean populate_tuple)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
119 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
120 ContentDescriptor *cd = g_new0(ContentDescriptor, 1);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
121 gchar *val = NULL, *name = NULL;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
122 guint32 intval = -1;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
123 gint dtype;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
124 AUDDBG("reading name_len\n");
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
125 cd->name_len = read_LEuint16(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
126 AUDDBG("reading name\n");
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
127 cd->name = fread_utf16(f, cd->name_len);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
128 AUDDBG("reading val_type\n");
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
129 cd->val_type = read_LEuint16(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
130 AUDDBG("reading val_len\n");
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
131 cd->val_len = read_LEuint16(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
132
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
133 name = utf8(cd->name);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
134 dtype = find_descriptor_id(name);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
135 g_free(name);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
136
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
137 AUDDBG("reading val\n");
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
138
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
139 if (populate_tuple)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
140 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
141 /*we only parse int's and UTF strings, everything else is handled as raw data */
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
142 if (cd->val_type == 0)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
143 { /*UTF16 */
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
144 cd->val = read_char_data(f, cd->val_len);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
145 val = utf8((gunichar2 *) cd->val);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
146 AUDDBG("val: '%s' dtype: %d\n", val, dtype);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
147 if (dtype == DESC_ALBUM)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
148 tuple_associate_string(t, FIELD_ALBUM, NULL, val);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
149 if (dtype == DESC_GENRE)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
150 tuple_associate_string(t, FIELD_GENRE, NULL, val);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
151 if (dtype == DESC_TRACK)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
152 tuple_associate_int(t, FIELD_TRACK_NUMBER, NULL, atoi(val));
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
153 if (dtype == DESC_YEAR)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
154 tuple_associate_int(t, FIELD_YEAR, NULL, atoi(val));
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
155 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
156 else
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
157 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
158 if (cd->val_type == 3)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
159 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
160 intval = read_LEuint32(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
161 AUDDBG("intval: %d, dtype: %d\n", intval, dtype);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
162 if (dtype == DESC_TRACK)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
163 tuple_associate_int(t, FIELD_TRACK_NUMBER, NULL, intval);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
164 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
165 else
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
166 cd->val = read_char_data(f, cd->val_len);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
167 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
168 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
169 else
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
170 cd->val = read_char_data(f, cd->val_len);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
171 AUDDBG("read str_val: '%s', intval: %d\n", val, intval);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
172 AUDDBG("exiting read_descriptor \n\n");
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
173 return cd;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
174 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
175
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
176 static ContentDescriptor **read_descriptors(VFSFile * f, guint count, Tuple * t, gboolean populate_tuple)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
177 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
178 if (count == 0)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
179 return NULL;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
180 ContentDescriptor **descs = g_new0(ContentDescriptor *, count);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
181 int i;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
182 for (i = 0; i < count; i++)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
183 descs[i] = read_descriptor(f, t, populate_tuple);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
184 return descs;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
185 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
186
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
187 void free_content_descr_obj(ContentDescrObj * c)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
188 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
189 g_free(c->guid);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
190 g_free(c->title);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
191 g_free(c->author);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
192 g_free(c->copyright);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
193 g_free(c->description);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
194 g_free(c->rating);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
195 g_free(c);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
196 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
197
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
198 void free_content_descr(ContentDescriptor * cd)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
199 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
200 g_free(cd->name);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
201 g_free(cd->val);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
202 g_free(cd);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
203 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
204
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
205 void free_ext_content_descr_obj(ExtContentDescrObj * ecdo)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
206 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
207 int i;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
208 g_free(ecdo->guid);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
209 for (i = 0; i < ecdo->content_desc_count; i++)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
210 free_content_descr(ecdo->descriptors[i]);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
211 g_free(ecdo);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
212 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
213
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
214 /* returns the offset of the object in the file */
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
215 static long ftell_object_by_guid(VFSFile * f, GUID * g)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
216 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
217 AUDDBG("seeking object %s, with ID %d \n", guid_convert_to_string(g), get_guid_type(g));
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
218 HeaderObj *h = read_top_header_object(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
219 g_return_val_if_fail((f != NULL) && (g != NULL) && (h != NULL), -1);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
220
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
221 gint i = 0;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
222 while (i < h->objectsNr)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
223 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
224 GenericHeader *gen_hdr = read_generic_header(f, FALSE);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
225 AUDDBG("encountered GUID %s, with ID %d\n", guid_convert_to_string(gen_hdr->guid), get_guid_type(gen_hdr->guid));
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
226 if (guid_equal(gen_hdr->guid, g))
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
227 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
228 g_free(h);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
229 g_free(gen_hdr);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
230 guint64 ret = vfs_ftell(f) - 24;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
231 AUDDBG("at offset %" PRIx64 "\n", ret);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
232 return ret;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
233 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
234 vfs_fseek(f, gen_hdr->size - 24, SEEK_CUR); //most headers have a size as their second field"
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
235 i++;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
236 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
237 AUDDBG("The object was not found\n");
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
238
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
239 return -1;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
240 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
241
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
242 VFSFile *make_temp_file()
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
243 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
244 /* create a temporary file */
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
245 const gchar *tmpdir = g_get_tmp_dir();
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
246 gchar *tmp_path = g_strdup_printf("file://%s/%s", tmpdir, "wmatmp.wma");
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
247 return vfs_fopen(tmp_path, "w+");
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
248 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
249
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
250 long ftell_object_by_str(VFSFile * f, gchar * s)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
251 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
252 GUID *g = guid_convert_from_string(s);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
253 long res = ftell_object_by_guid(f, g);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
254 g_free(g);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
255 return res;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
256 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
257
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
258 static void write_content_descr_obj_from_tuple(VFSFile * f, ContentDescrObj * cdo, Tuple * t)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
259 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
260 glong size;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
261 gboolean free_cdo = FALSE;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
262 if (cdo == NULL)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
263 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
264 cdo = g_new0(ContentDescrObj, 1);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
265 free_cdo = TRUE;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
266 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
267
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
268 cdo->title = g_utf8_to_utf16(tuple_get_string(t, FIELD_TITLE, NULL), -1, NULL, &size, NULL);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
269 cdo->title_length = 2 * (size + 1);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
270 cdo->author = g_utf8_to_utf16(tuple_get_string(t, FIELD_ARTIST, NULL), -1, NULL, &size, NULL);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
271 cdo->author_length = 2 * (size + 1);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
272 cdo->copyright = g_utf8_to_utf16(tuple_get_string(t, FIELD_COPYRIGHT, NULL), -1, NULL, &size, NULL);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
273 cdo->copyright_length = 2 * (size + 1);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
274 cdo->description = g_utf8_to_utf16(tuple_get_string(t, FIELD_COMMENT, NULL), -1, NULL, &size, NULL);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
275 cdo->desc_length = 2 * (size + 1);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
276 cdo->size = 34 + cdo->title_length + cdo->author_length + cdo->copyright_length + cdo->desc_length;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
277 guid_write_to_file(f, ASF_CONTENT_DESCRIPTION_OBJECT);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
278 write_LEuint64(f, cdo->size);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
279 write_LEuint16(f, cdo->title_length);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
280 write_LEuint16(f, cdo->author_length);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
281 write_LEuint16(f, cdo->copyright_length);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
282 write_LEuint16(f, cdo->desc_length);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
283 write_LEuint16(f, 2); // rating_length = 2
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
284 write_utf16(f, cdo->title, cdo->title_length);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
285 write_utf16(f, cdo->title, cdo->title_length);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
286 write_utf16(f, cdo->author, cdo->author_length);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
287 write_utf16(f, cdo->copyright, cdo->copyright_length);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
288 write_utf16(f, cdo->description, cdo->desc_length);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
289 write_utf16(f, NULL, 2); //rating == NULL
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
290
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
291 if (free_cdo)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
292 free_content_descr_obj(cdo);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
293 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
294
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
295 static void write_ext_content_descr_obj_from_tuple(VFSFile * f, ExtContentDescrObj * ecdo, Tuple * tuple)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
296 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
297 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
298
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
299 static gboolean write_generic_header(VFSFile * f, GenericHeader * gh)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
300 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
301 AUDDBG("Writing generic header\n");
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
302 guid_write_to_file(f, get_guid_type(gh->guid));
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
303 return write_char_data(f, gh->data, gh->size);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
304 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
305
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
306 static void free_generic_header(GenericHeader * gh)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
307 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
308 g_free(gh->guid);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
309 g_free(gh->data);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
310 g_free(gh);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
311 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
312
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
313 static gboolean write_top_header_object(VFSFile * f, HeaderObj * header)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
314 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
315 AUDDBG("write header object\n");
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
316 vfs_fseek(f, 0, SEEK_SET);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
317 return (guid_write_to_file(f, ASF_HEADER_OBJECT) && write_LEuint64(f, header->size) && write_LEuint32(f, header->objectsNr) && write_uint8(f, header->res1) && /* the reserved fields */
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
318 write_uint8(f, header->res2));
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
319 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
320
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
321 /* interface functions */
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
322 gboolean wma_can_handle_file(VFSFile * f)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
323 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
324 GUID *guid1 = guid_read_from_file(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
325 GUID *guid2 = guid_convert_from_string(ASF_HEADER_OBJECT_GUID);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
326 gboolean equal = ((guid1 != NULL) && guid_equal(guid1, guid2));
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
327
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
328 g_free(guid1);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
329 g_free(guid2);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
330
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
331 return equal;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
332 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
333
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
334 Tuple *wma_populate_tuple_from_file(Tuple * t, VFSFile * f)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
335 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
336 gchar *artist = NULL, *title = NULL, *comment = NULL;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
337
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
338 print_tuple(t);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
339 gint seek_res = vfs_fseek(f, ftell_object_by_str(f, ASF_CONTENT_DESCRIPTION_OBJECT_GUID), SEEK_SET);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
340 if (seek_res == 0)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
341 { //if the CONTENT_DESCRIPTION_OBJECT was found
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
342 ContentDescrObj *cdo = read_content_descr_obj(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
343 artist = utf8(cdo->author);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
344 title = utf8(cdo->title);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
345 comment = utf8(cdo->description);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
346 free_content_descr_obj(cdo);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
347 tuple_associate_string(t, FIELD_ARTIST, NULL, artist);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
348 tuple_associate_string(t, FIELD_TITLE, NULL, title);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
349 tuple_associate_string(t, FIELD_COMMENT, NULL, comment);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
350 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
351 seek_res = vfs_fseek(f, ftell_object_by_str(f, ASF_EXTENDED_CONTENT_DESCRIPTION_OBJECT_GUID), SEEK_SET);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
352 /*this populates the tuple with the attributes stored as extended descriptors */
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
353 ExtContentDescrObj *ecdo = read_ext_content_descr_obj(f, t, TRUE);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
354 free_ext_content_descr_obj(ecdo);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
355 print_tuple(t);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
356 return t;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
357 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
358
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
359 gboolean wma_write_tuple_to_file(Tuple * tuple, VFSFile * f)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
360 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
361
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
362
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
363 #if BROKEN
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
364 return FALSE;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
365 #endif
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
366
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
367 HeaderObj *top_ho = read_top_header_object(f);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
368 VFSFile *tmpfile = make_temp_file();
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
369 gint i, cdo_pos, ecdo_pos;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
370 GUID *g;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
371 /*read all the headers and write them to the new file */
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
372 /*the headers that contain tuple data will be overwritten */
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
373 AUDDBG("Header Object size: %" PRId64 "\n", top_ho->size);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
374 //vfs_fseek(tmpfile, )
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
375 for (i = 0; i < top_ho->objectsNr; i++)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
376 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
377 GenericHeader *gh = read_generic_header(f, TRUE);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
378 g = guid_convert_from_string(ASF_CONTENT_DESCRIPTION_OBJECT_GUID);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
379 if (guid_equal(gh->guid, g))
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
380 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
381 write_content_descr_obj_from_tuple(tmpfile, (ContentDescrObj *) gh, tuple);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
382 g_free(g);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
383 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
384 else
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
385 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
386 g = guid_convert_from_string(ASF_EXTENDED_CONTENT_DESCRIPTION_OBJECT_GUID);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
387 if (guid_equal(gh->guid, g))
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
388 write_ext_content_descr_obj_from_tuple(tmpfile, (ExtContentDescrObj *) gh, tuple);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
389 else
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
390 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
391 write_generic_header(tmpfile, gh);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
392 g_free(g);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
393 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
394 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
395 free_generic_header(gh);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
396 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
397 /*check wether these headers existed in the original file */
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
398 cdo_pos = ftell_object_by_str(f, ASF_CONTENT_DESCRIPTION_OBJECT_GUID);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
399 ecdo_pos = ftell_object_by_str(f, ASF_EXTENDED_CONTENT_DESCRIPTION_OBJECT_GUID);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
400 if (cdo_pos == -1)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
401 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
402 write_content_descr_obj_from_tuple(tmpfile, NULL, tuple);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
403 top_ho->objectsNr++;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
404 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
405 if (ecdo_pos != -1)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
406 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
407 write_ext_content_descr_obj_from_tuple(tmpfile, NULL, tuple);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
408 top_ho->objectsNr++;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
409 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
410 write_top_header_object(tmpfile, top_ho);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
411
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
412 gchar *f1 = g_filename_from_uri(tmpfile->uri, NULL, NULL);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
413 gchar *f2 = g_filename_from_uri(f->uri, NULL, NULL);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
414 vfs_fclose(tmpfile);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
415 /*
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
416 if (g_rename(f1, f2) == 0)
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
417 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
418 AUDDBG("the tag was updated successfully\n");
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
419 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
420 else
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
421 {
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
422 AUDDBG("an error has occured\n");
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
423 }
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
424 */
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
425 g_free(f1);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
426 g_free(f2);
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
427
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
428 return TRUE;
0ddbd0025174 added libaudtag. (not used yet.)
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
diff changeset
429 }