Mercurial > audlegacy
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 |
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 } |