Mercurial > audlegacy-plugins
annotate src/madplug/plugin.c @ 801:dd06b14a43a9 trunk
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
| author | nenolod |
|---|---|
| date | Sun, 11 Mar 2007 10:09:52 -0700 |
| parents | d200de50a1fc |
| children | 7ac48f3855b1 |
| 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 { |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
178 } |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
179 |
|
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
180 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
|
181 { |
|
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
182 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
|
183 |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
184 /* 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
|
185 * 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
|
186 */ |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
187 if ((head & 0xffe00000) != 0xffe00000) |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
188 return FALSE; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
189 |
|
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
190 /* 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
|
191 layer = (head >> 17) & 0x3; |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
192 if (!layer) |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
193 return FALSE; /* 00 = reserved */ |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
194 layer = 3 - layer; |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
195 |
|
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
196 /* 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
|
197 bitIndex = (head >> 12) & 0xf; |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
198 |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
199 /* 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
|
200 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
|
201 return FALSE; |
|
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 samplerate index bits (10-11) */ |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
204 sampleIndex = (head >> 10) & 0x3; |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
205 if (sampleIndex == 0x3) |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
206 return FALSE; |
|
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
207 |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
208 /* 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
|
209 version = (head >> 19) & 0x03; |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
210 switch (version) { |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
211 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
|
212 case 2: /* 10 = MPEG Version 2 */ |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
213 if (layer == 1) |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
214 bitRate = mp3_bitrate_table[3][bitIndex]; |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
215 else |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
216 bitRate = mp3_bitrate_table[4][bitIndex]; |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
217 break; |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
218 |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
219 case 1: /* 01 = reserved */ |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
220 return FALSE; |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
221 |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
222 case 3: /* 11 = MPEG Version 1 */ |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
223 bitRate = mp3_bitrate_table[layer][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 default: |
|
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 |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
230 /* check layer II restrictions vs. bitrate */ |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
231 if (layer == 2) { |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
232 gint chanMode = (head >> 6) & 0x3; |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
233 |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
234 if (chanMode == 0x3) { |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
235 /* single channel with bitrate > 192 */ |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
236 if (bitRate > 192) |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
237 return FALSE; |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
238 } else { |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
239 /* 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
|
240 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
|
241 return FALSE; |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
242 } |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
243 } |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
244 |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
245 /* calculate approx. frame size */ |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
246 padding = (head >> 9) & 1; |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
247 sampleRate = mp3_samplerate_table[version][sampleIndex]; |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
248 *frameSize = (144 * bitRate * 1000) / (sampleRate + padding); |
|
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 /* 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
|
251 if (((head >> 19) & 1) == 1 && |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
252 ((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
|
253 return FALSE; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
254 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
255 /* 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
|
256 if ((head & 0xffff0000) == 0xfffe0000) |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
257 return FALSE; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
258 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
259 return TRUE; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
260 } |
|
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 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
|
263 { |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
264 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
|
265 ((unsigned long) hbuf[1] << 16) | |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
266 ((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
|
267 } |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
268 |
|
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
|
269 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
|
270 { |
|
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
|
271 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
|
272 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
|
273 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
|
274 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
|
275 } |
| 612 | 276 |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
277 // audacious vfs fast version |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
278 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
|
279 { |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
280 guint32 check; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
281 gchar *ext = extname(filename); |
|
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
282 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
|
283 guchar buf[4]; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
284 guchar tmp[4096]; |
|
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
285 gint ret, i, frameSize; |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
286 |
|
613
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
287 info.remote = FALSE; |
|
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
288 |
|
768
1d3f70ac6b31
[svn] - remote metadata handling is moved into input_process_remote_metadata(). this function converts string into utf-8 if necessary (mainly for zina).
yaz
parents:
765
diff
changeset
|
289 if(audmad_is_remote(filename)) |
| 612 | 290 info.remote = TRUE; |
| 291 | |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
292 /* 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
|
293 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
|
294 if ((ext != NULL) && |
|
e6a1ba5185ba
[svn] - Tweak to check we found a file extension before using it to prevent segfault
nazca
parents:
653
diff
changeset
|
295 (!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
|
296 !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
|
297 !strcasecmp("wma", ext) ) |
| 789 | 298 ) |
| 299 return 0; | |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
300 |
| 789 | 301 if (fin == NULL) { |
| 302 g_message("fin = NULL"); | |
| 303 return 0; | |
| 304 } | |
| 788 | 305 |
| 789 | 306 if(vfs_fread(buf, 1, 4, fin) == 0) { |
| 799 | 307 gchar *tmp = g_filename_to_utf8(filename, -1, NULL, NULL, NULL); |
| 308 g_message("vfs_fread failed @1 %s", tmp); | |
| 309 g_free(tmp); | |
|
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
310 return 0; |
| 789 | 311 } |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
312 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
313 check = mp3_head_convert(buf); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
314 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
315 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
|
316 return 1; |
| 782 | 317 else if (memcmp(buf, "OggS", 4) == 0) |
| 318 return 0; | |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
319 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
|
320 { |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
321 vfs_fseek(fin, 4, SEEK_CUR); |
| 789 | 322 if(vfs_fread(buf, 1, 4, fin) == 0) { |
| 799 | 323 gchar *tmp = g_filename_to_utf8(filename, -1, NULL, NULL, NULL); |
| 324 g_message("vfs_fread failed @2 %s", tmp); | |
| 325 g_free(tmp); | |
|
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
326 return 0; |
| 789 | 327 } |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
328 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
329 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
|
330 return 1; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
331 } |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
332 |
|
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
333 // check data for frame header |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
334 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
|
335 { |
|
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
336 if((ret = vfs_fread(tmp, 1, chksize, fin)) == 0){ |
| 799 | 337 gchar *tmp = g_filename_to_utf8(filename, -1, NULL, NULL, NULL); |
| 338 g_message("vfs_fread failed @3 %s", tmp); | |
| 339 g_free(tmp); | |
|
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
340 return 0; |
| 789 | 341 } |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
342 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
|
343 { |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
344 check <<= 8; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
345 check |= tmp[i]; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
346 |
|
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
347 if (mp3_head_check(check, &frameSize)) { |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
348 /* 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
|
349 * 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
|
350 * 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
|
351 */ |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
352 if (++chkcount >= 3) return 1; |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
353 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
|
354 check = 0; |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
355 chksize = 8; |
|
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
356 } |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
357 } |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
358 |
|
801
dd06b14a43a9
[svn] - implement stricter detection rules for MP3. patch by Matti Hamalainen (ccr).
nenolod
parents:
799
diff
changeset
|
359 if (++cyc > 32) |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
360 return 0; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
361 } |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
362 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
363 return 1; |
|
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 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
366 // audacious vfs version |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
367 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
|
368 { |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
369 VFSFile *fin = NULL; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
370 gint rtn; |
|
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 fin = vfs_fopen(filename, "rb"); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
373 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
374 if (fin == NULL) |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
375 return 0; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
376 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
377 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
|
378 vfs_fclose(fin); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
379 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
380 return rtn; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
381 } |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
382 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
383 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
|
384 { |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
385 #ifdef DEBUG |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
386 g_message("f: audmad_stop"); |
| 612 | 387 #endif |
| 611 | 388 g_mutex_lock(mad_mutex); |
| 389 info.playback = playback; | |
| 390 g_mutex_unlock(mad_mutex); | |
| 391 | |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
392 if (decode_thread) { |
| 611 | 393 |
| 394 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
|
395 info.playback->playing = 0; |
| 611 | 396 g_mutex_unlock(mad_mutex); |
| 397 g_cond_signal(mad_cond); | |
| 398 | |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
399 #ifdef DEBUG |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
400 g_message("waiting for thread"); |
| 612 | 401 #endif |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
402 g_thread_join(decode_thread); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
403 #ifdef DEBUG |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
404 g_message("thread done"); |
| 612 | 405 #endif |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
406 input_term(&info); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
407 decode_thread = NULL; |
| 611 | 408 |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
409 } |
| 611 | 410 #ifdef DEBUG |
| 411 g_message("e: audmad_stop"); | |
| 612 | 412 #endif |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
413 } |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
414 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
415 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
|
416 { |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
417 gboolean rtn; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
418 gchar *url = playback->filename; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
419 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
420 #ifdef DEBUG |
| 799 | 421 { |
| 422 gchar *tmp = g_filename_to_utf8(url, -1, NULL, NULL, NULL); | |
| 423 g_message("playing %s", tmp); | |
| 424 g_free(tmp); | |
| 425 } | |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
426 #endif /* DEBUG */ |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
427 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
428 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
|
429 g_message("error initialising input"); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
430 return; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
431 } |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
432 |
|
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
|
433 // 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
|
434 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
|
435 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
436 if (rtn == FALSE) { |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
437 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
|
438 return; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
439 } |
|
613
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
440 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
|
441 info.playback = playback; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
442 info.playback->playing = 1; |
|
613
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
443 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
|
444 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
445 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
|
446 } |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
447 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
448 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
|
449 { |
| 611 | 450 g_mutex_lock(pb_mutex); |
| 451 info.playback = playback; | |
| 452 g_mutex_unlock(pb_mutex); | |
| 453 playback->output->pause(paused); | |
|
610
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 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
456 static void audmad_seek(InputPlayback *playback, int time) |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
457 { |
| 611 | 458 g_mutex_lock(pb_mutex); |
| 459 info.playback = playback; | |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
460 /* xmms gives us the desired seek time in seconds */ |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
461 info.seek = time; |
| 611 | 462 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
|
463 } |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
464 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
465 /** |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
466 * 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
|
467 * 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
|
468 */ |
| 611 | 469 static void |
| 470 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
|
471 { |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
472 struct mad_info_t myinfo; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
473 #ifdef DEBUG |
| 799 | 474 gchar *tmp = g_filename_to_utf8(url, -1, NULL, NULL, NULL); |
| 475 g_message("f: audmad_get_song_info: %s", tmp); | |
| 476 g_free(tmp); | |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
477 #endif /* DEBUG */ |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
478 |
|
613
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
479 if (input_init(&myinfo, url) == FALSE) { |
| 773 | 480 #ifdef DEBUG |
|
613
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
481 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
|
482 #endif |
|
613
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
483 return; |
|
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
484 } |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
485 |
| 611 | 486 if (input_get_info(&myinfo, info.remote ? TRUE : audmad_config.fast_play_time_calc) == TRUE) { |
| 487 if(myinfo.tuple->track_name) | |
| 488 *title = strdup(myinfo.tuple->track_name); | |
| 489 else | |
| 490 *title = strdup(url); | |
| 738 | 491 if(myinfo.tuple->length == -1) |
| 492 *length = mad_timer_count(myinfo.duration, MAD_UNITS_MILLISECONDS); | |
| 493 else | |
| 494 *length = myinfo.tuple->length; | |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
495 } |
| 611 | 496 else { |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
497 *title = strdup(url); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
498 *length = -1; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
499 } |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
500 input_term(&myinfo); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
501 #ifdef DEBUG |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
502 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
|
503 #endif /* DEBUG */ |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
504 } |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
505 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
506 static void audmad_about() |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
507 { |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
508 static GtkWidget *aboutbox; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
509 gchar *scratch; |
|
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 if (aboutbox != NULL) |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
512 return; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
513 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
514 scratch = g_strdup_printf( |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
515 "Audacious MPEG Audio Plugin\n" |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
516 "\n" |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
517 "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
|
518 "\n" |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
519 "Written by:\n" |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
520 " 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
|
521 " 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
|
522 "\n" |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
523 "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
|
524 " Sam Clegg\n" |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
525 "\n" |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
526 "ReplayGain support by:\n" |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
527 " Samuel Krempp", |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
528 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
|
529 MAD_VERSION_EXTRA); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
530 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
531 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
|
532 scratch, |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
533 "Ok", FALSE, NULL, NULL); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
534 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
535 g_free(scratch); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
536 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
537 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
|
538 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
|
539 } |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
540 |
|
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 * 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
|
543 * Taken from mpg123 plugin. |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
544 */ |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
545 void audmad_error(char *error, ...) |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
546 { |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
547 #ifndef NOGUI |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
548 if (!error_dialog) { |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
549 va_list args; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
550 char string[256]; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
551 va_start(args, error); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
552 vsnprintf(string, 256, error, args); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
553 va_end(args); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
554 GDK_THREADS_ENTER(); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
555 error_dialog = |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
556 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
|
557 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
|
558 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
|
559 &error_dialog); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
560 GDK_THREADS_LEAVE(); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
561 } |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
562 #endif /* !NOGUI */ |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
563 } |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
564 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
565 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
|
566 extern void audmad_configure(); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
567 |
| 611 | 568 |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
569 // tuple stuff |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
570 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
|
571 { |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
572 TitleInput *tuple = NULL; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
573 gchar *string = NULL; |
|
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 struct id3_file *id3file = NULL; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
576 struct id3_tag *tag = NULL; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
577 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
578 #ifdef DEBUG |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
579 string = str_to_utf8(filename); |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
580 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
|
581 g_free(string); |
|
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
582 string = NULL; |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
583 #endif |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
584 |
|
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
|
585 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
|
586 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
|
587 gchar *tmp = NULL; |
|
613
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
588 tuple = bmp_title_input_new(); |
|
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
589 #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
|
590 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
|
591 #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
|
592 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
|
593 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
|
594 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
|
595 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
|
596 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
|
597 } |
|
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 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
|
599 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
|
600 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
|
601 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
|
602 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
|
603 } |
| 611 | 604 #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
|
605 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
|
606 g_message("audmad_get_song_tuple: stream_name = %s", tuple->album_name); |
| 611 | 607 #endif |
|
613
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
608 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
|
609 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
|
610 tuple->file_ext = extname(filename); |
|
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
611 tuple->length = -1; |
|
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
612 tuple->mtime = 0; // this indicates streaming |
|
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
613 #ifdef DEBUG |
| 773 | 614 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
|
615 #endif |
|
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
616 return tuple; |
|
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
617 } |
|
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
618 #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
|
619 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
|
620 #endif |
|
85a70ace8c02
[svn] - press F5 on not yet played stream no longer hangs.
yaz
parents:
612
diff
changeset
|
621 return NULL; |
| 611 | 622 } |
| 623 | |
| 773 | 624 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
|
625 |
| 773 | 626 id3file = id3_file_open(filename, ID3_FILE_MODE_READONLY); |
| 627 if (id3file) { | |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
628 |
| 773 | 629 tag = id3_file_tag(id3file); |
| 630 if (tag) { | |
| 631 tuple->performer = | |
| 632 input_id3_get_string(tag, ID3_FRAME_ARTIST); | |
| 633 tuple->album_name = | |
| 634 input_id3_get_string(tag, ID3_FRAME_ALBUM); | |
| 635 tuple->track_name = | |
| 636 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
|
637 |
| 773 | 638 // year |
| 639 string = NULL; | |
| 640 string = input_id3_get_string(tag, ID3_FRAME_YEAR); //TDRC | |
| 641 if (!string) | |
| 642 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
|
643 |
| 773 | 644 if (string) { |
| 645 tuple->year = atoi(string); | |
| 646 g_free(string); | |
| 647 string = NULL; | |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
648 } |
| 773 | 649 |
| 611 | 650 tuple->file_name = g_path_get_basename(filename); |
| 651 tuple->file_path = g_path_get_dirname(filename); | |
| 652 tuple->file_ext = extname(filename); | |
| 773 | 653 |
| 611 | 654 // length |
| 773 | 655 tuple->length = -1; |
| 656 string = input_id3_get_string(tag, "TLEN"); | |
| 657 if (string) { | |
| 658 tuple->length = atoi(string); | |
| 659 #ifdef DEBUG | |
| 660 g_message("get_song_tuple: TLEN = %d", tuple->length); | |
| 661 #endif | |
| 662 g_free(string); | |
| 663 string = NULL; | |
| 664 } | |
| 665 else { | |
| 611 | 666 char *dummy = NULL; |
| 667 int length = 0; | |
| 773 | 668 audmad_get_song_info(filename, &dummy, &length); |
| 669 tuple->length = length; | |
| 611 | 670 g_free(dummy); |
| 671 } | |
| 773 | 672 |
| 673 // track number | |
| 674 string = input_id3_get_string(tag, ID3_FRAME_TRACK); | |
| 675 if (string) { | |
| 676 tuple->track_number = atoi(string); | |
| 677 g_free(string); | |
| 678 string = NULL; | |
| 679 } | |
| 680 // genre | |
| 681 tuple->genre = input_id3_get_string(tag, ID3_FRAME_GENRE); | |
| 682 #ifdef DEBUG | |
| 683 g_message("genre = %s", tuple->genre); | |
| 684 #endif | |
| 685 // comment | |
| 686 tuple->comment = | |
| 687 input_id3_get_string(tag, ID3_FRAME_COMMENT); | |
| 688 | |
| 611 | 689 } |
| 773 | 690 id3_file_close(id3file); |
| 691 } | |
| 692 else { // no id3tag | |
| 693 tuple->file_name = g_path_get_basename(filename); | |
| 694 tuple->file_path = g_path_get_dirname(filename); | |
| 695 tuple->file_ext = extname(filename); | |
| 696 // length | |
| 697 { | |
| 698 char *dummy = NULL; | |
| 699 int length = 0; | |
| 700 if(tuple->length == -1) { | |
| 701 audmad_get_song_info(filename, &dummy, &length); | |
| 702 tuple->length = length; | |
| 703 } | |
| 704 g_free(dummy); | |
| 705 } | |
|
610
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
706 } |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
707 #ifdef DEBUG |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
708 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
|
709 #endif |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
710 return tuple; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
711 } |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
712 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
713 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
714 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
|
715 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
716 InputPlugin *get_iplugin_info(void) |
|
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 if (mad_plugin != NULL) |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
719 return mad_plugin; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
720 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
721 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
|
722 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
|
723 mad_plugin->init = audmad_init; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
724 mad_plugin->about = audmad_about; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
725 mad_plugin->configure = audmad_configure; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
726 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
|
727 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
|
728 mad_plugin->stop = audmad_stop; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
729 mad_plugin->pause = audmad_pause; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
730 mad_plugin->seek = audmad_seek; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
731 mad_plugin->cleanup = audmad_cleanup; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
732 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
|
733 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
|
734 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
|
735 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
|
736 mad_plugin->vfs_extensions = fmts; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
737 |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
738 return mad_plugin; |
|
862190d39e00
[svn] - add madplug. It is not yet hooked up, I'll do that later.
nenolod
parents:
diff
changeset
|
739 } |
