annotate src/madplug/plugin.c @ 972:cf7021ca4e7b trunk

[svn] Add lastfm:// transport, an abstract VFS class which derives from curl to provide lastfm radio support. Written by majeru with some cleanups by me. Most last.fm metadata support isn't yet implemented, however, and will need to be done by majeru. ;)
author nenolod
date Sun, 22 Apr 2007 04:16:08 -0700
parents 7e14701aef54
children bdf6ccf7bf53
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
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
3 * Copyright (C) 2005-2007 William Pitcock, Yoshiki Yazawa
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
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
22 #include "config.h"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
23 #include "plugin.h"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
24 #include "input.h"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
25
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
26 #include <math.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 <gtk/gtk.h>
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
29 #include <audacious/util.h>
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
30 #include <audacious/configdb.h>
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
31 #include <stdarg.h>
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
32 #include <fcntl.h>
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
33 #include <audacious/vfs.h>
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
34 #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
35 #include "SFMT.h"
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
36
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
37 /*
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
38 * Global variables
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 struct audmad_config_t audmad_config; /**< global configuration */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
41 InputPlugin *mad_plugin = NULL;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
42 GMutex *mad_mutex;
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
43 GMutex *pb_mutex;
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
44 GCond *mad_cond;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
45
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
46 /*
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
47 * static variables
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 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
50 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
51
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
52 #ifndef NOGUI
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
53 static GtkWidget *error_dialog = 0;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
54 #endif
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
55
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
56 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
57
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
58 static gint mp3_bitrate_table[5][16] = {
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
59 { 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, -1 }, /* MPEG1 L1 */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
60 { 0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, -1 }, /* MPEG1 L2 */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
61 { 0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1 }, /* MPEG1 L3 */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
62 { 0, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, -1 }, /* MPEG2(.5) L1 */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
63 { 0, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, -1 } /* MPEG2(.5) L2,L3 */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
64 };
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
65
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
66 static gint mp3_samplerate_table[4][4] = {
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
67 { 11025, 12000, 8000, -1 }, /* MPEG2.5 */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
68 { -1, -1, -1, -1 }, /* Reserved */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
69 { 22050, 24000, 16000, -1 }, /* MPEG2 */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
70 { 44100, 48000, 32000, -1 } /* MPEG1 */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
71 };
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
72
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
73 /*
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
74 * Function extname (filename)
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 * 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
77 * filename has no extension.
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
78 *
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
79 */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
80 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
81 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
82 gchar *ext = strrchr(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 if (ext != NULL)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
85 ++ext;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
86
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
87 return 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
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
90
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
91 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
92 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
93 /* set some config parameters by parsing text fields
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
94 (RG default gain, etc..)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
95 */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
96 const gchar *text;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
97 gdouble x;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
98
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
99 text = config->pregain_db;
653
638b290641f3 [svn] - madplug: check that text is not null before using g_strtod
giacomo
parents: 651
diff changeset
100 if ( text != NULL )
638b290641f3 [svn] - madplug: check that text is not null before using g_strtod
giacomo
parents: 651
diff changeset
101 x = g_strtod(text, NULL);
638b290641f3 [svn] - madplug: check that text is not null before using g_strtod
giacomo
parents: 651
diff changeset
102 else
638b290641f3 [svn] - madplug: check that text is not null before using g_strtod
giacomo
parents: 651
diff changeset
103 x = 0;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
104 config->pregain_scale = (x != 0) ? pow(10.0, x / 20) : 1;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
105 #ifdef DEBUG
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
106 g_message("pregain=[%s] -> %g -> %g", text, x, config->pregain_scale);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
107 #endif
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;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
114 #ifdef DEBUG
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
115 g_message("RG.default=[%s] -> %g -> %g", text, x,
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
116 config->replaygain.default_scale);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
117 #endif
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
118 }
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 static void audmad_init()
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 ConfigDb *db = NULL;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
123
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
124 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
125 audmad_config.use_xing = TRUE;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
126 audmad_config.dither = TRUE;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
127 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
128 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
129 audmad_config.replaygain.enable = TRUE;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
130 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
131 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
132 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
133 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
134
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
135 db = bmp_cfg_db_open();
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
136 if (db) {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
137 bmp_cfg_db_get_bool(db, "MAD", "fast_play_time_calc",
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
138 &audmad_config.fast_play_time_calc);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
139 bmp_cfg_db_get_bool(db, "MAD", "use_xing",
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
140 &audmad_config.use_xing);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
141 bmp_cfg_db_get_bool(db, "MAD", "dither", &audmad_config.dither);
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
142 bmp_cfg_db_get_bool(db, "MAD", "sjis", &audmad_config.sjis);
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
143 bmp_cfg_db_get_bool(db, "MAD", "hard_limit",
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
144 &audmad_config.hard_limit);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
145 bmp_cfg_db_get_string(db, "MAD", "pregain_db",
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
146 &audmad_config.pregain_db);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
147 bmp_cfg_db_get_bool(db, "MAD", "RG.enable",
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
148 &audmad_config.replaygain.enable);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
149 bmp_cfg_db_get_bool(db, "MAD", "RG.track_mode",
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
150 &audmad_config.replaygain.track_mode);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
151 bmp_cfg_db_get_string(db, "MAD", "RG.default_db",
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
152 &audmad_config.replaygain.default_db);
618
a7a28782c1b0 [svn] - revise input_id3_get_string() to take encoding of field into account.
yaz
parents: 613
diff changeset
153 bmp_cfg_db_get_bool(db, "MAD", "title_override",
a7a28782c1b0 [svn] - revise input_id3_get_string() to take encoding of field into account.
yaz
parents: 613
diff changeset
154 &audmad_config.title_override);
a7a28782c1b0 [svn] - revise input_id3_get_string() to take encoding of field into account.
yaz
parents: 613
diff changeset
155 bmp_cfg_db_get_string(db, "MAD", "id3_format",
a7a28782c1b0 [svn] - revise input_id3_get_string() to take encoding of field into account.
yaz
parents: 613
diff changeset
156 &audmad_config.id3_format);
676
1733b12ef974 [svn] - show dynamic bitrate for vbr is off by default. now it is configurable from preferences.
yaz
parents: 674
diff changeset
157 bmp_cfg_db_get_bool(db, "MAD", "show_avg_vbr_bitrate",
1733b12ef974 [svn] - show dynamic bitrate for vbr is off by default. now it is configurable from preferences.
yaz
parents: 674
diff changeset
158 &audmad_config.show_avg_vbr_bitrate);
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
159 bmp_cfg_db_get_bool(db, "MAD", "force_reopen_audio",
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
160 &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
161
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
162 bmp_cfg_db_close(db);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
163 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
164
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
165 mad_mutex = g_mutex_new();
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
166 pb_mutex = g_mutex_new();
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
167 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
168 audmad_config_compute(&audmad_config);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
169
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
170 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
171 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
172
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 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
174 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
175
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
176 if (!audmad_config.id3_format)
650
8b9ef7a32e47 [svn] - make sure audmad_config.id3_format is not NULL. closes #795.
nenolod
parents: 646
diff changeset
177 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
178
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
179 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
180
610
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
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
183 static void audmad_cleanup()
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
184 {
802
7ac48f3855b1 [svn] - add cleanup code.
yaz
parents: 801
diff changeset
185 g_free(audmad_config.pregain_db);
7ac48f3855b1 [svn] - add cleanup code.
yaz
parents: 801
diff changeset
186 g_free(audmad_config.replaygain.default_db);
7ac48f3855b1 [svn] - add cleanup code.
yaz
parents: 801
diff changeset
187 g_free(audmad_config.id3_format);
7ac48f3855b1 [svn] - add cleanup code.
yaz
parents: 801
diff changeset
188
7ac48f3855b1 [svn] - add cleanup code.
yaz
parents: 801
diff changeset
189 g_cond_free(mad_cond);
7ac48f3855b1 [svn] - add cleanup code.
yaz
parents: 801
diff changeset
190 g_mutex_free(mad_mutex);
7ac48f3855b1 [svn] - add cleanup code.
yaz
parents: 801
diff changeset
191 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
192 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
193
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
194 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
195 {
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
196 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
197
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
198 /* 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
199 * 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
200 */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
201 if ((head & 0xffe00000) != 0xffe00000)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
202 return FALSE;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
203
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
204 /* 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
205 layer = (head >> 17) & 0x3;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
206 if (!layer)
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
207 return FALSE; /* 00 = reserved */
897
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
208 layer = 4 - layer;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
209
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
210 /* 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
211 bitIndex = (head >> 12) & 0xf;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
212
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
213 /* 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
214 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
215 return FALSE;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
216
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
217 /* check samplerate index bits (10-11) */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
218 sampleIndex = (head >> 10) & 0x3;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
219 if (sampleIndex == 0x3)
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
220 return FALSE;
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
221
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
222 /* 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
223 version = (head >> 19) & 0x03;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
224 switch (version) {
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
225 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
226 case 2: /* 10 = MPEG Version 2 */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
227 if (layer == 1)
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
228 bitRate = mp3_bitrate_table[3][bitIndex];
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
229 else
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
230 bitRate = mp3_bitrate_table[4][bitIndex];
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
231 break;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
232
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
233 case 1: /* 01 = reserved */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
234 return FALSE;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
235
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
236 case 3: /* 11 = MPEG Version 1 */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
237 bitRate = mp3_bitrate_table[layer][bitIndex];
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
238 break;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
239
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
240 default:
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
241 return FALSE;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
242 }
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
243
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
244 /* check layer II restrictions vs. bitrate */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
245 if (layer == 2) {
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
246 gint chanMode = (head >> 6) & 0x3;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
247
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
248 if (chanMode == 0x3) {
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
249 /* single channel with bitrate > 192 */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
250 if (bitRate > 192)
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
251 return FALSE;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
252 } else {
897
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
253 /* any other mode with bitrates 32-56 and 80.
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
254 * NOTICE! this check is not entirely correct, but I think
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
255 * it is sufficient in most cases.
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
256 */
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
257 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
258 return FALSE;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
259 }
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
260 }
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
261
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
262 /* calculate approx. frame size */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
263 padding = (head >> 9) & 1;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
264 sampleRate = mp3_samplerate_table[version][sampleIndex];
897
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
265 if (layer == 1)
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
266 *frameSize = ((12 * bitRate * 1000 / sampleRate) + padding) * 4;
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
267 else
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
268 *frameSize = (144 * bitRate * 1000) / (sampleRate + padding);
44a922a4a591 [svn] - fix validation of mpeg2 files, by ccr.
nenolod
parents: 807
diff changeset
269
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
270 /* 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
271 if (((head >> 19) & 1) == 1 &&
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
272 ((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
273 return FALSE;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
274
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
275 /* 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
276 if ((head & 0xffff0000) == 0xfffe0000)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
277 return FALSE;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
278
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
279 return TRUE;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
280 }
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 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
283 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
284 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
285 ((unsigned long) hbuf[1] << 16) |
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
286 ((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
287 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
288
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
289 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
290 {
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
291 if (!strncasecmp("http://", url, 7) || !strncasecmp("https://", url, 8))
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 return TRUE;
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 else
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
294 return FALSE;
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
295 }
612
951b24719ce9 [svn] - fix for audmad_is_our_fd()
yaz
parents: 611
diff changeset
296
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
297 // audacious vfs fast version
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
298 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
299 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
300 guint32 check;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
301 gchar *ext = extname(filename);
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
302 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
303 guchar buf[4];
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
304 guchar tmp[4096];
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
305 gint ret, i, frameSize;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
306
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
307 info.remote = FALSE;
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
308
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
309 if(audmad_is_remote(filename))
612
951b24719ce9 [svn] - fix for audmad_is_our_fd()
yaz
parents: 611
diff changeset
310 info.remote = TRUE;
951b24719ce9 [svn] - fix for audmad_is_our_fd()
yaz
parents: 611
diff changeset
311
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
312 /* 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
313 so let's exclude known non-mp3 filename extensions */
671
e6a1ba5185ba [svn] - Tweak to check we found a file extension before using it to prevent segfault
nazca
parents: 653
diff changeset
314 if ((ext != NULL) &&
e6a1ba5185ba [svn] - Tweak to check we found a file extension before using it to prevent segfault
nazca
parents: 653
diff changeset
315 (!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
316 !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
317 !strcasecmp("wma", ext) )
789
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
318 )
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
319 return 0;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
320
789
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
321 if (fin == NULL) {
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
322 g_message("fin = NULL");
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
323 return 0;
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
324 }
788
2461b711162b [svn] - revert r1664 as it breaks too much
nenolod
parents: 783
diff changeset
325
789
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
326 if(vfs_fread(buf, 1, 4, fin) == 0) {
799
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
327 gchar *tmp = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
328 g_message("vfs_fread failed @1 %s", tmp);
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
329 g_free(tmp);
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
330 return 0;
789
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
331 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
332
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
333 check = mp3_head_convert(buf);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
334
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
335 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
336 return 1;
782
6f519e34ddf0 [svn] - reject files which use Ogg container magic
nenolod
parents: 773
diff changeset
337 else if (memcmp(buf, "OggS", 4) == 0)
6f519e34ddf0 [svn] - reject files which use Ogg container magic
nenolod
parents: 773
diff changeset
338 return 0;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
339 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
340 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
341 vfs_fseek(fin, 4, SEEK_CUR);
789
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
342 if(vfs_fread(buf, 1, 4, fin) == 0) {
799
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
343 gchar *tmp = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
344 g_message("vfs_fread failed @2 %s", tmp);
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
345 g_free(tmp);
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
346 return 0;
789
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
347 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
348
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
349 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
350 return 1;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
351 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
352
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
353 // check data for frame header
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
354 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
355 {
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
356 if((ret = vfs_fread(tmp, 1, chksize, fin)) == 0){
799
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
357 gchar *tmp = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
358 g_message("vfs_fread failed @3 %s", tmp);
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
359 g_free(tmp);
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
360 return 0;
789
354c69a939bc [svn] revising vfs_fread() check code.
yaz
parents: 788
diff changeset
361 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
362 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
363 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
364 check <<= 8;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
365 check |= tmp[i];
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
366
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
367 if (mp3_head_check(check, &frameSize)) {
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
368 /* 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
369 * 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
370 * 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
371 */
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
372 if (++chkcount >= 3) return 1;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
373 vfs_fseek(fin, frameSize-4, SEEK_CUR);
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
374 check = 0;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
375 chksize = 8;
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
376 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
377 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
378
801
dd06b14a43a9 [svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents: 799
diff changeset
379 if (++cyc > 32)
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
380 return 0;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
381 }
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 return 1;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
384 }
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 // audacious vfs version
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
387 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
388 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
389 VFSFile *fin = NULL;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
390 gint rtn;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
391
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
392 fin = vfs_fopen(filename, "rb");
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
393
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
394 if (fin == NULL)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
395 return 0;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
396
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
397 rtn = audmad_is_our_fd(filename, fin);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
398 vfs_fclose(fin);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
399
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
400 return rtn;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
401 }
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 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
404 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
405 #ifdef DEBUG
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
406 g_message("f: audmad_stop");
612
951b24719ce9 [svn] - fix for audmad_is_our_fd()
yaz
parents: 611
diff changeset
407 #endif
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
408 g_mutex_lock(mad_mutex);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
409 info.playback = playback;
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
410 g_mutex_unlock(mad_mutex);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
411
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
412 if (decode_thread) {
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
413
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
414 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
415 info.playback->playing = 0;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
416 g_mutex_unlock(mad_mutex);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
417 g_cond_signal(mad_cond);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
418
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
419 #ifdef DEBUG
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
420 g_message("waiting for thread");
612
951b24719ce9 [svn] - fix for audmad_is_our_fd()
yaz
parents: 611
diff changeset
421 #endif
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
422 g_thread_join(decode_thread);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
423 #ifdef DEBUG
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
424 g_message("thread done");
612
951b24719ce9 [svn] - fix for audmad_is_our_fd()
yaz
parents: 611
diff changeset
425 #endif
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
426 input_term(&info);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
427 decode_thread = NULL;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
428
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
429 }
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
430 #ifdef DEBUG
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
431 g_message("e: audmad_stop");
612
951b24719ce9 [svn] - fix for audmad_is_our_fd()
yaz
parents: 611
diff changeset
432 #endif
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
433 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
434
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
435 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
436 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
437 gboolean rtn;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
438 gchar *url = playback->filename;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
439
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
440 #ifdef DEBUG
799
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
441 {
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
442 gchar *tmp = g_filename_to_utf8(url, -1, NULL, NULL, NULL);
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
443 g_message("playing %s", tmp);
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
444 g_free(tmp);
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
445 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
446 #endif /* DEBUG */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
447
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
448 if (input_init(&info, url) == FALSE) {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
449 g_message("error initialising input");
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
450 return;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
451 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
452
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
453 // 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
454 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
455
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
456 if (rtn == FALSE) {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
457 g_message("error reading input info");
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
458 return;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
459 }
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
460 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
461 info.playback = playback;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
462 info.playback->playing = 1;
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
463 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
464
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
465 decode_thread = g_thread_create(decode_loop, (void *) &info, TRUE, NULL);
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;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
497 #ifdef 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);
d200de50a1fc [svn] - convert filename into utf8 in debug messages.
yaz
parents: 789
diff changeset
499 g_message("f: audmad_get_song_info: %s", tmp);
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
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
503 if (input_init(&myinfo, url) == FALSE) {
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
504 #ifdef DEBUG
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
505 g_message("error initialising input");
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
506 #endif
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
507 return;
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
508 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
509
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
510 if (input_get_info(&myinfo, info.remote ? TRUE : audmad_config.fast_play_time_calc) == TRUE) {
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
511 if(myinfo.tuple->track_name)
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
512 *title = strdup(myinfo.tuple->track_name);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
513 else
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
514 *title = strdup(url);
738
6ea974a229a8 [svn] - add read/write support for TLEN frame.
yaz
parents: 676
diff changeset
515 if(myinfo.tuple->length == -1)
6ea974a229a8 [svn] - add read/write support for TLEN frame.
yaz
parents: 676
diff changeset
516 *length = mad_timer_count(myinfo.duration, MAD_UNITS_MILLISECONDS);
6ea974a229a8 [svn] - add read/write support for TLEN frame.
yaz
parents: 676
diff changeset
517 else
6ea974a229a8 [svn] - add read/write support for TLEN frame.
yaz
parents: 676
diff changeset
518 *length = myinfo.tuple->length;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
519 }
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
520 else {
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
521 *title = strdup(url);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
522 *length = -1;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
523 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
524 input_term(&myinfo);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
525 #ifdef DEBUG
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
526 g_message("e: audmad_get_song_info");
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
527 #endif /* DEBUG */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
528 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
529
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
530 static void audmad_about()
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
531 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
532 static GtkWidget *aboutbox;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
533 gchar *scratch;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
534
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
535 if (aboutbox != NULL)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
536 return;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
537
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
538 scratch = g_strdup_printf(
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
539 "Audacious MPEG Audio Plugin\n"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
540 "\n"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
541 "Compiled against libMAD version: %d.%d.%d%s\n"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
542 "\n"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
543 "Written by:\n"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
544 " William Pitcock <nenolod@sacredspiral.co.uk>\n"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
545 " Yoshiki Yazawa <yaz@cc.rim.or.jp>\n"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
546 "\n"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
547 "Portions derived from XMMS-MAD by:\n"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
548 " Sam Clegg\n"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
549 "\n"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
550 "ReplayGain support by:\n"
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
551 " Samuel Krempp",
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
552 MAD_VERSION_MAJOR, MAD_VERSION_MINOR, MAD_VERSION_PATCH,
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
553 MAD_VERSION_EXTRA);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
554
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
555 aboutbox = xmms_show_message("About MPEG Audio Plugin",
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
556 scratch,
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
557 "Ok", FALSE, NULL, NULL);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
558
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
559 g_free(scratch);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
560
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
561 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
562 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
563 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
564
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
565 /**
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
566 * 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
567 * Taken from mpg123 plugin.
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
568 */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
569 void audmad_error(char *error, ...)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
570 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
571 #ifndef NOGUI
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
572 if (!error_dialog) {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
573 va_list args;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
574 char string[256];
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
575 va_start(args, error);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
576 vsnprintf(string, 256, error, args);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
577 va_end(args);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
578 GDK_THREADS_ENTER();
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
579 error_dialog =
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
580 xmms_show_message("Error", string, "Ok", FALSE, 0, 0);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
581 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
582 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
583 &error_dialog);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
584 GDK_THREADS_LEAVE();
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
585 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
586 #endif /* !NOGUI */
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
587 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
588
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
589 extern void audmad_get_file_info(char *filename);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
590 extern void audmad_configure();
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
591
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
592
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
593 // tuple stuff
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
594 static TitleInput *audmad_get_song_tuple(char *filename)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
595 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
596 TitleInput *tuple = NULL;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
597 gchar *string = NULL;
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 struct id3_file *id3file = NULL;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
600 struct id3_tag *tag = NULL;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
601
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
602 #ifdef DEBUG
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
603 string = str_to_utf8(filename);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
604 g_message("f: mad: audmad_get_song_tuple: %s", string);
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
605 g_free(string);
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
606 string = NULL;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
607 #endif
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
608
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
609 if(info.remote && mad_timer_count(info.duration, MAD_UNITS_SECONDS) <= 0){
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
610 if(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
611 gchar *tmp = NULL;
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
612 tuple = bmp_title_input_new();
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
613 #ifdef DEBUG
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
614 g_message("info.playback->playing = %d",info.playback->playing);
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
615 #endif
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
616 tmp = vfs_get_metadata(info.infile, "track-name");
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
617 if(tmp){
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
618 tuple->track_name = str_to_utf8(tmp);
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
619 g_free(tmp);
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
620 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
621 }
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
622 tmp = vfs_get_metadata(info.infile, "stream-name");
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
623 if(tmp){
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
624 tuple->album_name = str_to_utf8(tmp);
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
625 g_free(tmp);
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
626 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
627 }
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
628 #ifdef DEBUG
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
629 g_message("audmad_get_song_tuple: track_name = %s", tuple->track_name);
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
630 g_message("audmad_get_song_tuple: stream_name = %s", tuple->album_name);
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
631 #endif
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
632 tuple->file_name = g_path_get_basename(filename);
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
633 tuple->file_path = g_path_get_dirname(filename);
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
634 tuple->file_ext = extname(filename);
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
635 tuple->length = -1;
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
636 tuple->mtime = 0; // this indicates streaming
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
637 #ifdef DEBUG
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
638 g_message("get_song_tuple: remote: tuple");
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
639 #endif
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
640 return tuple;
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
641 }
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
642 #ifdef DEBUG
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
643 g_message("get_song_tuple: remote: NULL");
613
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
644 #endif
85a70ace8c02 [svn] - press F5 on not yet played stream no longer hangs.
yaz
parents: 612
diff changeset
645 return NULL;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
646 }
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
647
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
648 tuple = bmp_title_input_new();
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
649
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
650 id3file = id3_file_open(filename, ID3_FILE_MODE_READONLY);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
651 if (id3file) {
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
652
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
653 tag = id3_file_tag(id3file);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
654 if (tag) {
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
655 tuple->performer =
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
656 input_id3_get_string(tag, ID3_FRAME_ARTIST);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
657 tuple->album_name =
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
658 input_id3_get_string(tag, ID3_FRAME_ALBUM);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
659 tuple->track_name =
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
660 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
661
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
662 // year
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
663 string = NULL;
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
664 string = input_id3_get_string(tag, ID3_FRAME_YEAR); //TDRC
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
665 if (!string)
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
666 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
667
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
668 if (string) {
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
669 tuple->year = atoi(string);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
670 g_free(string);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
671 string = NULL;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
672 }
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
673
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
674 tuple->file_name = g_path_get_basename(filename);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
675 tuple->file_path = g_path_get_dirname(filename);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
676 tuple->file_ext = extname(filename);
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
677
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
678 // length
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
679 tuple->length = -1;
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
680 string = input_id3_get_string(tag, "TLEN");
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
681 if (string) {
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
682 tuple->length = atoi(string);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
683 #ifdef DEBUG
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
684 g_message("get_song_tuple: TLEN = %d", tuple->length);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
685 #endif
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
686 g_free(string);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
687 string = NULL;
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
688 }
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
689 else {
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
690 char *dummy = NULL;
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
691 int length = 0;
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
692 audmad_get_song_info(filename, &dummy, &length);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
693 tuple->length = length;
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
694 g_free(dummy);
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
695 }
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
696
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
697 // track number
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
698 string = input_id3_get_string(tag, ID3_FRAME_TRACK);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
699 if (string) {
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
700 tuple->track_number = atoi(string);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
701 g_free(string);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
702 string = NULL;
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
703 }
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
704 // genre
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
705 tuple->genre = input_id3_get_string(tag, ID3_FRAME_GENRE);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
706 #ifdef DEBUG
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
707 g_message("genre = %s", tuple->genre);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
708 #endif
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
709 // comment
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
710 tuple->comment =
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
711 input_id3_get_string(tag, ID3_FRAME_COMMENT);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
712
611
3f7a52adfe0e [svn] merge recent changes from yaz's branch.
yaz
parents: 610
diff changeset
713 }
773
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
714 id3_file_close(id3file);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
715 }
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
716 else { // no id3tag
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
717 tuple->file_name = g_path_get_basename(filename);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
718 tuple->file_path = g_path_get_dirname(filename);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
719 tuple->file_ext = extname(filename);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
720 // length
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
721 {
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
722 char *dummy = NULL;
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
723 int length = 0;
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
724 if(tuple->length == -1) {
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
725 audmad_get_song_info(filename, &dummy, &length);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
726 tuple->length = length;
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
727 }
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
728 g_free(dummy);
22c82f3c0411 [svn] - reduce connection latency to http stream.
yaz
parents: 768
diff changeset
729 }
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
730 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
731 #ifdef DEBUG
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
732 g_message("e: mad: audmad_get_song_tuple");
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
733 #endif
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
734 return tuple;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
735 }
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
736
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
737
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
738 static gchar *fmts[] = { "mp3", "mp2", "mpg", NULL };
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
739
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
740 InputPlugin *get_iplugin_info(void)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
741 {
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
742 if (mad_plugin != NULL)
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
743 return mad_plugin;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
744
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
745 mad_plugin = g_new0(InputPlugin, 1);
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
746 mad_plugin->description = g_strdup(_("MPEG Audio Plugin"));
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
747 mad_plugin->init = audmad_init;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
748 mad_plugin->about = audmad_about;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
749 mad_plugin->configure = audmad_configure;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
750 mad_plugin->is_our_file = audmad_is_our_file;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
751 mad_plugin->play_file = audmad_play_file;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
752 mad_plugin->stop = audmad_stop;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
753 mad_plugin->pause = audmad_pause;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
754 mad_plugin->seek = audmad_seek;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
755 mad_plugin->cleanup = audmad_cleanup;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
756 mad_plugin->get_song_info = audmad_get_song_info;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
757 mad_plugin->file_info_box = audmad_get_file_info;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
758 mad_plugin->get_song_tuple = audmad_get_song_tuple;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
759 mad_plugin->is_our_file_from_vfs = audmad_is_our_fd;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
760 mad_plugin->vfs_extensions = fmts;
807
0f9c8d4d3ac4 [svn] - make use of new millisecond seek API.
yaz
parents: 802
diff changeset
761 mad_plugin->mseek = audmad_mseek;
610
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
762
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
763 return mad_plugin;
862190d39e00 [svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff changeset
764 }