Mercurial > audlegacy-plugins
annotate src/tta/libtta.c @ 3106:a0628e5f3074
gio: fix FD leak
author | William Pitcock <nenolod@atheme.org> |
---|---|
date | Thu, 30 Apr 2009 12:35:54 -0500 |
parents | 3134a0987162 |
children |
rev | line source |
---|---|
290 | 1 /* |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
2 * libtta.c |
290 | 3 * |
4 * Description: TTA input plug-in for Audacious | |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
5 * Developed by: Alexander Djourik <ald@true-audio.com> |
290 | 6 * Audacious port: Yoshiki Yazawa <yaz@cc.rim.or.jp> |
7 * | |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
8 * Copyright (c) 2007 Alexander Djourik. All rights reserved. |
290 | 9 * |
10 */ | |
11 | |
12 /* | |
13 * This library is free software; you can redistribute it and/or | |
14 * modify it under the terms of the GNU Lesser General Public | |
15 * License as published by the Free Software Foundation; either | |
16 * version 2.1 of the License, or (at your option) any later version. | |
17 * | |
18 * This library is distributed in the hope that it will be useful, | |
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
21 * Lesser General Public License for more details. | |
22 * | |
23 * You should have received a copy of the GNU Lesser General Public | |
24 * License along with this library; if not, write to the Free Software | |
2835 | 25 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
290 | 26 * |
27 * Please see the file COPYING in this directory for full copyright | |
28 * information. | |
29 */ | |
528 | 30 |
2213
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2165
diff
changeset
|
31 /* #define AUD_DEBUG 1 */ |
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2165
diff
changeset
|
32 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
33 #include "config.h" |
528 | 34 |
290 | 35 #include <stdio.h> |
36 #include <stdlib.h> | |
37 #include <string.h> | |
38 #include <time.h> | |
39 #include <sys/types.h> | |
40 #include <sys/stat.h> | |
41 #include <glib.h> | |
42 #include <string.h> | |
43 | |
2971
3134a0987162
- changed include path from audacious to audlegacy.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
2835
diff
changeset
|
44 #include <audlegacy/plugin.h> |
3134a0987162
- changed include path from audacious to audlegacy.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
2835
diff
changeset
|
45 #include <audlegacy/output.h> |
3134a0987162
- changed include path from audacious to audlegacy.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
2835
diff
changeset
|
46 #include <audlegacy/i18n.h> |
3134a0987162
- changed include path from audacious to audlegacy.
Yoshiki Yazawa <yaz@honeyplanet.jp>
parents:
2835
diff
changeset
|
47 #include <audlegacy/id3tag.h> |
290 | 48 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
49 #define PLUGIN_VERSION "1.4" |
290 | 50 #define PROJECT_URL "<http://www.true-audio.com>" |
51 | |
52 #include "ttalib.h" | |
53 | |
54 #define OUTPUT_ERROR (MEMORY_ERROR+1) | |
55 #define MAX_BSIZE (MAX_BPS>>3) | |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
56 #define BYTES(x) ((x) * sizeof(id3_ucs4_t)) |
290 | 57 |
58 static void init (); | |
59 static void cleanup (); | |
60 static int is_our_file (char *filename); | |
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
528
diff
changeset
|
61 static void play_file (InputPlayback *playback); |
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
528
diff
changeset
|
62 static void tta_pause (InputPlayback *playback, short paused); |
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
528
diff
changeset
|
63 static void stop (InputPlayback *playback); |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
64 static void mseek (InputPlayback *playback, gulong millisec); |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
65 static void seek (InputPlayback *playback, int sec); |
290 | 66 static void get_song_info (char *filename, char **title, int *length); |
67 static void file_info (char *filename); | |
68 static void about (); | |
1440
90af998f55fa
tta: new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
69 static Tuple *get_song_tuple(char *filename); |
1507
3f4a74858aa0
- make use of tuple_formatter_make_title_string().
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1473
diff
changeset
|
70 //static gchar *extname(const char *filename); |
851 | 71 |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
72 static GThread *decode_thread = NULL; |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
73 static char sample_buffer[PCM_BUFFER_LENGTH * MAX_BSIZE * MAX_NCH]; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
74 static tta_info info; // currently playing file info |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
75 static int seek_position = -1; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
76 static int read_samples = -1; |
290 | 77 |
372
a157306caf03
[svn] - finalize the plugin-side of the extension-assist ABI
nenolod
parents:
368
diff
changeset
|
78 gchar *tta_fmts[] = { "tta", NULL }; |
a157306caf03
[svn] - finalize the plugin-side of the extension-assist ABI
nenolod
parents:
368
diff
changeset
|
79 |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
80 InputPlugin tta_ip = |
290 | 81 { |
1653 | 82 .description = "True Audio Plugin", |
83 .init = init, | |
84 .about = about, | |
85 .is_our_file = is_our_file, | |
86 .play_file = play_file, | |
87 .stop = stop, | |
88 .pause = tta_pause, | |
89 .seek = seek, | |
90 .cleanup = cleanup, | |
91 .get_song_info = get_song_info, | |
92 .file_info_box = file_info, | |
93 .get_song_tuple = get_song_tuple, | |
1979
839804c3b3a4
aud_vfs_extensions -> vfs_extensions, some vtable fixes
William Pitcock <nenolod@atheme.org>
parents:
1978
diff
changeset
|
94 .vfs_extensions = tta_fmts, |
1653 | 95 .mseek = mseek, |
290 | 96 }; |
97 | |
1087 | 98 InputPlugin *tta_iplist[] = { &tta_ip, NULL }; |
99 | |
1395
761e17b23e0c
added Discovery plugin type
Cristi Magherusan <majeru@atheme-project.org>
parents:
1366
diff
changeset
|
100 DECLARE_PLUGIN(tta, NULL, NULL, tta_iplist, NULL, NULL, NULL, NULL, NULL); |
290 | 101 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
102 size_t |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
103 file_size (char *filename) |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
104 { |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
105 VFSFile *f; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
106 size_t size = -1; |
290 | 107 |
1978 | 108 if ((f = aud_vfs_fopen (filename, "r"))) |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
109 { |
1978 | 110 aud_vfs_fseek (f, 0, SEEK_END); |
111 size = aud_vfs_ftell (f); | |
112 aud_vfs_fclose (f); | |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
113 } |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
114 return size; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
115 } |
851 | 116 |
290 | 117 static void |
118 tta_error (int error) | |
119 { | |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
120 char *message; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
121 static GtkWidget *errorbox; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
122 if (errorbox != NULL) return; |
290 | 123 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
124 switch (error) |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
125 { |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
126 case OPEN_ERROR: |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
127 message = _("Can't open file\n"); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
128 break; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
129 case FORMAT_ERROR: |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
130 message = _("Not supported file format\n"); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
131 break; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
132 case FILE_ERROR: |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
133 message = _("File is corrupted\n"); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
134 break; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
135 case READ_ERROR: |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
136 message = _("Can't read from file\n"); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
137 break; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
138 case MEMORY_ERROR: |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
139 message = _("Insufficient memory available\n"); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
140 break; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
141 case OUTPUT_ERROR: |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
142 message = _("Output plugin error\n"); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
143 break; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
144 default: |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
145 message = _("Unknown error\n"); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
146 break; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
147 } |
290 | 148 |
1677
f6f5603a0954
xmms_show_message() changed to audacious_info_dialog()
Matti Hamalainen <ccr@tnsp.org>
parents:
1676
diff
changeset
|
149 audacious_info_dialog (_("TTA Decoder Error"), message, |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
150 _("Ok"), FALSE, NULL, NULL); |
290 | 151 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
152 gtk_signal_connect(GTK_OBJECT(errorbox), "destroy", |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
153 G_CALLBACK(gtk_widget_destroyed), &errorbox); |
290 | 154 } |
155 | |
156 static gchar * | |
1440
90af998f55fa
tta: new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
157 get_song_title(Tuple *tuple) |
290 | 158 { |
2055 | 159 return aud_tuple_formatter_make_title_string(tuple, aud_get_gentitle_format()); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
160 } |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
161 |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
162 static void |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
163 get_song_info (char *filename, char **title, int *length) |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
164 { |
1440
90af998f55fa
tta: new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
165 Tuple *tuple; |
290 | 166 |
1165 | 167 *length = -1; |
168 *title = NULL; | |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
169 |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
170 if ((tuple = get_song_tuple(filename)) != NULL) { |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1961
diff
changeset
|
171 *length = aud_tuple_get_int(tuple, FIELD_LENGTH, NULL); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
172 *title = get_song_title(tuple); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
173 } |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
174 |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1961
diff
changeset
|
175 aud_tuple_free(tuple); |
290 | 176 } |
177 | |
178 static void * | |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
179 play_loop (InputPlayback *playback) |
290 | 180 { |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
181 int bufsize = PCM_BUFFER_LENGTH * info.BSIZE * info.NCH; |
290 | 182 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
183 //////////////////////////////////////// |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
184 // decode PCM_BUFFER_LENGTH samples |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
185 // into the current PCM buffer position |
290 | 186 |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
187 while (playback->playing) |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
188 { |
1190
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
189 while ((read_samples = get_samples ((unsigned char *)sample_buffer)) > 0) |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
190 { |
851 | 191 |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
192 while ((playback->output->buffer_free () < bufsize) |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
193 && seek_position == -1) |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
194 { |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
195 if (!playback->playing) |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
196 goto DONE; |
1676
aee4ebea943a
xmms_usleep() was removed, use g_usleep()
Matti Hamalainen <ccr@tnsp.org>
parents:
1653
diff
changeset
|
197 g_usleep (10000); |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
198 } |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
199 if (seek_position == -1) |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
200 { |
1998
8f3188746b64
chase last changeset in aud
William Pitcock <nenolod@atheme.org>
parents:
1987
diff
changeset
|
201 playback->pass_audio(playback, |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
202 ((info.BPS == 8) ? FMT_U8 : FMT_S16_LE), |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
203 info.NCH, |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
204 read_samples * info.NCH * info.BSIZE, |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
205 sample_buffer, |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
206 &playback->playing); |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
207 } |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
208 else |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
209 { |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
210 set_position (seek_position); |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
211 playback->output->flush (seek_position * SEEK_STEP); |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
212 seek_position = -1; |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
213 } |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
214 if(!playback->playing) |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
215 goto DONE; |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
216 } |
851 | 217 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
218 playback->output->buffer_free (); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
219 playback->output->buffer_free (); |
1270
d73eed18f3f4
make tta decode easy to be interrupted.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1237
diff
changeset
|
220 while (playback->output->buffer_playing()) { |
1676
aee4ebea943a
xmms_usleep() was removed, use g_usleep()
Matti Hamalainen <ccr@tnsp.org>
parents:
1653
diff
changeset
|
221 g_usleep(10000); |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
222 if(!playback->playing) |
1270
d73eed18f3f4
make tta decode easy to be interrupted.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1237
diff
changeset
|
223 goto DONE; |
d73eed18f3f4
make tta decode easy to be interrupted.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1237
diff
changeset
|
224 } |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
225 } |
290 | 226 |
851 | 227 DONE: |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
228 //////////////////////// |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
229 // destroy memory pools |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
230 player_stop (); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
231 |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
232 /////////////////////////////// |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
233 // close currently playing file |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
234 close_tta_file (&info); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
235 |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
236 return NULL; |
290 | 237 } |
238 | |
239 static void | |
240 init () | |
241 { | |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
242 memset (&info, 0, sizeof (tta_info)); |
290 | 243 } |
244 | |
245 static void | |
246 cleanup () | |
247 { | |
248 } | |
249 | |
250 static void | |
251 about () | |
252 { | |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
253 static GtkWidget *aboutbox; |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
254 gchar *about_text; |
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
255 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
256 if (aboutbox != NULL) return; |
290 | 257 |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
258 about_text = g_strjoin("", _("TTA input plugin "), PLUGIN_VERSION, |
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
259 _(" for BMP\n" |
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
260 "Copyright (c) 2004 True Audio Software\n"), PROJECT_URL, NULL); |
290 | 261 |
1677
f6f5603a0954
xmms_show_message() changed to audacious_info_dialog()
Matti Hamalainen <ccr@tnsp.org>
parents:
1676
diff
changeset
|
262 aboutbox = audacious_info_dialog(_("About True Audio Plugin"), |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
263 about_text, |
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
264 _("Ok"), FALSE, NULL, NULL); |
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
265 |
1325
a33da9237bed
Several "i18n" improvements.
Stany HENRY <StrassBoy@gmail.com>
parents:
1321
diff
changeset
|
266 gtk_signal_connect(GTK_OBJECT(aboutbox), "destroy", |
a33da9237bed
Several "i18n" improvements.
Stany HENRY <StrassBoy@gmail.com>
parents:
1321
diff
changeset
|
267 G_CALLBACK(gtk_widget_destroyed), &aboutbox); |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
268 g_free(about_text); |
290 | 269 } |
270 | |
271 static GtkWidget *window = NULL; | |
272 static GtkWidget *filename_entry, *title_entry, | |
273 *artist_entry, *album_entry, | |
274 *year_entry, *tracknum_entry, | |
275 *comment_entry, *genre_entry, | |
276 *info_frame; | |
277 | |
278 static void | |
279 file_info (char *filename) | |
280 { | |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
281 tta_info ttainfo; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
282 char *title; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
283 gchar *utf_filename = NULL; |
1296
2a6865d42dc4
more adaptation for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1270
diff
changeset
|
284 gchar *realfn = NULL; |
290 | 285 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
286 if (!window) { |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
287 GtkWidget *vbox, *hbox, *left_vbox, *table; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
288 GtkWidget *label, *filename_hbox, *button_ok; |
290 | 289 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
290 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
291 gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
292 gtk_signal_connect(GTK_OBJECT(window), "destroy", |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
293 G_CALLBACK(gtk_widget_destroyed), &window); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
294 gtk_container_set_border_width(GTK_CONTAINER(window), 10); |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
295 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
296 vbox = gtk_vbox_new(FALSE, 10); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
297 gtk_container_add(GTK_CONTAINER(window), vbox); |
290 | 298 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
299 filename_hbox = gtk_hbox_new(FALSE, 5); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
300 gtk_box_pack_start(GTK_BOX(vbox), filename_hbox, FALSE, TRUE, 0); |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
301 label = gtk_label_new(_("Filename:")); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
302 gtk_box_pack_start(GTK_BOX(filename_hbox), label, FALSE, TRUE, 0); |
290 | 303 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
304 filename_entry = gtk_entry_new_with_max_length(1024); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
305 gtk_editable_set_editable(GTK_EDITABLE(filename_entry), FALSE); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
306 gtk_box_pack_start(GTK_BOX(filename_hbox), filename_entry, TRUE, TRUE, 0); |
290 | 307 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
308 hbox = gtk_hbox_new(FALSE, 10); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
309 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
310 left_vbox = gtk_vbox_new(FALSE, 10); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
311 gtk_box_pack_start(GTK_BOX(hbox), left_vbox, FALSE, FALSE, 0); |
290 | 312 |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
313 info_frame = gtk_frame_new(_("ID3 Tag:")); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
314 gtk_box_pack_start(GTK_BOX(left_vbox), info_frame, FALSE, FALSE, 0); |
290 | 315 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
316 table = gtk_table_new(5, 5, FALSE); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
317 gtk_container_set_border_width(GTK_CONTAINER(table), 5); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
318 gtk_container_add(GTK_CONTAINER(info_frame), table); |
290 | 319 |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
320 label = gtk_label_new(_("Title:")); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
321 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
322 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 5, 5); |
290 | 323 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
324 title_entry = gtk_entry_new_with_max_length(1024); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
325 gtk_editable_set_editable(GTK_EDITABLE(title_entry), FALSE); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
326 gtk_table_attach(GTK_TABLE(table), title_entry, 1, 4, 0, 1, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
327 GTK_FILL | GTK_EXPAND | GTK_SHRINK, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
328 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); |
290 | 329 |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
330 label = gtk_label_new(_("Artist:")); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
331 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
332 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
333 GTK_FILL, GTK_FILL, 5, 5); |
290 | 334 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
335 artist_entry = gtk_entry_new_with_max_length(1024); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
336 gtk_editable_set_editable(GTK_EDITABLE(artist_entry), FALSE); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
337 gtk_table_attach(GTK_TABLE(table), artist_entry, 1, 4, 1, 2, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
338 GTK_FILL | GTK_EXPAND | GTK_SHRINK, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
339 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); |
290 | 340 |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
341 label = gtk_label_new(_("Album:")); |
290 | 342 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); |
343 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 2, 3, | |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
344 GTK_FILL, GTK_FILL, 5, 5); |
290 | 345 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
346 album_entry = gtk_entry_new_with_max_length(1024); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
347 gtk_editable_set_editable(GTK_EDITABLE(album_entry), FALSE); |
290 | 348 gtk_table_attach(GTK_TABLE(table), album_entry, 1, 4, 2, 3, |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
349 GTK_FILL | GTK_EXPAND | GTK_SHRINK, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
350 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); |
290 | 351 |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
352 label = gtk_label_new(_("Comment:")); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
353 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
354 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
355 GTK_FILL, GTK_FILL, 5, 5); |
290 | 356 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
357 comment_entry = gtk_entry_new_with_max_length(1024); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
358 gtk_editable_set_editable(GTK_EDITABLE(comment_entry), FALSE); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
359 gtk_table_attach(GTK_TABLE(table), comment_entry, 1, 4, 3, 4, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
360 GTK_FILL | GTK_EXPAND | GTK_SHRINK, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
361 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); |
290 | 362 |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
363 label = gtk_label_new(_("Year:")); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
364 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
365 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 4, 5, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
366 GTK_FILL, GTK_FILL, 5, 5); |
290 | 367 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
368 year_entry = gtk_entry_new_with_max_length(4); |
290 | 369 gtk_editable_set_editable(GTK_EDITABLE(year_entry), FALSE); |
370 gtk_widget_set_usize(year_entry, 40, -1); | |
371 gtk_table_attach(GTK_TABLE(table), year_entry, 1, 2, 4, 5, | |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
372 GTK_FILL | GTK_EXPAND | GTK_SHRINK, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
373 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); |
290 | 374 |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
375 label = gtk_label_new(_("Track number:")); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
376 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
377 gtk_table_attach(GTK_TABLE(table), label, 2, 3, 4, 5, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
378 GTK_FILL, GTK_FILL, 5, 5); |
290 | 379 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
380 tracknum_entry = gtk_entry_new_with_max_length(3); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
381 gtk_editable_set_editable(GTK_EDITABLE(tracknum_entry), FALSE); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
382 gtk_widget_set_usize(tracknum_entry, 40, -1); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
383 gtk_table_attach(GTK_TABLE(table), tracknum_entry, 3, 4, 4, 5, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
384 GTK_FILL | GTK_EXPAND | GTK_SHRINK, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
385 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); |
290 | 386 |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
387 label = gtk_label_new(_("Genre:")); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
388 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
389 gtk_table_attach(GTK_TABLE(table), label, 0, 1, 5, 6, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
390 GTK_FILL, GTK_FILL, 5, 5); |
290 | 391 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
392 genre_entry = gtk_entry_new_with_max_length(1024); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
393 gtk_editable_set_editable(GTK_EDITABLE(genre_entry), FALSE); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
394 gtk_widget_set_usize(genre_entry, 40, -1); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
395 gtk_table_attach(GTK_TABLE(table), genre_entry, 1, 4, 5, 6, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
396 GTK_FILL | GTK_EXPAND | GTK_SHRINK, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
397 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 5); |
290 | 398 |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
399 button_ok = gtk_button_new_with_label(_("Ok")); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
400 gtk_signal_connect_object(GTK_OBJECT(button_ok), "clicked", |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
401 G_CALLBACK(gtk_widget_destroy), G_OBJECT(window)); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
402 GTK_WIDGET_SET_FLAGS(button_ok, GTK_CAN_DEFAULT); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
403 gtk_box_pack_start(GTK_BOX(vbox), button_ok, TRUE, TRUE, 0); |
290 | 404 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
405 gtk_widget_show_all (window); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
406 } |
1296
2a6865d42dc4
more adaptation for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1270
diff
changeset
|
407 realfn = g_filename_from_uri(filename, NULL, NULL); |
2050
2ffc6a69fcd1
string API calls -> vtable
William Pitcock <nenolod@atheme.org>
parents:
1998
diff
changeset
|
408 utf_filename = aud_str_to_utf8(realfn ? realfn : filename); |
1296
2a6865d42dc4
more adaptation for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1270
diff
changeset
|
409 g_free(realfn); realfn = NULL; |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
410 title = g_strdup_printf(_("File Info - %s"), g_basename(utf_filename)); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
411 gtk_window_set_title(GTK_WINDOW(window), title); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
412 g_free(title); |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
413 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
414 gtk_entry_set_text(GTK_ENTRY(filename_entry), utf_filename); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
415 gtk_editable_set_position(GTK_EDITABLE(filename_entry), -1); |
290 | 416 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
417 title = g_strdup(g_basename(utf_filename)); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
418 gtk_entry_set_text(GTK_ENTRY(title_entry), title); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
419 |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
420 g_free(title); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
421 g_free(utf_filename); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
422 |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
423 if (open_tta_file (filename, &ttainfo, 0) >= 0) |
290 | 424 { |
1190
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
425 gtk_entry_set_text(GTK_ENTRY(title_entry), (gchar *)ttainfo.ID3.title); |
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
426 gtk_entry_set_text(GTK_ENTRY(artist_entry), (gchar *)ttainfo.ID3.artist); |
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
427 gtk_entry_set_text(GTK_ENTRY(album_entry), (gchar *)ttainfo.ID3.album); |
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
428 gtk_entry_set_text(GTK_ENTRY(year_entry), (gchar *)ttainfo.ID3.year); |
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
429 gtk_entry_set_text(GTK_ENTRY(tracknum_entry), (gchar *)ttainfo.ID3.track); |
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
430 gtk_entry_set_text(GTK_ENTRY(comment_entry), (gchar *)ttainfo.ID3.comment); |
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
431 gtk_entry_set_text(GTK_ENTRY(genre_entry), (gchar *)ttainfo.ID3.genre); |
290 | 432 } |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
433 close_tta_file (&ttainfo); |
290 | 434 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
435 gtk_widget_set_sensitive(info_frame, TRUE); |
290 | 436 } |
437 | |
438 static int | |
439 is_our_file (char *filename) | |
440 { | |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
441 gchar *ext = strrchr(filename, '.'); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
442 |
1152
949457464b28
[svn] - fix for crash when file extension is not available.
yaz
parents:
1087
diff
changeset
|
443 if (ext && !strncasecmp(ext, ".tta", 4)) |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
444 return TRUE; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
445 |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
446 return FALSE; |
290 | 447 } |
448 | |
449 static void | |
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
528
diff
changeset
|
450 play_file (InputPlayback *playback) |
290 | 451 { |
1237
0d5b0f861bf0
- quick fix for link breakage to libaudid3tag.so when --prefix is specified.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1190
diff
changeset
|
452 gchar *filename = playback->filename; |
1296
2a6865d42dc4
more adaptation for file:// scheme.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1270
diff
changeset
|
453 char *title = NULL; |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
454 int datasize, origsize, bitrate; |
1440
90af998f55fa
tta: new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
455 Tuple *tuple = NULL; |
290 | 456 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
457 //////////////////////////////////////// |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
458 // open TTA file |
1237
0d5b0f861bf0
- quick fix for link breakage to libaudid3tag.so when --prefix is specified.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1190
diff
changeset
|
459 if (open_tta_file (filename, &info, 0) > 0) |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
460 { |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
461 tta_error (info.STATE); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
462 close_tta_file (&info); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
463 return; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
464 } |
290 | 465 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
466 //////////////////////////////////////// |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
467 // initialize TTA player |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
468 if (player_init (&info) < 0) |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
469 { |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
470 tta_error (info.STATE); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
471 close_tta_file (&info); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
472 return; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
473 } |
290 | 474 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
475 if (playback->output->open_audio ((info.BPS == 8) ? FMT_U8 : FMT_S16_LE, |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
476 info.SAMPLERATE, info.NCH) == 0) |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
477 { |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
478 tta_error (OUTPUT_ERROR); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
479 close_tta_file (&info); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
480 return; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
481 } |
290 | 482 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
483 tuple = get_song_tuple(filename); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
484 title = get_song_title(tuple); |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1961
diff
changeset
|
485 aud_tuple_free(tuple); |
290 | 486 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
487 datasize = file_size(filename) - info.DATAPOS; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
488 origsize = info.DATALENGTH * info.BSIZE * info.NCH; |
290 | 489 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
490 bitrate = (int) ((float) datasize / origsize * |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
491 (info.SAMPLERATE * info.NCH * info.BPS)); |
290 | 492 |
1987 | 493 playback->set_params(playback, title, 1000 * info.LENGTH, bitrate, info.SAMPLERATE, info.NCH); |
1321
f0b81aeed25f
Thank you for your help, Giacomo. ;-)
Stany HENRY <StrassBoy@gmail.com>
parents:
1296
diff
changeset
|
494 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
495 if (title) |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
496 g_free (title); |
290 | 497 |
1165 | 498 playback->playing = 1; |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
499 seek_position = -1; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
500 read_samples = -1; |
290 | 501 |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
502 decode_thread = g_thread_self(); |
1447
195b5657303e
updated input plugins to use set_pb_ready to signal to the core that they're ready for playback
Giacomo Lozito <james@develia.org>
parents:
1440
diff
changeset
|
503 playback->set_pb_ready(playback); |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
504 play_loop(playback); |
290 | 505 } |
506 | |
507 static void | |
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
528
diff
changeset
|
508 tta_pause (InputPlayback *playback, short paused) |
290 | 509 { |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
510 playback->output->pause (paused); |
290 | 511 } |
851 | 512 |
290 | 513 static void |
561
914c96de3244
[svn] Convert plugins to use InputPlayback.output instead of InputPlugin.output
iabervon
parents:
528
diff
changeset
|
514 stop (InputPlayback *playback) |
290 | 515 { |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
516 if (playback->playing) |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
517 { |
1165 | 518 playback->playing = 0; |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
519 g_thread_join(decode_thread); |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
520 decode_thread = NULL; |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
521 playback->output->close_audio (); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
522 close_tta_file (&info); |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
523 read_samples = -1; |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
524 } |
290 | 525 } |
526 | |
527 static void | |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
528 mseek (InputPlayback *data, gulong millisec) |
290 | 529 { |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
530 if (data->playing) |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
531 { |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
532 seek_position = (int)(millisec / SEEK_STEP); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
533 |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
534 while (seek_position != -1) |
1676
aee4ebea943a
xmms_usleep() was removed, use g_usleep()
Matti Hamalainen <ccr@tnsp.org>
parents:
1653
diff
changeset
|
535 g_usleep (10000); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
536 } |
290 | 537 } |
538 | |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
539 static void |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
540 seek (InputPlayback *data, int sec) |
290 | 541 { |
1366
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
542 gulong millisec = 1000 * sec; |
4c43c38bd033
- adapt tta for new threading model.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1325
diff
changeset
|
543 mseek(data, millisec); |
290 | 544 } |
545 | |
1440
90af998f55fa
tta: new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
546 static Tuple * |
290 | 547 get_song_tuple(char *filename) |
548 { | |
1440
90af998f55fa
tta: new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
549 Tuple *tuple = NULL; |
290 | 550 tta_info *ttainfo; |
551 VFSFile *file; | |
552 | |
553 ttainfo = g_malloc0(sizeof(tta_info)); | |
554 | |
1978 | 555 if((file = aud_vfs_fopen(filename, "rb")) != NULL) { |
290 | 556 if(open_tta_file(filename, ttainfo, 0) >= 0) { |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1961
diff
changeset
|
557 tuple = aud_tuple_new_from_filename(filename); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
558 |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1961
diff
changeset
|
559 aud_tuple_associate_string(tuple, FIELD_CODEC, NULL, "True Audio (TTA)"); |
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1961
diff
changeset
|
560 aud_tuple_associate_string(tuple, FIELD_QUALITY, NULL, "lossless"); |
290 | 561 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
562 if (ttainfo->ID3.id3has) { |
1440
90af998f55fa
tta: new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
563 if (ttainfo->ID3.artist) |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1961
diff
changeset
|
564 aud_tuple_associate_string(tuple, FIELD_ARTIST, NULL, (gchar *) ttainfo->ID3.artist); |
1166 | 565 |
1440
90af998f55fa
tta: new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
566 if (ttainfo->ID3.album) |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1961
diff
changeset
|
567 aud_tuple_associate_string(tuple, FIELD_ALBUM, NULL, (gchar *) ttainfo->ID3.album); |
1166 | 568 |
1440
90af998f55fa
tta: new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
569 if (ttainfo->ID3.title) |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1961
diff
changeset
|
570 aud_tuple_associate_string(tuple, FIELD_TITLE, NULL, (gchar *) ttainfo->ID3.title); |
1166 | 571 |
1440
90af998f55fa
tta: new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
572 if (ttainfo->ID3.year) |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1961
diff
changeset
|
573 aud_tuple_associate_int(tuple, FIELD_YEAR, NULL, atoi((char *)ttainfo->ID3.year)); |
1166 | 574 |
1440
90af998f55fa
tta: new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
575 if(ttainfo->ID3.track) |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1961
diff
changeset
|
576 aud_tuple_associate_int(tuple, FIELD_TRACK_NUMBER, NULL, atoi((char *)ttainfo->ID3.track)); |
1166 | 577 |
1440
90af998f55fa
tta: new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
578 if(ttainfo->ID3.genre) |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1961
diff
changeset
|
579 aud_tuple_associate_string(tuple, FIELD_GENRE, NULL, (gchar *) ttainfo->ID3.genre); |
1166 | 580 |
1440
90af998f55fa
tta: new tuple API
William Pitcock <nenolod@atheme-project.org>
parents:
1395
diff
changeset
|
581 if(ttainfo->ID3.comment) |
1976
5fa26178eaef
s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents:
1961
diff
changeset
|
582 aud_tuple_associate_string(tuple, FIELD_COMMENT, NULL, (gchar *) ttainfo->ID3.comment); |
2165 | 583 if(ttainfo->LENGTH) |
584 aud_tuple_associate_int(tuple, FIELD_LENGTH, NULL, 1000 * ttainfo->LENGTH); | |
585 | |
290 | 586 } |
587 close_tta_file (ttainfo); | |
588 } | |
1978 | 589 aud_vfs_fclose(file); |
290 | 590 } |
2265
349e659d34ca
Fixes memory leak in libtta's get_song_tuple() function. (Bugzilla #16)
Jussi Judin <jjudin+audacious@iki.fi>
parents:
2213
diff
changeset
|
591 g_free(ttainfo); |
290 | 592 return tuple; |
593 } | |
594 | |
1507
3f4a74858aa0
- make use of tuple_formatter_make_title_string().
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1473
diff
changeset
|
595 #if 0 |
290 | 596 static gchar * |
597 extname(const char *filename) | |
598 { | |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
599 gchar *ext = strrchr(filename, '.'); |
290 | 600 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
601 if (ext != NULL) |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
602 ++ext; |
290 | 603 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
604 return ext; |
290 | 605 } |
1507
3f4a74858aa0
- make use of tuple_formatter_make_title_string().
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1473
diff
changeset
|
606 #endif |
290 | 607 |
608 /* return length in letters */ | |
609 size_t tta_ucs4len(id3_ucs4_t *ucs) | |
610 { | |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
611 id3_ucs4_t *ptr = ucs; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
612 size_t len = 0; |
290 | 613 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
614 while(*ptr++ != 0) |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
615 len++; |
290 | 616 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
617 return len; |
290 | 618 } |
619 | |
620 /* duplicate id3_ucs4_t string. new string will be terminated with 0. */ | |
621 id3_ucs4_t *tta_ucs4dup(id3_ucs4_t *org) | |
622 { | |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
623 id3_ucs4_t *new = NULL; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
624 size_t len = tta_ucs4len(org); |
290 | 625 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
626 new = g_malloc0((len + 1) * sizeof(id3_ucs4_t)); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
627 memcpy(new, org, len * sizeof(id3_ucs4_t)); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
628 *(new + len) = 0; //terminate |
290 | 629 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
630 return new; |
290 | 631 } |
632 | |
633 id3_ucs4_t *tta_parse_genre(const id3_ucs4_t *string) | |
634 { | |
635 id3_ucs4_t *ret = NULL; | |
636 id3_ucs4_t *tmp = NULL; | |
637 id3_ucs4_t *genre = NULL; | |
638 id3_ucs4_t *ptr, *end, *tail, *tp; | |
639 size_t ret_len = 0; //num of ucs4 char! | |
640 size_t tmp_len = 0; | |
641 gboolean is_num = TRUE; | |
642 | |
643 tail = (id3_ucs4_t *)string + tta_ucs4len((id3_ucs4_t *)string); | |
644 | |
645 ret = g_malloc0(1024); | |
646 | |
647 for(ptr = (id3_ucs4_t *)string; *ptr != 0 && ptr <= tail; ptr++) { | |
648 if(*ptr == '(') { | |
649 if(*(++ptr) == '(') { // escaped text like: ((something) | |
650 for(end = ptr; *end != ')' && *end != 0;) { // copy "(something)" | |
651 end++; | |
652 } | |
653 end++; //include trailing ')' | |
654 memcpy(ret, ptr, BYTES(end - ptr)); | |
655 ret_len += (end - ptr); | |
656 *(ret + ret_len) = 0; //terminate | |
657 ptr = end + 1; | |
658 } | |
659 else { | |
660 // reference to an id3v1 genre code | |
661 for(end = ptr; *end != ')' && *end != 0;) { | |
662 end++; | |
663 } | |
664 | |
665 tmp = g_malloc0(BYTES(end - ptr + 1)); | |
666 memcpy(tmp, ptr, BYTES(end - ptr)); | |
667 *(tmp + (end - ptr)) = 0; //terminate | |
668 ptr += end - ptr; | |
669 | |
670 genre = (id3_ucs4_t *)id3_genre_name((const id3_ucs4_t *)tmp); | |
671 | |
672 g_free(tmp); | |
673 tmp = NULL; | |
674 | |
675 tmp_len = tta_ucs4len(genre); | |
676 | |
677 memcpy(ret + BYTES(ret_len), genre, BYTES(tmp_len)); | |
678 | |
679 ret_len += tmp_len; | |
680 *(ret + ret_len) = 0; //terminate | |
681 } | |
682 } | |
683 else { | |
684 for(end = ptr; *end != '(' && *end != 0; ) { | |
685 end++; | |
686 } | |
687 // scan string to determine whether a genre code number or not | |
688 tp = ptr; | |
689 is_num = TRUE; | |
690 while(tp < end) { | |
691 if(*tp < '0' || *tp > '9') { // anything else than number appears. | |
692 is_num = FALSE; | |
693 break; | |
694 } | |
695 tp++; | |
696 } | |
697 if(is_num) { | |
2213
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2165
diff
changeset
|
698 AUDDBG("is_num!\n"); |
290 | 699 tmp = g_malloc0(BYTES(end - ptr + 1)); |
700 memcpy(tmp, ptr, BYTES(end - ptr)); | |
701 *(tmp + (end - ptr)) = 0; //terminate | |
702 ptr += end - ptr; | |
703 | |
704 genre = (id3_ucs4_t *)id3_genre_name((const id3_ucs4_t *)tmp); | |
2213
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2165
diff
changeset
|
705 AUDDBG("genre length = %d\n", tta_ucs4len(genre)); |
290 | 706 g_free(tmp); |
707 tmp = NULL; | |
708 | |
709 tmp_len = tta_ucs4len(genre); | |
710 | |
711 memcpy(ret + BYTES(ret_len), genre, BYTES(tmp_len)); | |
712 | |
713 ret_len += tmp_len; | |
714 *(ret + ret_len) = 0; //terminate | |
715 } | |
716 else { // plain text | |
2213
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2165
diff
changeset
|
717 AUDDBG("plain!\n"); |
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2165
diff
changeset
|
718 AUDDBG("ret_len = %d\n", ret_len); |
290 | 719 memcpy(ret + BYTES(ret_len), ptr, BYTES(end - ptr)); |
720 ret_len = ret_len + (end - ptr); | |
721 *(ret + ret_len) = 0; //terminate | |
722 ptr += (end - ptr); | |
723 } | |
724 } | |
725 } | |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
726 |
290 | 727 return ret; |
728 } | |
729 | |
730 gchar *tta_input_id3_get_string(struct id3_tag * tag, char *frame_name) | |
731 { | |
732 gchar *rtn; | |
733 gchar *rtn2; | |
734 const id3_ucs4_t *string_const; | |
735 id3_ucs4_t *string; | |
736 id3_ucs4_t *ucsptr; | |
737 struct id3_frame *frame; | |
738 union id3_field *field; | |
739 gboolean flagutf = FALSE; | |
740 | |
741 frame = id3_tag_findframe(tag, frame_name, 0); | |
742 if (!frame) | |
743 return NULL; | |
744 | |
1190
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
745 if (!strcmp(frame_name, ID3_FRAME_COMMENT)) |
290 | 746 field = id3_frame_field(frame, 3); |
747 else | |
748 field = id3_frame_field(frame, 1); | |
749 | |
750 if (!field) | |
751 return NULL; | |
752 | |
1190
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
753 if (!strcmp(frame_name, ID3_FRAME_COMMENT)) |
290 | 754 string_const = id3_field_getfullstring(field); |
755 else | |
756 string_const = id3_field_getstrings(field, 0); | |
757 | |
758 if (!string_const) | |
759 return NULL; | |
760 | |
761 string = tta_ucs4dup((id3_ucs4_t *)string_const); | |
762 | |
1190
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
763 if (!strcmp(frame_name, ID3_FRAME_GENRE)) { |
290 | 764 id3_ucs4_t *string2 = NULL; |
765 string2 = tta_parse_genre(string); | |
766 g_free((void *)string); | |
767 string = string2; | |
768 } | |
769 | |
770 ucsptr = (id3_ucs4_t *)string; | |
771 while (*ucsptr) { | |
772 if (*ucsptr > 0x000000ffL) { | |
773 flagutf = TRUE; | |
774 break; | |
775 } | |
776 ucsptr++; | |
777 } | |
778 | |
779 if (flagutf) { | |
780 #ifdef DEBUG | |
781 g_message("aud-tta: flagutf!\n"); | |
782 #endif | |
1190
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
783 rtn = (gchar *)id3_ucs4_utf8duplicate(string); |
290 | 784 } |
785 else { | |
1190
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
786 rtn = (gchar *)id3_ucs4_latin1duplicate(string); |
2050
2ffc6a69fcd1
string API calls -> vtable
William Pitcock <nenolod@atheme.org>
parents:
1998
diff
changeset
|
787 rtn2 = aud_str_to_utf8(rtn); |
290 | 788 free(rtn); |
789 rtn = rtn2; | |
790 } | |
791 g_free(string); | |
792 string = NULL; | |
2213
137187e7a379
make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
2165
diff
changeset
|
793 AUDDBG("string = %s\n", rtn); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
794 |
290 | 795 return rtn; |
796 } | |
797 | |
798 int get_id3_tags (const char *filename, tta_info *ttainfo) { | |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
799 int id3v2_size = 0; |
290 | 800 gchar *str = NULL; |
801 | |
802 struct id3_file *id3file = NULL; | |
803 struct id3_tag *tag = NULL; | |
804 | |
2165 | 805 id3file = id3_file_open (filename, ID3_FILE_MODE_READONLY); |
290 | 806 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
807 if (id3file) { |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
808 tag = id3_file_tag (id3file); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
809 |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
810 if (tag) { |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
811 ttainfo->ID3.id3has = 1; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
812 id3v2_size = tag->paddedsize; |
290 | 813 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
814 str = tta_input_id3_get_string (tag, ID3_FRAME_ARTIST); |
1190
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
815 if(str) strncpy((char *)ttainfo->ID3.artist, str, MAX_LINE); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
816 free(str); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
817 str = NULL; |
290 | 818 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
819 str = tta_input_id3_get_string (tag, ID3_FRAME_ALBUM); |
1190
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
820 if(str) strncpy((char *)ttainfo->ID3.album, str, MAX_LINE); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
821 free(str); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
822 str = NULL; |
290 | 823 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
824 str = tta_input_id3_get_string (tag, ID3_FRAME_TITLE); |
1190
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
825 if(str) strncpy((char *)ttainfo->ID3.title, str, MAX_LINE); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
826 free(str); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
827 str = NULL; |
290 | 828 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
829 str = tta_input_id3_get_string (tag, ID3_FRAME_YEAR); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
830 if(!str) str = tta_input_id3_get_string (tag, "TYER"); |
1190
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
831 if(str) strncpy((char *)ttainfo->ID3.year, str, MAX_YEAR); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
832 free(str); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
833 str = NULL; |
290 | 834 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
835 str = tta_input_id3_get_string (tag, ID3_FRAME_TRACK); |
1190
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
836 if(str) strncpy((char *)ttainfo->ID3.track, str, MAX_TRACK); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
837 free(str); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
838 str = NULL; |
290 | 839 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
840 str = tta_input_id3_get_string (tag, ID3_FRAME_GENRE); |
1190
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
841 if(str) strncpy((char *)ttainfo->ID3.genre, str, MAX_GENRE); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
842 free(str); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
843 str = NULL; |
290 | 844 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
845 str = tta_input_id3_get_string (tag, ID3_FRAME_COMMENT); |
1190
ed2d7787779e
more warning elimination.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents:
1166
diff
changeset
|
846 if(str) strncpy((char *)ttainfo->ID3.comment, str, MAX_LINE); |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
847 free(str); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
848 str = NULL; |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
849 } |
290 | 850 |
1012
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
851 id3_file_close(id3file); |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
852 } |
d0d99b22e393
[svn] import major update by Aleksander Djuric (the original author).
yaz
parents:
912
diff
changeset
|
853 |
290 | 854 return id3v2_size; // not used |
855 } |