annotate src/madplug/plugin.c @ 2284:d19b53359b24

cleaned up the sndfile wav plugin, currently limiting it ONLY TO WAV PLAYBACK. if somebody is more experienced with it and wants to restore the other formats, go ahead (maybe change the name of the plugin too?).
author mf0102 <0102@gmx.at>
date Wed, 09 Jan 2008 15:41:22 +0100
parents d25cd7e7eddb
children 1457b35713d9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
1 /*
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
2 * mad plugin for audacious
2206
7c7e6f5c494e added myself to authors
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2205
diff changeset
3 * Copyright (C) 2005-2007 William Pitcock, Yoshiki Yazawa, Eugene Zagidullin
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
4 *
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
5 * Portions derived from xmms-mad:
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
6 * Copyright (C) 2001-2002 Sam Clegg - See COPYING
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
7 *
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
10 * the Free Software Foundation; under version 2 of the License.
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
11 *
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful,
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
15 * GNU General Public License for more details.
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
16 *
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
17 * You should have received a copy of the GNU General Public License
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
18 * along with this program; if not, write to the Free Software
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
20 */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
21
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2207
diff changeset
22 /* #define AUD_DEBUG 1 */
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2207
diff changeset
23
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
24 #include "config.h"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
25 #include "plugin.h"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
26 #include "input.h"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
27
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
28 #include <math.h>
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
29
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
30 #include <gtk/gtk.h>
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
31 #include <audacious/util.h>
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
32 #include <audacious/configdb.h>
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
33 #include <stdarg.h>
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
34 #include <fcntl.h>
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
35 #include <audacious/vfs.h>
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
36 #include <sys/stat.h>
922
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents: 916
diff changeset
37 #include "SFMT.h"
2202
f76e846d53d9 updating TLEN frame returned
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2201
diff changeset
38 #include "tuple.h"
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
39
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
40 /*
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
41 * Global variables
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
42 */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
43 struct audmad_config_t audmad_config; /**< global configuration */
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
44 GMutex *mad_mutex;
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
45 GMutex *pb_mutex;
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
46 GCond *mad_cond;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
47
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
48 /*
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
49 * static variables
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
50 */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
51 static GThread *decode_thread; /**< the single decoder thread */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
52 static struct mad_info_t info; /**< info for current track */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
53
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
54 #ifndef NOGUI
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
55 static GtkWidget *error_dialog = 0;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
56 #endif
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
57
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
58 extern gboolean scan_file(struct mad_info_t *info, gboolean fast);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
59
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
60 static gint mp3_bitrate_table[5][16] = {
1361
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
61 { 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, -1 }, /* MPEG1 L1 */
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
62 { 0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, -1 }, /* MPEG1 L2 */
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
63 { 0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1 }, /* MPEG1 L3 */
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
64 { 0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, -1 }, /* MPEG2(.5) L1 */
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
65 { 0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, -1 } /* MPEG2(.5) L2,L3 */
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
66 };
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
67
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
68 static gint mp3_samplerate_table[4][4] = {
1361
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
69 { 11025, 12000, 8000, -1 }, /* MPEG2.5 */
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
70 { -1, -1, -1, -1 }, /* Reserved */
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
71 { 22050, 24000, 16000, -1 }, /* MPEG2 */
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
72 { 44100, 48000, 32000, -1 } /* MPEG1 */
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
73 };
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
74
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
75 /*
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
76 * Function extname (filename)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
77 *
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
78 * Return pointer within filename to its extenstion, or NULL if
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
79 * filename has no extension.
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
80 *
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
81 */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
82 static gchar *extname(const char *filename)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
83 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
84 gchar *ext = strrchr(filename, '.');
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
85
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
86 if (ext != NULL)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
87 ++ext;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
88
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
89 return ext;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
90 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
91
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
92
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
93 void audmad_config_compute(struct audmad_config_t *config)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
94 {
1302
1d3b02d1842b Guess... Yes, "i18n" stuff.
Stany HENRY <StrassBoy@gmail.com>
parents: 1277
diff changeset
95 /* set some config parameters by parsing text fields
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
96 (RG default gain, etc..)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
97 */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
98 const gchar *text;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
99 gdouble x;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
100
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
101 text = config->pregain_db;
653
638b290641f3 [svn] - madplug: check that text is not null before using g_strtod
giacomo
parents: 651
diff changeset
102 if ( text != NULL )
638b290641f3 [svn] - madplug: check that text is not null before using g_strtod
giacomo
parents: 651
diff changeset
103 x = g_strtod(text, NULL);
638b290641f3 [svn] - madplug: check that text is not null before using g_strtod
giacomo
parents: 651
diff changeset
104 else
638b290641f3 [svn] - madplug: check that text is not null before using g_strtod
giacomo
parents: 651
diff changeset
105 x = 0;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
106 config->pregain_scale = (x != 0) ? pow(10.0, x / 20) : 1;
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
107 AUDDBG("pregain=[%s] -> %g -> %g\n", text, x, config->pregain_scale);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
108 text = config->replaygain.default_db;
653
638b290641f3 [svn] - madplug: check that text is not null before using g_strtod
giacomo
parents: 651
diff changeset
109 if ( text != NULL )
638b290641f3 [svn] - madplug: check that text is not null before using g_strtod
giacomo
parents: 651
diff changeset
110 x = g_strtod(text, NULL);
638b290641f3 [svn] - madplug: check that text is not null before using g_strtod
giacomo
parents: 651
diff changeset
111 else
638b290641f3 [svn] - madplug: check that text is not null before using g_strtod
giacomo
parents: 651
diff changeset
112 x = 0;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
113 config->replaygain.default_scale = (x != 0) ? pow(10.0, x / 20) : 1;
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
114 AUDDBG("RG.default=[%s] -> %g -> %g\n", text, x,
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
115 config->replaygain.default_scale);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
116 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
117
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
118 static void audmad_init()
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
119 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
120 ConfigDb *db = NULL;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
121
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
122 audmad_config.fast_play_time_calc = TRUE;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
123 audmad_config.use_xing = TRUE;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
124 audmad_config.dither = TRUE;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
125 audmad_config.sjis = FALSE;
651
b9167008fc3f [svn] - strings in audmad_config should be freed before update. thus constant initializer has been replaced with g_strdup().
yaz
parents: 650
diff changeset
126 audmad_config.hard_limit = FALSE;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
127 audmad_config.replaygain.enable = TRUE;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
128 audmad_config.replaygain.track_mode = FALSE;
651
b9167008fc3f [svn] - strings in audmad_config should be freed before update. thus constant initializer has been replaced with g_strdup().
yaz
parents: 650
diff changeset
129 audmad_config.title_override = FALSE;
676
1733b12ef974 [svn] - show dynamic bitrate for vbr is off by default. now it is configurable from preferences.
yaz
parents: 674
diff changeset
130 audmad_config.show_avg_vbr_bitrate = TRUE;
916
a8494c2a87eb [svn] revise reopen output code for #880. time count would be reset if output was closed. so I took two measures for it.
yaz
parents: 897
diff changeset
131 audmad_config.force_reopen_audio = FALSE;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
132
2124
b8da6a0b0da2 s/bmp_cfg_/aud_cfg_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 2050
diff changeset
133 db = aud_cfg_db_open();
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
134 if (db) {
2124
b8da6a0b0da2 s/bmp_cfg_/aud_cfg_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 2050
diff changeset
135 aud_cfg_db_get_bool(db, "MAD", "fast_play_time_calc",
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
136 &audmad_config.fast_play_time_calc);
2124
b8da6a0b0da2 s/bmp_cfg_/aud_cfg_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 2050
diff changeset
137 aud_cfg_db_get_bool(db, "MAD", "use_xing",
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
138 &audmad_config.use_xing);
2124
b8da6a0b0da2 s/bmp_cfg_/aud_cfg_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 2050
diff changeset
139 aud_cfg_db_get_bool(db, "MAD", "dither", &audmad_config.dither);
b8da6a0b0da2 s/bmp_cfg_/aud_cfg_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 2050
diff changeset
140 aud_cfg_db_get_bool(db, "MAD", "sjis", &audmad_config.sjis);
b8da6a0b0da2 s/bmp_cfg_/aud_cfg_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 2050
diff changeset
141 aud_cfg_db_get_bool(db, "MAD", "hard_limit",
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
142 &audmad_config.hard_limit);
2124
b8da6a0b0da2 s/bmp_cfg_/aud_cfg_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 2050
diff changeset
143 aud_cfg_db_get_string(db, "MAD", "pregain_db",
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
144 &audmad_config.pregain_db);
2124
b8da6a0b0da2 s/bmp_cfg_/aud_cfg_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 2050
diff changeset
145 aud_cfg_db_get_bool(db, "MAD", "RG.enable",
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
146 &audmad_config.replaygain.enable);
2124
b8da6a0b0da2 s/bmp_cfg_/aud_cfg_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 2050
diff changeset
147 aud_cfg_db_get_bool(db, "MAD", "RG.track_mode",
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
148 &audmad_config.replaygain.track_mode);
2124
b8da6a0b0da2 s/bmp_cfg_/aud_cfg_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 2050
diff changeset
149 aud_cfg_db_get_string(db, "MAD", "RG.default_db",
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
150 &audmad_config.replaygain.default_db);
2124
b8da6a0b0da2 s/bmp_cfg_/aud_cfg_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 2050
diff changeset
151 aud_cfg_db_get_bool(db, "MAD", "title_override",
618
a7a28782c1b0 [svn] - revise input_id3_get_string() to take encoding of field into account.
yaz
parents: 613
diff changeset
152 &audmad_config.title_override);
2124
b8da6a0b0da2 s/bmp_cfg_/aud_cfg_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 2050
diff changeset
153 aud_cfg_db_get_string(db, "MAD", "id3_format",
618
a7a28782c1b0 [svn] - revise input_id3_get_string() to take encoding of field into account.
yaz
parents: 613
diff changeset
154 &audmad_config.id3_format);
2124
b8da6a0b0da2 s/bmp_cfg_/aud_cfg_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 2050
diff changeset
155 aud_cfg_db_get_bool(db, "MAD", "show_avg_vbr_bitrate",
676
1733b12ef974 [svn] - show dynamic bitrate for vbr is off by default. now it is configurable from preferences.
yaz
parents: 674
diff changeset
156 &audmad_config.show_avg_vbr_bitrate);
2124
b8da6a0b0da2 s/bmp_cfg_/aud_cfg_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 2050
diff changeset
157 aud_cfg_db_get_bool(db, "MAD", "force_reopen_audio",
916
a8494c2a87eb [svn] revise reopen output code for #880. time count would be reset if output was closed. so I took two measures for it.
yaz
parents: 897
diff changeset
158 &audmad_config.force_reopen_audio);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
159
2124
b8da6a0b0da2 s/bmp_cfg_/aud_cfg_/g
Matti Hamalainen <ccr@tnsp.org>
parents: 2050
diff changeset
160 aud_cfg_db_close(db);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
161 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
162
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
163 mad_mutex = g_mutex_new();
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
164 pb_mutex = g_mutex_new();
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
165 mad_cond = g_cond_new();
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
166 audmad_config_compute(&audmad_config);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
167
651
b9167008fc3f [svn] - strings in audmad_config should be freed before update. thus constant initializer has been replaced with g_strdup().
yaz
parents: 650
diff changeset
168 if (!audmad_config.pregain_db)
b9167008fc3f [svn] - strings in audmad_config should be freed before update. thus constant initializer has been replaced with g_strdup().
yaz
parents: 650
diff changeset
169 audmad_config.pregain_db = g_strdup("+0.00");
b9167008fc3f [svn] - strings in audmad_config should be freed before update. thus constant initializer has been replaced with g_strdup().
yaz
parents: 650
diff changeset
170
b9167008fc3f [svn] - strings in audmad_config should be freed before update. thus constant initializer has been replaced with g_strdup().
yaz
parents: 650
diff changeset
171 if (!audmad_config.replaygain.default_db)
b9167008fc3f [svn] - strings in audmad_config should be freed before update. thus constant initializer has been replaced with g_strdup().
yaz
parents: 650
diff changeset
172 audmad_config.replaygain.default_db = g_strdup("-9.00");
b9167008fc3f [svn] - strings in audmad_config should be freed before update. thus constant initializer has been replaced with g_strdup().
yaz
parents: 650
diff changeset
173
b9167008fc3f [svn] - strings in audmad_config should be freed before update. thus constant initializer has been replaced with g_strdup().
yaz
parents: 650
diff changeset
174 if (!audmad_config.id3_format)
650
8b9ef7a32e47 [svn] - make sure audmad_config.id3_format is not NULL. closes #795.
nenolod
parents: 646
diff changeset
175 audmad_config.id3_format = g_strdup("");
922
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents: 916
diff changeset
176
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents: 916
diff changeset
177 init_gen_rand(4357);
7e14701aef54 [svn] - replace random number generator in dithering code with SIMD-oriented Fast Mersenne Twister (SFMT). it reduces CPU load on SSE2 or AltiVec capable platform.
yaz
parents: 916
diff changeset
178
1995
47a7b26717d4 wow, only one plugin uses aud_mime API. that sucks! :D
William Pitcock <nenolod@atheme.org>
parents: 1979
diff changeset
179 aud_mime_set_plugin("audio/mpeg", mad_plugin);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
180 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
181
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
182 static void audmad_cleanup()
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
183 {
802
7ac48f3855b1 [svn] - add cleanup code.
yaz
parents: 801
diff changeset
184 g_free(audmad_config.pregain_db);
7ac48f3855b1 [svn] - add cleanup code.
yaz
parents: 801
diff changeset
185 g_free(audmad_config.replaygain.default_db);
7ac48f3855b1 [svn] - add cleanup code.
yaz
parents: 801
diff changeset
186 g_free(audmad_config.id3_format);
7ac48f3855b1 [svn] - add cleanup code.
yaz
parents: 801
diff changeset
187
1361
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
188 audmad_config.pregain_db = NULL;
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
189 audmad_config.replaygain.default_db = NULL;
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
190 audmad_config.id3_format = NULL;
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
191
802
7ac48f3855b1 [svn] - add cleanup code.
yaz
parents: 801
diff changeset
192 g_cond_free(mad_cond);
7ac48f3855b1 [svn] - add cleanup code.
yaz
parents: 801
diff changeset
193 g_mutex_free(mad_mutex);
7ac48f3855b1 [svn] - add cleanup code.
yaz
parents: 801
diff changeset
194 g_mutex_free(pb_mutex);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
195 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
196
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
197 static gboolean mp3_head_check(guint32 head, gint *frameSize)
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
198 {
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
199 gint version, layer, bitIndex, bitRate, sampleIndex, sampleRate, padding;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
200
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
201 /* http://www.mp3-tech.org/programmer/frame_header.html
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
202 * Bits 21-31 must be set (frame sync)
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
203 */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
204 if ((head & 0xffe00000) != 0xffe00000)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
205 return FALSE;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
206
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
207 /* check if layer bits (17-18) are good */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
208 layer = (head >> 17) & 0x3;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
209 if (!layer)
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
210 return FALSE; /* 00 = reserved */
897
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
211 layer = 4 - layer;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
212
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
213 /* check if bitrate index bits (12-15) are acceptable */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
214 bitIndex = (head >> 12) & 0xf;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
215
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
216 /* 1111 and 0000 are reserved values for all layers */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
217 if (bitIndex == 0xf || bitIndex == 0)
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
218 return FALSE;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
219
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
220 /* check samplerate index bits (10-11) */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
221 sampleIndex = (head >> 10) & 0x3;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
222 if (sampleIndex == 0x3)
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
223 return FALSE;
1302
1d3b02d1842b Guess... Yes, "i18n" stuff.
Stany HENRY <StrassBoy@gmail.com>
parents: 1277
diff changeset
224
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
225 /* check version bits (19-20) and get bitRate */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
226 version = (head >> 19) & 0x03;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
227 switch (version) {
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
228 case 0: /* 00 = MPEG Version 2.5 */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
229 case 2: /* 10 = MPEG Version 2 */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
230 if (layer == 1)
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
231 bitRate = mp3_bitrate_table[3][bitIndex];
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
232 else
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
233 bitRate = mp3_bitrate_table[4][bitIndex];
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
234 break;
1302
1d3b02d1842b Guess... Yes, "i18n" stuff.
Stany HENRY <StrassBoy@gmail.com>
parents: 1277
diff changeset
235
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
236 case 1: /* 01 = reserved */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
237 return FALSE;
1302
1d3b02d1842b Guess... Yes, "i18n" stuff.
Stany HENRY <StrassBoy@gmail.com>
parents: 1277
diff changeset
238
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
239 case 3: /* 11 = MPEG Version 1 */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
240 bitRate = mp3_bitrate_table[layer][bitIndex];
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
241 break;
1302
1d3b02d1842b Guess... Yes, "i18n" stuff.
Stany HENRY <StrassBoy@gmail.com>
parents: 1277
diff changeset
242
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
243 default:
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
244 return FALSE;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
245 }
1302
1d3b02d1842b Guess... Yes, "i18n" stuff.
Stany HENRY <StrassBoy@gmail.com>
parents: 1277
diff changeset
246
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
247 /* check layer II restrictions vs. bitrate */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
248 if (layer == 2) {
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
249 gint chanMode = (head >> 6) & 0x3;
1302
1d3b02d1842b Guess... Yes, "i18n" stuff.
Stany HENRY <StrassBoy@gmail.com>
parents: 1277
diff changeset
250
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
251 if (chanMode == 0x3) {
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
252 /* single channel with bitrate > 192 */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
253 if (bitRate > 192)
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
254 return FALSE;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
255 } else {
897
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
256 /* any other mode with bitrates 32-56 and 80.
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
257 * NOTICE! this check is not entirely correct, but I think
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
258 * it is sufficient in most cases.
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
259 */
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
260 if (((bitRate >= 32 && bitRate <= 56) || bitRate == 80))
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
261 return FALSE;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
262 }
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
263 }
1302
1d3b02d1842b Guess... Yes, "i18n" stuff.
Stany HENRY <StrassBoy@gmail.com>
parents: 1277
diff changeset
264
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
265 /* calculate approx. frame size */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
266 padding = (head >> 9) & 1;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
267 sampleRate = mp3_samplerate_table[version][sampleIndex];
897
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
268 if (layer == 1)
1302
1d3b02d1842b Guess... Yes, "i18n" stuff.
Stany HENRY <StrassBoy@gmail.com>
parents: 1277
diff changeset
269 *frameSize = ((12 * bitRate * 1000 / sampleRate) + padding) * 4;
897
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
270 else
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
271 *frameSize = (144 * bitRate * 1000) / (sampleRate + padding);
1302
1d3b02d1842b Guess... Yes, "i18n" stuff.
Stany HENRY <StrassBoy@gmail.com>
parents: 1277
diff changeset
272
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
273 /* check if bits 16 - 19 are all set (MPEG 1 Layer I, not protected?) */
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
274 if (((head >> 19) & 1) == 1 &&
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
275 ((head >> 17) & 3) == 3 && ((head >> 16) & 1) == 1)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
276 return FALSE;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
277
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
278 /* not sure why we check this, but ok! */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
279 if ((head & 0xffff0000) == 0xfffe0000)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
280 return FALSE;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
281
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
282 return TRUE;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
283 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
284
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
285 static int mp3_head_convert(const guchar * hbuf)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
286 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
287 return ((unsigned long) hbuf[0] << 24) |
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
288 ((unsigned long) hbuf[1] << 16) |
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
289 ((unsigned long) hbuf[2] << 8) | (unsigned long) hbuf[3];
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
290 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
291
768
1d3f70ac6b31 [svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents: 765
diff changeset
292 gboolean audmad_is_remote(gchar *url)
1d3f70ac6b31 [svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents: 765
diff changeset
293 {
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
294 gboolean rv = aud_vfs_is_remote(url);
1329
4b07404814ca - reduce the number of file open in loading.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1328
diff changeset
295 return rv;
768
1d3f70ac6b31 [svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents: 765
diff changeset
296 }
612
951b24719ce9 [svn] - fix for audmad_is_our_fd()
yaz
parents: 611
diff changeset
297
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
298 // audacious vfs fast version
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
299 static int audmad_is_our_fd(char *filename, VFSFile *fin)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
300 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
301 guint32 check;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
302 gchar *ext = extname(filename);
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
303 gint cyc = 0, chkcount = 0, chksize = 4096;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
304 guchar buf[4];
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
305 guchar tmp[4096];
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
306 gint ret, i, frameSize;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
307
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
308 info.remote = FALSE;
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
309
768
1d3f70ac6b31 [svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents: 765
diff changeset
310 if(audmad_is_remote(filename))
612
951b24719ce9 [svn] - fix for audmad_is_our_fd()
yaz
parents: 611
diff changeset
311 info.remote = TRUE;
951b24719ce9 [svn] - fix for audmad_is_our_fd()
yaz
parents: 611
diff changeset
312
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
313 /* I've seen some flac files beginning with id3 frames..
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
314 so let's exclude known non-mp3 filename extensions */
1302
1d3b02d1842b Guess... Yes, "i18n" stuff.
Stany HENRY <StrassBoy@gmail.com>
parents: 1277
diff changeset
315 if ((ext != NULL) &&
671
e6a1ba5185ba [svn] - Tweak to check we found a file extension before using it to prevent segfault
nazca
parents: 653
diff changeset
316 (!strcasecmp("flac", ext) || !strcasecmp("mpc", ext) ||
e6a1ba5185ba [svn] - Tweak to check we found a file extension before using it to prevent segfault
nazca
parents: 653
diff changeset
317 !strcasecmp("tta", ext) || !strcasecmp("ogg", ext) ||
e6a1ba5185ba [svn] - Tweak to check we found a file extension before using it to prevent segfault
nazca
parents: 653
diff changeset
318 !strcasecmp("wma", ext) )
789
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
319 )
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
320 return 0;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
321
789
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
322 if (fin == NULL) {
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
323 g_message("fin = NULL");
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
324 return 0;
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
325 }
788
2461b711162b [svn] - revert r1664 as it breaks too much
nenolod
parents: 783
diff changeset
326
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
327 if(aud_vfs_fread(buf, 1, 4, fin) == 0) {
799
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
328 gchar *tmp = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
329 g_message("aud_vfs_fread failed @1 %s", tmp);
799
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
330 g_free(tmp);
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
331 return 0;
789
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
332 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
333
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
334 check = mp3_head_convert(buf);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
335
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
336 if (memcmp(buf, "ID3", 3) == 0)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
337 return 1;
782
6f519e34ddf0 [svn] - reject files which use Ogg container magic
nenolod
parents: 773
diff changeset
338 else if (memcmp(buf, "OggS", 4) == 0)
6f519e34ddf0 [svn] - reject files which use Ogg container magic
nenolod
parents: 773
diff changeset
339 return 0;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
340 else if (memcmp(buf, "RIFF", 4) == 0)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
341 {
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
342 aud_vfs_fseek(fin, 4, SEEK_CUR);
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
343 if(aud_vfs_fread(buf, 1, 4, fin) == 0) {
1302
1d3b02d1842b Guess... Yes, "i18n" stuff.
Stany HENRY <StrassBoy@gmail.com>
parents: 1277
diff changeset
344 gchar *tmp = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
345 g_message("aud_vfs_fread failed @2 %s", tmp);
799
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
346 g_free(tmp);
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
347 return 0;
789
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
348 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
349
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
350 if (memcmp(buf, "RMP3", 4) == 0)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
351 return 1;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
352 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
353
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
354 // check data for frame header
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
355 while (!mp3_head_check(check, &frameSize))
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
356 {
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
357 if((ret = aud_vfs_fread(tmp, 1, chksize, fin)) == 0){
799
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
358 gchar *tmp = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
359 g_message("aud_vfs_fread failed @3 %s", tmp);
799
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
360 g_free(tmp);
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
361 return 0;
789
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
362 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
363 for (i = 0; i < ret; i++)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
364 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
365 check <<= 8;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
366 check |= tmp[i];
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
367
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
368 if (mp3_head_check(check, &frameSize)) {
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
369 /* when the first matching frame header is found, we check for
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
370 * another frame by seeking to the approximate start of the
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
371 * next header ... also reduce the check size.
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
372 */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
373 if (++chkcount >= 3) return 1;
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
374 aud_vfs_fseek(fin, frameSize-4, SEEK_CUR);
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
375 check = 0;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
376 chksize = 8;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
377 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
378 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
379
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
380 if (++cyc > 32)
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
381 return 0;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
382 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
383
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
384 return 1;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
385 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
386
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
387 // audacious vfs version
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
388 static int audmad_is_our_file(char *filename)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
389 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
390 VFSFile *fin = NULL;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
391 gint rtn;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
392
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
393 fin = aud_vfs_fopen(filename, "rb");
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
394
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
395 if (fin == NULL)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
396 return 0;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
397
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
398 rtn = audmad_is_our_fd(filename, fin);
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
399 aud_vfs_fclose(fin);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
400
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
401 return rtn;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
402 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
403
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
404 static void audmad_stop(InputPlayback *playback)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
405 {
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
406 AUDDBG("f: audmad_stop\n");
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
407 g_mutex_lock(mad_mutex);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
408 info.playback = playback;
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
409 g_mutex_unlock(mad_mutex);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
410
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
411 if (decode_thread) {
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
412
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
413 g_mutex_lock(mad_mutex);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
414 info.playback->playing = 0;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
415 g_mutex_unlock(mad_mutex);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
416 g_cond_signal(mad_cond);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
417
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
418 AUDDBG("waiting for thread\n");
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
419 g_thread_join(decode_thread);
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
420 AUDDBG("thread done\n");
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2207
diff changeset
421
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
422 input_term(&info);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
423 decode_thread = NULL;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
424
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
425 }
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
426 AUDDBG("e: audmad_stop\n");
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
427 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
428
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
429 static void audmad_play_file(InputPlayback *playback)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
430 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
431 gboolean rtn;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
432 gchar *url = playback->filename;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
433
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2207
diff changeset
434 #ifdef AUD_DEBUG
799
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
435 {
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
436 gchar *tmp = g_filename_to_utf8(url, -1, NULL, NULL, NULL);
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
437 AUDDBG("playing %s\n", tmp);
799
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
438 g_free(tmp);
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
439 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
440 #endif /* DEBUG */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
441
1328
38fb3bb3e21e - make probing for tuple completely reuse fd.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1326
diff changeset
442 if (input_init(&info, url, NULL) == FALSE) {
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
443 g_message("error initialising input");
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
444 return;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
445 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
446
768
1d3f70ac6b31 [svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents: 765
diff changeset
447 // remote access must use fast scan.
1d3f70ac6b31 [svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents: 765
diff changeset
448 rtn = input_get_info(&info, audmad_is_remote(url) ? TRUE : audmad_config.fast_play_time_calc);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
449
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
450 if (rtn == FALSE) {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
451 g_message("error reading input info");
977
bdf6ccf7bf53 [svn] Fixed the embarassing situation i was in (writing a plugin and not being able to see/hear it work).
majeru
parents: 922
diff changeset
452 /*
1302
1d3b02d1842b Guess... Yes, "i18n" stuff.
Stany HENRY <StrassBoy@gmail.com>
parents: 1277
diff changeset
453 * return;
1d3b02d1842b Guess... Yes, "i18n" stuff.
Stany HENRY <StrassBoy@gmail.com>
parents: 1277
diff changeset
454 * commenting this return seems to be a hacky fix for the damn lastfm plugin playback
1d3b02d1842b Guess... Yes, "i18n" stuff.
Stany HENRY <StrassBoy@gmail.com>
parents: 1277
diff changeset
455 * that used to work only for nenolod because of his fsck-ing lastfm subscription :p
977
bdf6ccf7bf53 [svn] Fixed the embarassing situation i was in (writing a plugin and not being able to see/hear it work).
majeru
parents: 922
diff changeset
456 */
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
457 }
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
458 g_mutex_lock(pb_mutex);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
459 info.playback = playback;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
460 info.playback->playing = 1;
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
461 g_mutex_unlock(pb_mutex);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
462
1342
ebded68de2dd madplug: Update plugin for new threading model.
William Pitcock <nenolod@atheme-project.org>
parents: 1329
diff changeset
463 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: 1428
diff changeset
464 playback->set_pb_ready(playback);
1342
ebded68de2dd madplug: Update plugin for new threading model.
William Pitcock <nenolod@atheme-project.org>
parents: 1329
diff changeset
465 decode_loop(&info);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
466 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
467
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
468 static void audmad_pause(InputPlayback *playback, short paused)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
469 {
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
470 g_mutex_lock(pb_mutex);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
471 info.playback = playback;
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
472 g_mutex_unlock(pb_mutex);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
473 playback->output->pause(paused);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
474 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
475
807
0f9c8d4d3ac4 [svn] - make use of new millisecond seek API.
yaz
parents: 802
diff changeset
476 static void audmad_mseek(InputPlayback *playback, gulong millisecond)
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
477 {
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
478 g_mutex_lock(pb_mutex);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
479 info.playback = playback;
807
0f9c8d4d3ac4 [svn] - make use of new millisecond seek API.
yaz
parents: 802
diff changeset
480 info.seek = millisecond;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
481 g_mutex_unlock(pb_mutex);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
482 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
483
807
0f9c8d4d3ac4 [svn] - make use of new millisecond seek API.
yaz
parents: 802
diff changeset
484 static void audmad_seek(InputPlayback *playback, gint time)
0f9c8d4d3ac4 [svn] - make use of new millisecond seek API.
yaz
parents: 802
diff changeset
485 {
0f9c8d4d3ac4 [svn] - make use of new millisecond seek API.
yaz
parents: 802
diff changeset
486 audmad_mseek(playback, time * 1000);
0f9c8d4d3ac4 [svn] - make use of new millisecond seek API.
yaz
parents: 802
diff changeset
487 }
0f9c8d4d3ac4 [svn] - make use of new millisecond seek API.
yaz
parents: 802
diff changeset
488
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
489 /**
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
490 * Scan the given file or URL.
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
491 * Fills in the title string and the track length in milliseconds.
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
492 */
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
493 static void
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
494 audmad_get_song_info(char *url, char **title, int *length)
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
495 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
496 struct mad_info_t myinfo;
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2207
diff changeset
497 #ifdef AUD_DEBUG
799
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
498 gchar *tmp = g_filename_to_utf8(url, -1, NULL, NULL, NULL);
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
499 AUDDBG("f: audmad_get_song_info: %s\n", tmp);
799
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
500 g_free(tmp);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
501 #endif /* DEBUG */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
502
1328
38fb3bb3e21e - make probing for tuple completely reuse fd.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1326
diff changeset
503 if (input_init(&myinfo, url, NULL) == FALSE) {
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
504 AUDDBG("error initialising input\n");
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
505 return;
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
506 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
507
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
508 if (input_get_info(&myinfo, info.remote ? TRUE : audmad_config.fast_play_time_calc) == TRUE) {
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1738
diff changeset
509 if(aud_tuple_get_string(myinfo.tuple, -1, "track-name"))
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1738
diff changeset
510 *title = g_strdup(aud_tuple_get_string(myinfo.tuple, -1, "track-name"));
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
511 else
1428
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
512 *title = g_strdup(url);
1738
e1ebf3fc1a16 - follow the change of libaudid3tag.so's location.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1697
diff changeset
513
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1738
diff changeset
514 *length = aud_tuple_get_int(myinfo.tuple, FIELD_LENGTH, NULL);
1738
e1ebf3fc1a16 - follow the change of libaudid3tag.so's location.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1697
diff changeset
515 if(*length == -1)
738
6ea974a229a8 [svn] - add read/write support for TLEN frame.
yaz
parents: 676
diff changeset
516 *length = mad_timer_count(myinfo.duration, MAD_UNITS_MILLISECONDS);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
517 }
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
518 else {
1428
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
519 *title = g_strdup(url);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
520 *length = -1;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
521 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
522 input_term(&myinfo);
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
523 AUDDBG("e: audmad_get_song_info\n");
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
524 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
525
2205
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
526 static gboolean
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
527 audmad_fill_info(struct mad_info_t *info, VFSFile *fd)
1328
38fb3bb3e21e - make probing for tuple completely reuse fd.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1326
diff changeset
528 {
2205
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
529 if (fd == NULL || info == NULL) return FALSE;
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
530 AUDDBG("f: audmad_fill_info(): %s\n", fd->uri);
1328
38fb3bb3e21e - make probing for tuple completely reuse fd.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1326
diff changeset
531
2205
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
532 if (input_init(info, fd->uri, fd) == FALSE) {
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
533 AUDDBG("audmad_fill_info(): error initialising input\n");
2205
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
534 return FALSE;
1328
38fb3bb3e21e - make probing for tuple completely reuse fd.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1326
diff changeset
535 }
2205
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
536
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
537 info->fileinfo_request = FALSE; /* we don't need to read tuple again */
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
538 return input_get_info(info, aud_vfs_is_remote(fd->uri) ? TRUE : audmad_config.fast_play_time_calc);
1328
38fb3bb3e21e - make probing for tuple completely reuse fd.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1326
diff changeset
539 }
38fb3bb3e21e - make probing for tuple completely reuse fd.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1326
diff changeset
540
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
541 static void audmad_about()
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
542 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
543 static GtkWidget *aboutbox;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
544 gchar *scratch;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
545
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
546 if (aboutbox != NULL)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
547 return;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
548
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
549 scratch = g_strdup_printf(
1361
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
550 _("Audacious MPEG Audio Plugin\n"
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
551 "\n"
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
552 "Compiled against libMAD version: %d.%d.%d%s\n"
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
553 "\n"
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
554 "Written by:\n"
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
555 " William Pitcock <nenolod@sacredspiral.co.uk>\n"
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
556 " Yoshiki Yazawa <yaz@cc.rim.or.jp>\n"
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
557 "\n"
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
558 "Portions derived from XMMS-MAD by:\n"
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
559 " Sam Clegg\n"
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
560 "\n"
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
561 "ReplayGain support by:\n"
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
562 " Samuel Krempp"),
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
563 MAD_VERSION_MAJOR, MAD_VERSION_MINOR, MAD_VERSION_PATCH,
f8b498451a84 - Fixed a bug that would crash Audacious when reloading plugins
mf0102 <0102@gmx.at>
parents: 1329
diff changeset
564 MAD_VERSION_EXTRA);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
565
1677
f6f5603a0954 xmms_show_message() changed to audacious_info_dialog()
Matti Hamalainen <ccr@tnsp.org>
parents: 1485
diff changeset
566 aboutbox = audacious_info_dialog(_("About MPEG Audio Plugin"),
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
567 scratch,
1302
1d3b02d1842b Guess... Yes, "i18n" stuff.
Stany HENRY <StrassBoy@gmail.com>
parents: 1277
diff changeset
568 _("Ok"), FALSE, NULL, NULL);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
569
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
570 g_free(scratch);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
571
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
572 g_signal_connect(G_OBJECT(aboutbox), "destroy",
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
573 G_CALLBACK(gtk_widget_destroyed), &aboutbox);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
574 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
575
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
576 /**
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
577 * Display a GTK box containing the given error message.
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
578 * Taken from mpg123 plugin.
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
579 */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
580 void audmad_error(char *error, ...)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
581 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
582 #ifndef NOGUI
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
583 if (!error_dialog) {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
584 va_list args;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
585 char string[256];
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
586 va_start(args, error);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
587 vsnprintf(string, 256, error, args);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
588 va_end(args);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
589 GDK_THREADS_ENTER();
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
590 error_dialog =
1677
f6f5603a0954 xmms_show_message() changed to audacious_info_dialog()
Matti Hamalainen <ccr@tnsp.org>
parents: 1485
diff changeset
591 audacious_info_dialog(_("Error"), string, _("Ok"), FALSE, 0, 0);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
592 gtk_signal_connect(GTK_OBJECT(error_dialog), "destroy",
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
593 GTK_SIGNAL_FUNC(gtk_widget_destroyed),
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
594 &error_dialog);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
595 GDK_THREADS_LEAVE();
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
596 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
597 #endif /* !NOGUI */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
598 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
599
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
600 extern void audmad_configure();
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
601
1687
d158ce84fda7 Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 1485
diff changeset
602 static void __set_and_free(Tuple *tuple, gint nfield, gchar *name, gchar *value)
1428
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
603 {
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1738
diff changeset
604 aud_tuple_associate_string(tuple, nfield, name, value);
1428
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
605 g_free(value);
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
606 }
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
607
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
608 // tuple stuff
1428
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
609 static Tuple *__audmad_get_song_tuple(char *filename, VFSFile *fd)
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
610 {
1428
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
611 Tuple *tuple = NULL;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
612 gchar *string = NULL;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
613
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
614 struct id3_file *id3file = NULL;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
615 struct id3_tag *tag = NULL;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
616
2205
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
617 struct mad_info_t myinfo;
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
618
1329
4b07404814ca - reduce the number of file open in loading.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1328
diff changeset
619 gboolean local_fd = FALSE;
2205
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
620 int length;
1329
4b07404814ca - reduce the number of file open in loading.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1328
diff changeset
621
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2207
diff changeset
622 #ifdef AUD_DEBUG
2050
2ffc6a69fcd1 string API calls -> vtable
William Pitcock <nenolod@atheme.org>
parents: 1995
diff changeset
623 string = aud_str_to_utf8(filename);
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
624 AUDDBG("f: mad: audmad_get_song_tuple: %s\n", string);
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
625 g_free(string);
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
626 string = NULL;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
627 #endif
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
628
2205
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
629 /* isn't is obfuscated? --eugene */
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
630
768
1d3f70ac6b31 [svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents: 765
diff changeset
631 if(info.remote && mad_timer_count(info.duration, MAD_UNITS_SECONDS) <= 0){
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
632 if((fd && aud_vfs_is_streaming(fd)) || (info.playback && info.playback->playing)) {
768
1d3f70ac6b31 [svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents: 765
diff changeset
633 gchar *tmp = NULL;
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1738
diff changeset
634 tuple = aud_tuple_new_from_filename(filename);
1328
38fb3bb3e21e - make probing for tuple completely reuse fd.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1326
diff changeset
635
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2207
diff changeset
636 #ifdef AUD_DEBUG
1328
38fb3bb3e21e - make probing for tuple completely reuse fd.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1326
diff changeset
637 if(info.playback)
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
638 AUDDBG("info.playback->playing = %d\n",info.playback->playing);
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
639 #endif
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
640 tmp = aud_vfs_get_metadata(info.infile ? info.infile : fd, "track-name");
768
1d3f70ac6b31 [svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents: 765
diff changeset
641 if(tmp){
1428
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
642 gchar *scratch;
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
643
2050
2ffc6a69fcd1 string API calls -> vtable
William Pitcock <nenolod@atheme.org>
parents: 1995
diff changeset
644 scratch = aud_str_to_utf8(tmp);
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1738
diff changeset
645 aud_tuple_associate_string(tuple, FIELD_TITLE, NULL, scratch);
768
1d3f70ac6b31 [svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents: 765
diff changeset
646 g_free(tmp);
1428
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
647 g_free(scratch);
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
648
768
1d3f70ac6b31 [svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents: 765
diff changeset
649 tmp = NULL;
1d3f70ac6b31 [svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents: 765
diff changeset
650 }
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
651 tmp = aud_vfs_get_metadata(info.infile ? info.infile : fd, "stream-name");
768
1d3f70ac6b31 [svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents: 765
diff changeset
652 if(tmp){
1428
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
653 gchar *scratch;
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
654
2050
2ffc6a69fcd1 string API calls -> vtable
William Pitcock <nenolod@atheme.org>
parents: 1995
diff changeset
655 scratch = aud_str_to_utf8(tmp);
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1738
diff changeset
656 aud_tuple_associate_string(tuple, FIELD_TITLE, NULL, scratch);
768
1d3f70ac6b31 [svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents: 765
diff changeset
657 g_free(tmp);
1428
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
658 g_free(scratch);
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
659
768
1d3f70ac6b31 [svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents: 765
diff changeset
660 tmp = NULL;
1d3f70ac6b31 [svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents: 765
diff changeset
661 }
1328
38fb3bb3e21e - make probing for tuple completely reuse fd.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1326
diff changeset
662
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
663 AUDDBG("audmad_get_song_tuple: track_name = %s\n", aud_tuple_get_string(tuple, -1, "track-name"));
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
664 AUDDBG("audmad_get_song_tuple: stream_name = %s\n", aud_tuple_get_string(tuple, -1, "stream-name"));
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1738
diff changeset
665 aud_tuple_associate_int(tuple, FIELD_LENGTH, NULL, -1);
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1738
diff changeset
666 aud_tuple_associate_int(tuple, FIELD_MTIME, NULL, 0); // this indicates streaming
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
667 AUDDBG("get_song_tuple: remote: tuple\n");
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
668 return tuple;
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
669 }
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
670 AUDDBG("get_song_tuple: remote: NULL\n");
1328
38fb3bb3e21e - make probing for tuple completely reuse fd.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1326
diff changeset
671 } /* info.remote */
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
672
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
673 // if !fd, pre-open the file with aud_vfs_fopen() and reuse fd.
1329
4b07404814ca - reduce the number of file open in loading.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1328
diff changeset
674 if(!fd) {
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
675 fd = aud_vfs_fopen(filename, "rb");
1329
4b07404814ca - reduce the number of file open in loading.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1328
diff changeset
676 if(!fd)
4b07404814ca - reduce the number of file open in loading.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1328
diff changeset
677 return NULL;
4b07404814ca - reduce the number of file open in loading.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1328
diff changeset
678 local_fd = TRUE;
4b07404814ca - reduce the number of file open in loading.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1328
diff changeset
679 }
4b07404814ca - reduce the number of file open in loading.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1328
diff changeset
680
2205
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
681 if (!audmad_fill_info(&myinfo, fd)) {
2214
9a869d4bb0d3 make use of AUDDBG() for debug print out.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2207
diff changeset
682 AUDDBG("get_song_tuple: error obtaining info\n");
2205
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
683 if (local_fd) aud_vfs_fclose(fd);
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
684 return NULL;
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
685 }
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
686
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1738
diff changeset
687 tuple = aud_tuple_new();
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1738
diff changeset
688 aud_tuple_associate_int(tuple, FIELD_LENGTH, NULL, -1);
1428
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
689
1329
4b07404814ca - reduce the number of file open in loading.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1328
diff changeset
690 id3file = id3_file_vfsopen(fd, ID3_FILE_MODE_READONLY);
1315
e3c991e485ed madplug: Support probe for tuple instruction.
William Pitcock <nenolod@atheme-project.org>
parents: 1302
diff changeset
691
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
692 if (id3file) {
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
693
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
694 tag = id3_file_tag(id3file);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
695 if (tag) {
1687
d158ce84fda7 Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 1485
diff changeset
696 __set_and_free(tuple, FIELD_ARTIST, NULL, input_id3_get_string(tag, ID3_FRAME_ARTIST));
d158ce84fda7 Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 1485
diff changeset
697 __set_and_free(tuple, FIELD_ALBUM, NULL, input_id3_get_string(tag, ID3_FRAME_ALBUM));
d158ce84fda7 Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 1485
diff changeset
698 __set_and_free(tuple, FIELD_TITLE, NULL, input_id3_get_string(tag, ID3_FRAME_TITLE));
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
699
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
700 // year
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
701 string = NULL;
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
702 string = input_id3_get_string(tag, ID3_FRAME_YEAR); //TDRC
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
703 if (!string)
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
704 string = input_id3_get_string(tag, "TYER");
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
705
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
706 if (string) {
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1738
diff changeset
707 aud_tuple_associate_int(tuple, FIELD_YEAR, NULL, atoi(string));
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
708 g_free(string);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
709 string = NULL;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
710 }
2241
a5c96af75300 make use of aud_uri_to_display_*()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
711
a5c96af75300 make use of aud_uri_to_display_*()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
712 __set_and_free(tuple, FIELD_FILE_NAME, NULL, aud_uri_to_display_basename(filename));
a5c96af75300 make use of aud_uri_to_display_*()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
713 __set_and_free(tuple, FIELD_FILE_PATH, NULL, aud_uri_to_display_dirname(filename));
a5c96af75300 make use of aud_uri_to_display_*()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
714 aud_tuple_associate_string(tuple, FIELD_FILE_EXT, NULL, extname(filename));
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
715
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
716 // length
2205
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
717 length = mad_timer_count(myinfo.duration, MAD_UNITS_MILLISECONDS);
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
718 aud_tuple_associate_int(tuple, FIELD_LENGTH, NULL, length);
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
719
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
720 // track number
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
721 string = input_id3_get_string(tag, ID3_FRAME_TRACK);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
722 if (string) {
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1738
diff changeset
723 aud_tuple_associate_int(tuple, FIELD_TRACK_NUMBER, NULL, atoi(string));
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
724 g_free(string);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
725 string = NULL;
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
726 }
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
727 // genre
1687
d158ce84fda7 Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 1485
diff changeset
728 __set_and_free(tuple, FIELD_GENRE, NULL, input_id3_get_string(tag, ID3_FRAME_GENRE));
d158ce84fda7 Modified for Tuplez/plugin API changes.
Matti Hamalainen <ccr@tnsp.org>
parents: 1485
diff changeset
729 __set_and_free(tuple, FIELD_COMMENT, NULL, input_id3_get_string(tag, ID3_FRAME_COMMENT));
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
730 AUDDBG("genre = %s\n", aud_tuple_get_string(tuple, FIELD_GENRE, NULL));
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
731 }
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
732 id3_file_close(id3file);
1329
4b07404814ca - reduce the number of file open in loading.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1328
diff changeset
733 } // id3file
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
734 else { // no id3tag
2241
a5c96af75300 make use of aud_uri_to_display_*()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
735 __set_and_free(tuple, FIELD_FILE_NAME, NULL, aud_uri_to_display_basename(filename));
a5c96af75300 make use of aud_uri_to_display_*()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
736 __set_and_free(tuple, FIELD_FILE_PATH, NULL, aud_uri_to_display_dirname(filename));
a5c96af75300 make use of aud_uri_to_display_*()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2214
diff changeset
737 aud_tuple_associate_string(tuple, FIELD_FILE_EXT, NULL, extname(filename));
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
738 // length
2205
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
739 length = mad_timer_count(myinfo.duration, MAD_UNITS_MILLISECONDS);
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
740 aud_tuple_associate_int(tuple, FIELD_LENGTH, NULL, length);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
741 }
1329
4b07404814ca - reduce the number of file open in loading.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1328
diff changeset
742
2207
0b67fb27db58 get benefit of FIELD_BITRATE
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2206
diff changeset
743 aud_tuple_associate_string(tuple, FIELD_QUALITY, NULL, "lossy");
0b67fb27db58 get benefit of FIELD_BITRATE
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2206
diff changeset
744 aud_tuple_associate_int(tuple, FIELD_BITRATE, NULL, myinfo.bitrate / 1000);
2205
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
745 g_free(string);
2203
13b8ab116b69 removed debugging stuff. some notes added
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2202
diff changeset
746
2205
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
747 string = g_strdup_printf("MPEG-1 Audio Layer %d", myinfo.mpeg_layer);
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
748 aud_tuple_associate_string(tuple, FIELD_CODEC, NULL, string);
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
749 g_free(string);
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
750
2201
df520f828dcf Say goodbye to custom fileinfo dialog in madplug
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2153
diff changeset
751 aud_tuple_associate_string(tuple, FIELD_MIMETYPE, NULL, "audio/mpeg");
2205
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
752
2faee266ea1e madplug now provides more informative tuple
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2203
diff changeset
753 input_term(&myinfo);
1428
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
754
1329
4b07404814ca - reduce the number of file open in loading.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1328
diff changeset
755 if(local_fd)
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
756 aud_vfs_fclose(fd);
1329
4b07404814ca - reduce the number of file open in loading.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1328
diff changeset
757
2276
d25cd7e7eddb append '\n' to format string for AUDDBG()
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 2241
diff changeset
758 AUDDBG("e: mad: audmad_get_song_tuple\n");
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
759 return tuple;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
760 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
761
1428
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
762 static Tuple *audmad_get_song_tuple(char *filename)
1315
e3c991e485ed madplug: Support probe for tuple instruction.
William Pitcock <nenolod@atheme-project.org>
parents: 1302
diff changeset
763 {
e3c991e485ed madplug: Support probe for tuple instruction.
William Pitcock <nenolod@atheme-project.org>
parents: 1302
diff changeset
764 return __audmad_get_song_tuple(filename, NULL);
e3c991e485ed madplug: Support probe for tuple instruction.
William Pitcock <nenolod@atheme-project.org>
parents: 1302
diff changeset
765 }
e3c991e485ed madplug: Support probe for tuple instruction.
William Pitcock <nenolod@atheme-project.org>
parents: 1302
diff changeset
766
1428
4993976d7ed0 madplug: tuple API changes
William Pitcock <nenolod@atheme-project.org>
parents: 1400
diff changeset
767 static Tuple *audmad_probe_for_tuple(char *filename, VFSFile *fd)
1315
e3c991e485ed madplug: Support probe for tuple instruction.
William Pitcock <nenolod@atheme-project.org>
parents: 1302
diff changeset
768 {
e3c991e485ed madplug: Support probe for tuple instruction.
William Pitcock <nenolod@atheme-project.org>
parents: 1302
diff changeset
769 if (!audmad_is_our_fd(filename, fd))
e3c991e485ed madplug: Support probe for tuple instruction.
William Pitcock <nenolod@atheme-project.org>
parents: 1302
diff changeset
770 return NULL;
e3c991e485ed madplug: Support probe for tuple instruction.
William Pitcock <nenolod@atheme-project.org>
parents: 1302
diff changeset
771
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
772 aud_vfs_rewind(fd);
1326
e991d29a9c9a madplug: Fix ID3v1 tuple building.
William Pitcock <nenolod@atheme-project.org>
parents: 1324
diff changeset
773
1315
e3c991e485ed madplug: Support probe for tuple instruction.
William Pitcock <nenolod@atheme-project.org>
parents: 1302
diff changeset
774 return __audmad_get_song_tuple(filename, fd);
e3c991e485ed madplug: Support probe for tuple instruction.
William Pitcock <nenolod@atheme-project.org>
parents: 1302
diff changeset
775 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
776
2153
2f7eff0bc6eb madplug: add .bmu to extensions whitelist (closes bugzilla #49)
William Pitcock <nenolod@atheme.org>
parents: 2124
diff changeset
777 static gchar *fmts[] = { "mp3", "mp2", "mpg", "bmu", NULL };
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
778
1065
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
779 InputPlugin mad_ip = {
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
780 .description = "MPEG Audio Plugin",
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
781 .init = audmad_init,
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
782 .about = audmad_about,
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
783 .configure = audmad_configure,
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
784 .is_our_file = audmad_is_our_file,
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
785 .play_file = audmad_play_file,
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
786 .stop = audmad_stop,
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
787 .pause = audmad_pause,
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
788 .seek = audmad_seek,
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
789 .cleanup = audmad_cleanup,
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
790 .get_song_info = audmad_get_song_info,
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
791 .get_song_tuple = audmad_get_song_tuple,
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
792 .is_our_file_from_vfs = audmad_is_our_fd,
1979
839804c3b3a4 aud_vfs_extensions -> vfs_extensions, some vtable fixes
William Pitcock <nenolod@atheme.org>
parents: 1978
diff changeset
793 .vfs_extensions = fmts,
1315
e3c991e485ed madplug: Support probe for tuple instruction.
William Pitcock <nenolod@atheme-project.org>
parents: 1302
diff changeset
794 .mseek = audmad_mseek,
2201
df520f828dcf Say goodbye to custom fileinfo dialog in madplug
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2153
diff changeset
795 .probe_for_tuple = audmad_probe_for_tuple,
df520f828dcf Say goodbye to custom fileinfo dialog in madplug
Eugene Zagidullin <e.asphyx@gmail.com>
parents: 2153
diff changeset
796 .update_song_tuple = audmad_update_song_tuple,
1065
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
797 };
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
798
1065
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
799 InputPlugin *madplug_iplist[] = { &mad_ip, NULL };
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
800
1400
fe0a9cf95642 make use of SIMPLE_INPUT_PLUGIN() as an example.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1395
diff changeset
801 SIMPLE_INPUT_PLUGIN(madplug, madplug_iplist);
1065
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
802
b3b02e58429f [svn] - convert madplug to plugin API v2
nenolod
parents: 1033
diff changeset
803 InputPlugin *mad_plugin = &mad_ip;