Mercurial > audlegacy-plugins
annotate src/madplug/plugin.c @ 827:81749781b75f trunk
[svn] - remove some more stuff
author | nenolod |
---|---|
date | Mon, 12 Mar 2007 14:49:42 -0700 |
parents | 0f9c8d4d3ac4 |
children | 44a922a4a591 |
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> |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
35 |
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 * Global variables |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
38 */ |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
39 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
|
40 InputPlugin *mad_plugin = NULL; |
611 | 41 GMutex *mad_mutex; |
42 GMutex *pb_mutex; | |
43 GCond *mad_cond; | |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
44 |
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 * static variables |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
47 */ |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
48 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
|
49 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
|
50 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
51 #ifndef NOGUI |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
52 static GtkWidget *error_dialog = 0; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
53 #endif |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
54 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
55 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
|
56 |
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
57 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
|
58 { 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
|
59 { 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
|
60 { 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
|
61 { 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
|
62 { 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
|
63 }; |
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 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
|
66 { 11025, 12000, 8000, -1 }, /* MPEG2.5 */ |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
67 { -1, -1, -1, -1 }, /* Reserved */ |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
68 { 22050, 24000, 16000, -1 }, /* MPEG2 */ |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
69 { 44100, 48000, 32000, -1 } /* MPEG1 */ |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
70 }; |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
71 |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
72 /* |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
73 * Function extname (filename) |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
74 * |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
75 * 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
|
76 * filename has no extension. |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
77 * |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
78 */ |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
79 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
|
80 { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
81 gchar *ext = strrchr(filename, '.'); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
82 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
83 if (ext != NULL) |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
84 ++ext; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
85 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
86 return ext; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
87 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
88 |
611 | 89 |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
90 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
|
91 { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
92 /* 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
|
93 (RG default gain, etc..) |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
94 */ |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
95 const gchar *text; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
96 gdouble x; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
97 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
98 text = config->pregain_db; |
653
638b290641f3
[svn] - madplug: check that text is not null before using g_strtod
giacomo
parents:
651
diff
changeset
|
99 if ( text != NULL ) |
638b290641f3
[svn] - madplug: check that text is not null before using g_strtod
giacomo
parents:
651
diff
changeset
|
100 x = g_strtod(text, NULL); |
638b290641f3
[svn] - madplug: check that text is not null before using g_strtod
giacomo
parents:
651
diff
changeset
|
101 else |
638b290641f3
[svn] - madplug: check that text is not null before using g_strtod
giacomo
parents:
651
diff
changeset
|
102 x = 0; |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
103 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
|
104 #ifdef DEBUG |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
105 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
|
106 #endif |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
107 text = config->replaygain.default_db; |
653
638b290641f3
[svn] - madplug: check that text is not null before using g_strtod
giacomo
parents:
651
diff
changeset
|
108 if ( text != NULL ) |
638b290641f3
[svn] - madplug: check that text is not null before using g_strtod
giacomo
parents:
651
diff
changeset
|
109 x = g_strtod(text, NULL); |
638b290641f3
[svn] - madplug: check that text is not null before using g_strtod
giacomo
parents:
651
diff
changeset
|
110 else |
638b290641f3
[svn] - madplug: check that text is not null before using g_strtod
giacomo
parents:
651
diff
changeset
|
111 x = 0; |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
112 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
|
113 #ifdef DEBUG |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
114 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
|
115 config->replaygain.default_scale); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
116 #endif |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
117 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
118 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
119 static void audmad_init() |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
120 { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
121 ConfigDb *db = NULL; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
122 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
123 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
|
124 audmad_config.use_xing = TRUE; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
125 audmad_config.dither = TRUE; |
611 | 126 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
|
127 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
|
128 audmad_config.replaygain.enable = TRUE; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
129 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
|
130 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
|
131 audmad_config.show_avg_vbr_bitrate = TRUE; |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
132 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
133 db = bmp_cfg_db_open(); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
134 if (db) { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
135 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
|
136 &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
|
137 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
|
138 &audmad_config.use_xing); |
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", "dither", &audmad_config.dither); |
611 | 140 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
|
141 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
|
142 &audmad_config.hard_limit); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
143 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
|
144 &audmad_config.pregain_db); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
145 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
|
146 &audmad_config.replaygain.enable); |
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.track_mode", |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
148 &audmad_config.replaygain.track_mode); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
149 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
|
150 &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
|
151 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
|
152 &audmad_config.title_override); |
a7a28782c1b0
[svn] - revise input_id3_get_string() to take encoding of field into account.
yaz
parents:
613
diff
changeset
|
153 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
|
154 &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
|
155 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
|
156 &audmad_config.show_avg_vbr_bitrate); |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
157 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
158 bmp_cfg_db_close(db); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
159 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
160 |
611 | 161 mad_mutex = g_mutex_new(); |
162 pb_mutex = g_mutex_new(); | |
163 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
|
164 audmad_config_compute(&audmad_config); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
165 |
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
|
166 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
|
167 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
|
168 |
b9167008fc3f
[svn] - strings in audmad_config should be freed before update. thus constant initializer has been replaced with g_strdup().
yaz
parents:
650
diff
changeset
|
169 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
|
170 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
|
171 |
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 if (!audmad_config.id3_format) |
650
8b9ef7a32e47
[svn] - make sure audmad_config.id3_format is not NULL. closes #795.
nenolod
parents:
646
diff
changeset
|
173 audmad_config.id3_format = g_strdup(""); |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
174 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
175 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
176 static void audmad_cleanup() |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
177 { |
802 | 178 g_free(audmad_config.pregain_db); |
179 g_free(audmad_config.replaygain.default_db); | |
180 g_free(audmad_config.id3_format); | |
181 | |
182 g_cond_free(mad_cond); | |
183 g_mutex_free(mad_mutex); | |
184 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
|
185 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
186 |
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
187 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
|
188 { |
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
189 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
|
190 |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
191 /* 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
|
192 * 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
|
193 */ |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
194 if ((head & 0xffe00000) != 0xffe00000) |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
195 return FALSE; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
196 |
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
197 /* 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
|
198 layer = (head >> 17) & 0x3; |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
199 if (!layer) |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
200 return FALSE; /* 00 = reserved */ |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
201 layer = 3 - layer; |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
202 |
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
203 /* 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
|
204 bitIndex = (head >> 12) & 0xf; |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
205 |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
206 /* 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
|
207 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
|
208 return FALSE; |
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 samplerate index bits (10-11) */ |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
211 sampleIndex = (head >> 10) & 0x3; |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
212 if (sampleIndex == 0x3) |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
213 return FALSE; |
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
214 |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
215 /* 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
|
216 version = (head >> 19) & 0x03; |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
217 switch (version) { |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
218 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
|
219 case 2: /* 10 = MPEG Version 2 */ |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
220 if (layer == 1) |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
221 bitRate = mp3_bitrate_table[3][bitIndex]; |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
222 else |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
223 bitRate = mp3_bitrate_table[4][bitIndex]; |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
224 break; |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
225 |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
226 case 1: /* 01 = reserved */ |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
227 return FALSE; |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
228 |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
229 case 3: /* 11 = MPEG Version 1 */ |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
230 bitRate = mp3_bitrate_table[layer][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 default: |
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 |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
237 /* check layer II restrictions vs. bitrate */ |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
238 if (layer == 2) { |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
239 gint chanMode = (head >> 6) & 0x3; |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
240 |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
241 if (chanMode == 0x3) { |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
242 /* single channel with bitrate > 192 */ |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
243 if (bitRate > 192) |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
244 return FALSE; |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
245 } else { |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
246 /* any other mode with bitrates 32-56 and 80 */ |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
247 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
|
248 return FALSE; |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
249 } |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
250 } |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
251 |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
252 /* calculate approx. frame size */ |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
253 padding = (head >> 9) & 1; |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
254 sampleRate = mp3_samplerate_table[version][sampleIndex]; |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
255 *frameSize = (144 * bitRate * 1000) / (sampleRate + padding); |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
256 |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
257 /* 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
|
258 if (((head >> 19) & 1) == 1 && |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
259 ((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
|
260 return FALSE; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
261 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
262 /* 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
|
263 if ((head & 0xffff0000) == 0xfffe0000) |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
264 return FALSE; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
265 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
266 return TRUE; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
267 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
268 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
269 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
|
270 { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
271 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
|
272 ((unsigned long) hbuf[1] << 16) | |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
273 ((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
|
274 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
275 |
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
|
276 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
|
277 { |
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
|
278 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
|
279 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
|
280 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
|
281 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
|
282 } |
612 | 283 |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
284 // audacious vfs fast version |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
285 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
|
286 { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
287 guint32 check; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
288 gchar *ext = extname(filename); |
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
289 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
|
290 guchar buf[4]; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
291 guchar tmp[4096]; |
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
292 gint ret, i, frameSize; |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
293 |
613
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
294 info.remote = FALSE; |
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
295 |
768
1d3f70ac6b31
[svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents:
765
diff
changeset
|
296 if(audmad_is_remote(filename)) |
612 | 297 info.remote = TRUE; |
298 | |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
299 /* 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
|
300 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
|
301 if ((ext != NULL) && |
e6a1ba5185ba
[svn] - Tweak to check we found a file extension before using it to prevent segfault
nazca
parents:
653
diff
changeset
|
302 (!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
|
303 !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
|
304 !strcasecmp("wma", ext) ) |
789 | 305 ) |
306 return 0; | |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
307 |
789 | 308 if (fin == NULL) { |
309 g_message("fin = NULL"); | |
310 return 0; | |
311 } | |
788 | 312 |
789 | 313 if(vfs_fread(buf, 1, 4, fin) == 0) { |
799 | 314 gchar *tmp = g_filename_to_utf8(filename, -1, NULL, NULL, NULL); |
315 g_message("vfs_fread failed @1 %s", tmp); | |
316 g_free(tmp); | |
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
317 return 0; |
789 | 318 } |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
319 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
320 check = mp3_head_convert(buf); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
321 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
322 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
|
323 return 1; |
782 | 324 else if (memcmp(buf, "OggS", 4) == 0) |
325 return 0; | |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
326 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
|
327 { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
328 vfs_fseek(fin, 4, SEEK_CUR); |
789 | 329 if(vfs_fread(buf, 1, 4, fin) == 0) { |
799 | 330 gchar *tmp = g_filename_to_utf8(filename, -1, NULL, NULL, NULL); |
331 g_message("vfs_fread failed @2 %s", tmp); | |
332 g_free(tmp); | |
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
333 return 0; |
789 | 334 } |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
335 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
336 if (memcmp(buf, "RMP3", 4) == 0) |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
337 return 1; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
338 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
339 |
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
340 // check data for frame header |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
341 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
|
342 { |
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
343 if((ret = vfs_fread(tmp, 1, chksize, fin)) == 0){ |
799 | 344 gchar *tmp = g_filename_to_utf8(filename, -1, NULL, NULL, NULL); |
345 g_message("vfs_fread failed @3 %s", tmp); | |
346 g_free(tmp); | |
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
347 return 0; |
789 | 348 } |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
349 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
|
350 { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
351 check <<= 8; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
352 check |= tmp[i]; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
353 |
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
354 if (mp3_head_check(check, &frameSize)) { |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
355 /* 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
|
356 * 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
|
357 * 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
|
358 */ |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
359 if (++chkcount >= 3) return 1; |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
360 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
|
361 check = 0; |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
362 chksize = 8; |
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
363 } |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
364 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
365 |
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
366 if (++cyc > 32) |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
367 return 0; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
368 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
369 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
370 return 1; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
371 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
372 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
373 // audacious vfs version |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
374 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
|
375 { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
376 VFSFile *fin = NULL; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
377 gint rtn; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
378 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
379 fin = vfs_fopen(filename, "rb"); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
380 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
381 if (fin == NULL) |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
382 return 0; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
383 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
384 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
|
385 vfs_fclose(fin); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
386 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
387 return rtn; |
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 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
390 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
|
391 { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
392 #ifdef DEBUG |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
393 g_message("f: audmad_stop"); |
612 | 394 #endif |
611 | 395 g_mutex_lock(mad_mutex); |
396 info.playback = playback; | |
397 g_mutex_unlock(mad_mutex); | |
398 | |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
399 if (decode_thread) { |
611 | 400 |
401 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
|
402 info.playback->playing = 0; |
611 | 403 g_mutex_unlock(mad_mutex); |
404 g_cond_signal(mad_cond); | |
405 | |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
406 #ifdef DEBUG |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
407 g_message("waiting for thread"); |
612 | 408 #endif |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
409 g_thread_join(decode_thread); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
410 #ifdef DEBUG |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
411 g_message("thread done"); |
612 | 412 #endif |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
413 input_term(&info); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
414 decode_thread = NULL; |
611 | 415 |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
416 } |
611 | 417 #ifdef DEBUG |
418 g_message("e: audmad_stop"); | |
612 | 419 #endif |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
420 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
421 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
422 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
|
423 { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
424 gboolean rtn; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
425 gchar *url = playback->filename; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
426 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
427 #ifdef DEBUG |
799 | 428 { |
429 gchar *tmp = g_filename_to_utf8(url, -1, NULL, NULL, NULL); | |
430 g_message("playing %s", tmp); | |
431 g_free(tmp); | |
432 } | |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
433 #endif /* DEBUG */ |
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 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
|
436 g_message("error initialising input"); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
437 return; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
438 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
439 |
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
|
440 // 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
|
441 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
|
442 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
443 if (rtn == FALSE) { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
444 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
|
445 return; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
446 } |
613
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
447 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
|
448 info.playback = playback; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
449 info.playback->playing = 1; |
613
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
450 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
|
451 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
452 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
|
453 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
454 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
455 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
|
456 { |
611 | 457 g_mutex_lock(pb_mutex); |
458 info.playback = playback; | |
459 g_mutex_unlock(pb_mutex); | |
460 playback->output->pause(paused); | |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
461 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
462 |
807 | 463 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
|
464 { |
611 | 465 g_mutex_lock(pb_mutex); |
466 info.playback = playback; | |
807 | 467 info.seek = millisecond; |
611 | 468 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
|
469 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
470 |
807 | 471 static void audmad_seek(InputPlayback *playback, gint time) |
472 { | |
473 audmad_mseek(playback, time * 1000); | |
474 } | |
475 | |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
476 /** |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
477 * 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
|
478 * 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
|
479 */ |
611 | 480 static void |
481 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
|
482 { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
483 struct mad_info_t myinfo; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
484 #ifdef DEBUG |
799 | 485 gchar *tmp = g_filename_to_utf8(url, -1, NULL, NULL, NULL); |
486 g_message("f: audmad_get_song_info: %s", tmp); | |
487 g_free(tmp); | |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
488 #endif /* DEBUG */ |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
489 |
613
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
490 if (input_init(&myinfo, url) == FALSE) { |
773 | 491 #ifdef DEBUG |
613
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
492 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
|
493 #endif |
613
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
494 return; |
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
495 } |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
496 |
611 | 497 if (input_get_info(&myinfo, info.remote ? TRUE : audmad_config.fast_play_time_calc) == TRUE) { |
498 if(myinfo.tuple->track_name) | |
499 *title = strdup(myinfo.tuple->track_name); | |
500 else | |
501 *title = strdup(url); | |
738 | 502 if(myinfo.tuple->length == -1) |
503 *length = mad_timer_count(myinfo.duration, MAD_UNITS_MILLISECONDS); | |
504 else | |
505 *length = myinfo.tuple->length; | |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
506 } |
611 | 507 else { |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
508 *title = strdup(url); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
509 *length = -1; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
510 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
511 input_term(&myinfo); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
512 #ifdef DEBUG |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
513 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
|
514 #endif /* DEBUG */ |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
515 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
516 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
517 static void audmad_about() |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
518 { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
519 static GtkWidget *aboutbox; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
520 gchar *scratch; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
521 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
522 if (aboutbox != NULL) |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
523 return; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
524 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
525 scratch = g_strdup_printf( |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
526 "Audacious MPEG Audio Plugin\n" |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
527 "\n" |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
528 "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
|
529 "\n" |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
530 "Written by:\n" |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
531 " 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
|
532 " 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
|
533 "\n" |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
534 "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
|
535 " Sam Clegg\n" |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
536 "\n" |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
537 "ReplayGain support by:\n" |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
538 " Samuel Krempp", |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
539 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
|
540 MAD_VERSION_EXTRA); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
541 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
542 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
|
543 scratch, |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
544 "Ok", FALSE, NULL, NULL); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
545 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
546 g_free(scratch); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
547 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
548 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
|
549 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
|
550 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
551 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
552 /** |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
553 * 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
|
554 * Taken from mpg123 plugin. |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
555 */ |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
556 void audmad_error(char *error, ...) |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
557 { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
558 #ifndef NOGUI |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
559 if (!error_dialog) { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
560 va_list args; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
561 char string[256]; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
562 va_start(args, error); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
563 vsnprintf(string, 256, error, args); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
564 va_end(args); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
565 GDK_THREADS_ENTER(); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
566 error_dialog = |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
567 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
|
568 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
|
569 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
|
570 &error_dialog); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
571 GDK_THREADS_LEAVE(); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
572 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
573 #endif /* !NOGUI */ |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
574 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
575 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
576 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
|
577 extern void audmad_configure(); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
578 |
611 | 579 |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
580 // tuple stuff |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
581 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
|
582 { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
583 TitleInput *tuple = NULL; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
584 gchar *string = NULL; |
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 struct id3_file *id3file = NULL; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
587 struct id3_tag *tag = NULL; |
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 #ifdef DEBUG |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
590 string = str_to_utf8(filename); |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
591 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
|
592 g_free(string); |
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
593 string = NULL; |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
594 #endif |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
595 |
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
|
596 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
|
597 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
|
598 gchar *tmp = NULL; |
613
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
599 tuple = bmp_title_input_new(); |
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
600 #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
|
601 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
|
602 #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
|
603 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
|
604 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
|
605 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
|
606 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
|
607 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
|
608 } |
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 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
|
610 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
|
611 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
|
612 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
|
613 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
|
614 } |
611 | 615 #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
|
616 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
|
617 g_message("audmad_get_song_tuple: stream_name = %s", tuple->album_name); |
611 | 618 #endif |
613
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
619 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
|
620 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
|
621 tuple->file_ext = extname(filename); |
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
622 tuple->length = -1; |
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
623 tuple->mtime = 0; // this indicates streaming |
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
624 #ifdef DEBUG |
773 | 625 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
|
626 #endif |
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
627 return tuple; |
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
628 } |
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
629 #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
|
630 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
|
631 #endif |
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
632 return NULL; |
611 | 633 } |
634 | |
773 | 635 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
|
636 |
773 | 637 id3file = id3_file_open(filename, ID3_FILE_MODE_READONLY); |
638 if (id3file) { | |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
639 |
773 | 640 tag = id3_file_tag(id3file); |
641 if (tag) { | |
642 tuple->performer = | |
643 input_id3_get_string(tag, ID3_FRAME_ARTIST); | |
644 tuple->album_name = | |
645 input_id3_get_string(tag, ID3_FRAME_ALBUM); | |
646 tuple->track_name = | |
647 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
|
648 |
773 | 649 // year |
650 string = NULL; | |
651 string = input_id3_get_string(tag, ID3_FRAME_YEAR); //TDRC | |
652 if (!string) | |
653 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
|
654 |
773 | 655 if (string) { |
656 tuple->year = atoi(string); | |
657 g_free(string); | |
658 string = NULL; | |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
659 } |
773 | 660 |
611 | 661 tuple->file_name = g_path_get_basename(filename); |
662 tuple->file_path = g_path_get_dirname(filename); | |
663 tuple->file_ext = extname(filename); | |
773 | 664 |
611 | 665 // length |
773 | 666 tuple->length = -1; |
667 string = input_id3_get_string(tag, "TLEN"); | |
668 if (string) { | |
669 tuple->length = atoi(string); | |
670 #ifdef DEBUG | |
671 g_message("get_song_tuple: TLEN = %d", tuple->length); | |
672 #endif | |
673 g_free(string); | |
674 string = NULL; | |
675 } | |
676 else { | |
611 | 677 char *dummy = NULL; |
678 int length = 0; | |
773 | 679 audmad_get_song_info(filename, &dummy, &length); |
680 tuple->length = length; | |
611 | 681 g_free(dummy); |
682 } | |
773 | 683 |
684 // track number | |
685 string = input_id3_get_string(tag, ID3_FRAME_TRACK); | |
686 if (string) { | |
687 tuple->track_number = atoi(string); | |
688 g_free(string); | |
689 string = NULL; | |
690 } | |
691 // genre | |
692 tuple->genre = input_id3_get_string(tag, ID3_FRAME_GENRE); | |
693 #ifdef DEBUG | |
694 g_message("genre = %s", tuple->genre); | |
695 #endif | |
696 // comment | |
697 tuple->comment = | |
698 input_id3_get_string(tag, ID3_FRAME_COMMENT); | |
699 | |
611 | 700 } |
773 | 701 id3_file_close(id3file); |
702 } | |
703 else { // no id3tag | |
704 tuple->file_name = g_path_get_basename(filename); | |
705 tuple->file_path = g_path_get_dirname(filename); | |
706 tuple->file_ext = extname(filename); | |
707 // length | |
708 { | |
709 char *dummy = NULL; | |
710 int length = 0; | |
711 if(tuple->length == -1) { | |
712 audmad_get_song_info(filename, &dummy, &length); | |
713 tuple->length = length; | |
714 } | |
715 g_free(dummy); | |
716 } | |
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
717 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
718 #ifdef DEBUG |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
719 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
|
720 #endif |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
721 return tuple; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
722 } |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
723 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
724 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
725 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
|
726 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
727 InputPlugin *get_iplugin_info(void) |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
728 { |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
729 if (mad_plugin != NULL) |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
730 return mad_plugin; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
731 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
732 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
|
733 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
|
734 mad_plugin->init = audmad_init; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
735 mad_plugin->about = audmad_about; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
736 mad_plugin->configure = audmad_configure; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
737 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
|
738 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
|
739 mad_plugin->stop = audmad_stop; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
740 mad_plugin->pause = audmad_pause; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
741 mad_plugin->seek = audmad_seek; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
742 mad_plugin->cleanup = audmad_cleanup; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
743 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
|
744 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
|
745 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
|
746 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
|
747 mad_plugin->vfs_extensions = fmts; |
807 | 748 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
|
749 |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
750 return mad_plugin; |
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
751 } |