annotate Plugins/Input/mpg123/mpg123.c @ 1090:09eb2c83097a trunk

[svn] Psychoaccoustics support (to disable, temporarily add -UPSYCHO to your CFLAGS.): This commit brings psychoaccoustics support (as used in mp3surround decoders) to libmpgdec. For example, we can now almost fully compensate for lack of bandwidth in ISO compliant MP3 encodings. In addition, further inaccuracies with pitch and the lack of reverb feeling that some MP3s have are detected and automatically compensated for.
author nenolod
date Sat, 20 May 2006 20:36:10 -0700
parents 592ef16386aa
children 9b4e9be457f0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1 #include "mpg123.h"
354
e2775c9b8b13 [svn] very rudementary http stream detection support for mpg123-clone.
nenolod
parents: 353
diff changeset
2 #include "common.h"
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
3
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
4 #include <glib.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
5 #include <glib/gi18n.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
6 #include <gtk/gtk.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
7 #include <stdlib.h>
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
8 #include <string.h>
354
e2775c9b8b13 [svn] very rudementary http stream detection support for mpg123-clone.
nenolod
parents: 353
diff changeset
9 #include <unistd.h>
e2775c9b8b13 [svn] very rudementary http stream detection support for mpg123-clone.
nenolod
parents: 353
diff changeset
10
e2775c9b8b13 [svn] very rudementary http stream detection support for mpg123-clone.
nenolod
parents: 353
diff changeset
11 #include <fcntl.h>
e2775c9b8b13 [svn] very rudementary http stream detection support for mpg123-clone.
nenolod
parents: 353
diff changeset
12 #include <unistd.h>
e2775c9b8b13 [svn] very rudementary http stream detection support for mpg123-clone.
nenolod
parents: 353
diff changeset
13 #include <errno.h>
e2775c9b8b13 [svn] very rudementary http stream detection support for mpg123-clone.
nenolod
parents: 353
diff changeset
14 #include <sys/types.h>
e2775c9b8b13 [svn] very rudementary http stream detection support for mpg123-clone.
nenolod
parents: 353
diff changeset
15 #include <sys/socket.h>
e2775c9b8b13 [svn] very rudementary http stream detection support for mpg123-clone.
nenolod
parents: 353
diff changeset
16 #include <sys/time.h>
e2775c9b8b13 [svn] very rudementary http stream detection support for mpg123-clone.
nenolod
parents: 353
diff changeset
17 #include <netinet/in.h>
e2775c9b8b13 [svn] very rudementary http stream detection support for mpg123-clone.
nenolod
parents: 353
diff changeset
18 #include <arpa/inet.h>
e2775c9b8b13 [svn] very rudementary http stream detection support for mpg123-clone.
nenolod
parents: 353
diff changeset
19 #include <netdb.h>
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
20
957
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
21 #include "libaudacious/util.h"
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
22 #include "libaudacious/configdb.h"
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
23 #include "libaudacious/vfs.h"
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
24 #include "libaudacious/titlestring.h"
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
25 #include "audacious/util.h"
957
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
26 #include <tag_c.h>
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
27
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
28 static const long outscale = 32768;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
29
354
e2775c9b8b13 [svn] very rudementary http stream detection support for mpg123-clone.
nenolod
parents: 353
diff changeset
30 #define BUFSIZE_X 2048
e2775c9b8b13 [svn] very rudementary http stream detection support for mpg123-clone.
nenolod
parents: 353
diff changeset
31
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
32 static struct frame fr, temp_fr;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
33
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
34 PlayerInfo *mpg123_info = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
35 static GThread *decode_thread;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
36
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
37 static gboolean audio_error = FALSE, output_opened = FALSE, dopause = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
38 gint mpg123_bitrate, mpg123_frequency, mpg123_length, mpg123_layer,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
39 mpg123_lsf;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
40 gchar *mpg123_title = NULL, *mpg123_filename = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
41 static int disp_bitrate, skip_frames = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
42 static int cpu_fflags, cpu_efflags;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
43 gboolean mpg123_stereo, mpg123_mpeg25;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
44 int mpg123_mode;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
45
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
46 gchar **mpg123_id3_encoding_list = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
47
957
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
48 static TagLib_File *taglib_file;
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
49 static TagLib_Tag *taglib_tag;
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
50 static const TagLib_AudioProperties *taglib_ap;
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
51
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
52 const char *mpg123_id3_genres[GENRE_MAX] = {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
53 N_("Blues"), N_("Classic Rock"), N_("Country"), N_("Dance"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
54 N_("Disco"), N_("Funk"), N_("Grunge"), N_("Hip-Hop"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
55 N_("Jazz"), N_("Metal"), N_("New Age"), N_("Oldies"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
56 N_("Other"), N_("Pop"), N_("R&B"), N_("Rap"), N_("Reggae"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
57 N_("Rock"), N_("Techno"), N_("Industrial"), N_("Alternative"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
58 N_("Ska"), N_("Death Metal"), N_("Pranks"), N_("Soundtrack"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
59 N_("Euro-Techno"), N_("Ambient"), N_("Trip-Hop"), N_("Vocal"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
60 N_("Jazz+Funk"), N_("Fusion"), N_("Trance"), N_("Classical"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
61 N_("Instrumental"), N_("Acid"), N_("House"), N_("Game"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
62 N_("Sound Clip"), N_("Gospel"), N_("Noise"), N_("AlternRock"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
63 N_("Bass"), N_("Soul"), N_("Punk"), N_("Space"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
64 N_("Meditative"), N_("Instrumental Pop"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
65 N_("Instrumental Rock"), N_("Ethnic"), N_("Gothic"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
66 N_("Darkwave"), N_("Techno-Industrial"), N_("Electronic"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
67 N_("Pop-Folk"), N_("Eurodance"), N_("Dream"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
68 N_("Southern Rock"), N_("Comedy"), N_("Cult"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
69 N_("Gangsta Rap"), N_("Top 40"), N_("Christian Rap"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
70 N_("Pop/Funk"), N_("Jungle"), N_("Native American"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
71 N_("Cabaret"), N_("New Wave"), N_("Psychedelic"), N_("Rave"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
72 N_("Showtunes"), N_("Trailer"), N_("Lo-Fi"), N_("Tribal"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
73 N_("Acid Punk"), N_("Acid Jazz"), N_("Polka"), N_("Retro"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
74 N_("Musical"), N_("Rock & Roll"), N_("Hard Rock"), N_("Folk"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
75 N_("Folk/Rock"), N_("National Folk"), N_("Swing"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
76 N_("Fast-Fusion"), N_("Bebob"), N_("Latin"), N_("Revival"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
77 N_("Celtic"), N_("Bluegrass"), N_("Avantgarde"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
78 N_("Gothic Rock"), N_("Progressive Rock"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
79 N_("Psychedelic Rock"), N_("Symphonic Rock"), N_("Slow Rock"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
80 N_("Big Band"), N_("Chorus"), N_("Easy Listening"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
81 N_("Acoustic"), N_("Humour"), N_("Speech"), N_("Chanson"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
82 N_("Opera"), N_("Chamber Music"), N_("Sonata"), N_("Symphony"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
83 N_("Booty Bass"), N_("Primus"), N_("Porn Groove"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
84 N_("Satire"), N_("Slow Jam"), N_("Club"), N_("Tango"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
85 N_("Samba"), N_("Folklore"), N_("Ballad"), N_("Power Ballad"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
86 N_("Rhythmic Soul"), N_("Freestyle"), N_("Duet"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
87 N_("Punk Rock"), N_("Drum Solo"), N_("A Cappella"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
88 N_("Euro-House"), N_("Dance Hall"), N_("Goa"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
89 N_("Drum & Bass"), N_("Club-House"), N_("Hardcore"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
90 N_("Terror"), N_("Indie"), N_("BritPop"), N_("Negerpunk"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
91 N_("Polsk Punk"), N_("Beat"), N_("Christian Gangsta Rap"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
92 N_("Heavy Metal"), N_("Black Metal"), N_("Crossover"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
93 N_("Contemporary Christian"), N_("Christian Rock"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
94 N_("Merengue"), N_("Salsa"), N_("Thrash Metal"),
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
95 N_("Anime"), N_("JPop"), N_("Synthpop")
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
96 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
97
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
98 double
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
99 mpg123_compute_tpf(struct frame *fr)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
100 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
101 const int bs[4] = { 0, 384, 1152, 1152 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
102 double tpf;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
103
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
104 tpf = bs[fr->lay];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
105 tpf /= mpg123_freqs[fr->sampling_frequency] << (fr->lsf);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
106 return tpf;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
107 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
108
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
109 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
110 set_synth_functions(struct frame *fr)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
111 {
970
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 969
diff changeset
112 typedef int (*func) (mpgdec_real *, int, unsigned char *, int *);
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 969
diff changeset
113 typedef int (*func_mono) (mpgdec_real *, unsigned char *, int *);
0f294f2b0a9b [svn] - integer-mode decoding accuracy improvements
nenolod
parents: 969
diff changeset
114 typedef void (*func_dct36) (mpgdec_real *, mpgdec_real *, mpgdec_real *, mpgdec_real *, mpgdec_real *);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
115
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
116 int ds = fr->down_sample;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
117 int p8 = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
118
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
119 static func funcs[][3] = {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
120 {mpg123_synth_1to1,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
121 mpg123_synth_2to1,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
122 mpg123_synth_4to1},
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
123 {mpg123_synth_1to1_8bit,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
124 mpg123_synth_2to1_8bit,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
125 mpg123_synth_4to1_8bit},
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
126 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
127
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
128 static func_mono funcs_mono[2][4] = {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
129 {mpg123_synth_1to1_mono,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
130 mpg123_synth_2to1_mono,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
131 mpg123_synth_4to1_mono},
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
132 {mpg123_synth_1to1_8bit_mono,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
133 mpg123_synth_2to1_8bit_mono,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
134 mpg123_synth_4to1_8bit_mono}
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
135 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
136
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
137 if (mpg123_cfg.resolution == 8)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
138 p8 = 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
139 fr->synth = funcs[p8][ds];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
140 fr->synth_mono = funcs_mono[p8][ds];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
141 fr->synth_type = SYNTH_FPU;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
142
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
143 if (p8) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
144 mpg123_make_conv16to8_table();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
145 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
146 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
147
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
148 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
149 init(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
150 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
151 ConfigDb *db;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
152
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
153 mpg123_make_decode_tables(outscale);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
154
813
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
155 memset(&mpg123_cfg, 0, sizeof(mpg123_cfg));
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
156
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
157 mpg123_cfg.resolution = 16;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
158 mpg123_cfg.channels = 2;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
159 mpg123_cfg.downsample = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
160 mpg123_cfg.http_buffer_size = 128;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
161 mpg123_cfg.http_prebuffer = 25;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
162 mpg123_cfg.proxy_port = 8080;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
163 mpg123_cfg.proxy_use_auth = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
164 mpg123_cfg.proxy_user = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
165 mpg123_cfg.proxy_pass = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
166 mpg123_cfg.use_udp_channel = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
167 mpg123_cfg.title_override = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
168 mpg123_cfg.disable_id3v2 = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
169 mpg123_cfg.default_synth = SYNTH_AUTO;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
170
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
171 mpg123_cfg.title_encoding_enabled = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
172 mpg123_cfg.title_encoding = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
173
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
174 db = bmp_cfg_db_open();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
175
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
176 bmp_cfg_db_get_int(db, "MPG123", "resolution", &mpg123_cfg.resolution);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
177 bmp_cfg_db_get_int(db, "MPG123", "channels", &mpg123_cfg.channels);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
178 bmp_cfg_db_get_int(db, "MPG123", "downsample", &mpg123_cfg.downsample);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
179 bmp_cfg_db_get_int(db, "MPG123", "http_buffer_size",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
180 &mpg123_cfg.http_buffer_size);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
181 bmp_cfg_db_get_int(db, "MPG123", "http_prebuffer",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
182 &mpg123_cfg.http_prebuffer);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
183 bmp_cfg_db_get_bool(db, "MPG123", "save_http_stream",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
184 &mpg123_cfg.save_http_stream);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
185 if (!bmp_cfg_db_get_string
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
186 (db, "MPG123", "save_http_path", &mpg123_cfg.save_http_path))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
187 mpg123_cfg.save_http_path = g_strdup(g_get_home_dir());
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
188
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
189 bmp_cfg_db_get_bool(db, "MPG123", "use_udp_channel",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
190 &mpg123_cfg.use_udp_channel);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
191
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
192 bmp_cfg_db_get_bool(db, "MPG123", "title_override",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
193 &mpg123_cfg.title_override);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
194 bmp_cfg_db_get_bool(db, "MPG123", "disable_id3v2",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
195 &mpg123_cfg.disable_id3v2);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
196 if (!bmp_cfg_db_get_string
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
197 (db, "MPG123", "id3_format", &mpg123_cfg.id3_format))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
198 mpg123_cfg.id3_format = g_strdup("%p - %t");
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
199 bmp_cfg_db_get_int(db, "MPG123", "default_synth",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
200 &mpg123_cfg.default_synth);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
201
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
202 bmp_cfg_db_get_bool(db, "MPG123", "title_encoding_enabled", &mpg123_cfg.title_encoding_enabled);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
203 bmp_cfg_db_get_string(db, "MPG123", "title_encoding", &mpg123_cfg.title_encoding);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
204 if (mpg123_cfg.title_encoding_enabled)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
205 mpg123_id3_encoding_list = g_strsplit_set(mpg123_cfg.title_encoding, ENCODING_SEPARATOR, 0);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
206
1071
592ef16386aa [svn] - use global proxy configuration instead of individual configurations (chainsaw)
nenolod
parents: 997
diff changeset
207 bmp_cfg_db_get_bool(db, NULL, "use_proxy", &mpg123_cfg.use_proxy);
592ef16386aa [svn] - use global proxy configuration instead of individual configurations (chainsaw)
nenolod
parents: 997
diff changeset
208 bmp_cfg_db_get_string(db, NULL, "proxy_host", &mpg123_cfg.proxy_host);
592ef16386aa [svn] - use global proxy configuration instead of individual configurations (chainsaw)
nenolod
parents: 997
diff changeset
209 bmp_cfg_db_get_int(db, NULL, "proxy_port", &mpg123_cfg.proxy_port);
592ef16386aa [svn] - use global proxy configuration instead of individual configurations (chainsaw)
nenolod
parents: 997
diff changeset
210 bmp_cfg_db_get_bool(db, NULL, "proxy_use_auth", &mpg123_cfg.proxy_use_auth);
592ef16386aa [svn] - use global proxy configuration instead of individual configurations (chainsaw)
nenolod
parents: 997
diff changeset
211 bmp_cfg_db_get_string(db, NULL, "proxy_user", &mpg123_cfg.proxy_user);
592ef16386aa [svn] - use global proxy configuration instead of individual configurations (chainsaw)
nenolod
parents: 997
diff changeset
212 bmp_cfg_db_get_string(db, NULL, "proxy_pass", &mpg123_cfg.proxy_pass);
592ef16386aa [svn] - use global proxy configuration instead of individual configurations (chainsaw)
nenolod
parents: 997
diff changeset
213
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
214 bmp_cfg_db_close(db);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
215
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
216 if (mpg123_cfg.resolution != 16 && mpg123_cfg.resolution != 8)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
217 mpg123_cfg.resolution = 16;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
218
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
219 mpg123_cfg.channels = CLAMP(mpg123_cfg.channels, 0, 2);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
220 mpg123_cfg.downsample = CLAMP(mpg123_cfg.downsample, 0, 2);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
221 mpg123_getcpuflags(&cpu_fflags, &cpu_efflags);
1090
09eb2c83097a [svn] Psychoaccoustics support (to disable, temporarily add -UPSYCHO to your CFLAGS.):
nenolod
parents: 1071
diff changeset
222
09eb2c83097a [svn] Psychoaccoustics support (to disable, temporarily add -UPSYCHO to your CFLAGS.):
nenolod
parents: 1071
diff changeset
223 psycho_init();
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
224 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
225
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
226 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
227 cleanup(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
228 {
813
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
229 g_free(mpg123_ip.description);
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
230 mpg123_ip.description = NULL;
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
231
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
232 if (mpg123_cfg.save_http_path) {
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
233 free(mpg123_cfg.save_http_path);
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
234 mpg123_cfg.save_http_path = NULL;
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
235 }
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
236
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
237 if (mpg123_cfg.proxy_host) {
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
238 free(mpg123_cfg.proxy_host);
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
239 mpg123_cfg.proxy_host = NULL;
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
240 }
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
241
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
242 if (mpg123_cfg.proxy_user) {
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
243 free(mpg123_cfg.proxy_user);
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
244 mpg123_cfg.proxy_user = NULL;
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
245 }
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
246
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
247 if (mpg123_cfg.proxy_pass) {
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
248 free(mpg123_cfg.proxy_pass);
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
249 mpg123_cfg.proxy_pass = NULL;
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
250 }
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
251
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
252 if (mpg123_cfg.id3_format) {
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
253 free(mpg123_cfg.id3_format);
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
254 mpg123_cfg.id3_format = NULL;
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
255 }
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
256
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
257 if (mpg123_cfg.title_encoding) {
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
258 free(mpg123_cfg.title_encoding);
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
259 mpg123_cfg.title_encoding = NULL;
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
260 }
c8cf439179b8 [svn] - Fix a ton and a half of memory leaks, via the wonderful Leonardo Boshell <leonardop -at- gentoo.org>.
nenolod
parents: 778
diff changeset
261
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
262 g_strfreev(mpg123_id3_encoding_list);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
263 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
264
994
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
265 static guint32
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
266 convert_to_header(guint8 * buf)
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
267 {
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
268 return (buf[0] << 24) + (buf[1] << 16) + (buf[2] << 8) + buf[3];
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
269 }
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
270
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
271
777
f3ee3610ca26 [svn] - do not use type/magic detection here
nenolod
parents: 776
diff changeset
272 #if 0
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
273 #define DET_BUF_SIZE 1024
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
274
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
275 static gboolean
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
276 mpg123_detect_by_content(char *filename)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
277 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
278 VFSFile *file;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
279 guchar tmp[4];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
280 guint32 head;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
281 struct frame fr;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
282 guchar buf[DET_BUF_SIZE];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
283 int in_buf, i;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
284 gboolean ret = FALSE;
775
d8e406227b9a [svn] - reinstate cyc-based checks intelligently
nenolod
parents: 773
diff changeset
285 guint cyc = 0;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
286
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
287 if ((file = vfs_fopen(filename, "rb")) == NULL)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
288 return FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
289 if (vfs_fread(tmp, 1, 4, file) != 4)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
290 goto done;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
291 head = convert_to_header(tmp);
773
f3d15ea6e56b [svn] - remove cyc based breaking
nenolod
parents: 771
diff changeset
292 while (!mpg123_head_check(head)) {
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
293 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
294 * The mpeg-stream can start anywhere in the file,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
295 * so we check the entire file
762
a22aa7bfa108 [svn] - try to avoid a buffer overflow when detecting an MPEG stream
nenolod
parents: 761
diff changeset
296 *
771
0f0659a2d5fb [svn] ten iterations?
nenolod
parents: 766
diff changeset
297 * Incorrect! We give up past ten iterations of this
762
a22aa7bfa108 [svn] - try to avoid a buffer overflow when detecting an MPEG stream
nenolod
parents: 761
diff changeset
298 * code for safety's sake. Buffer overflows suck. --nenolod
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
299 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
300 /* Optimize this */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
301 in_buf = vfs_fread(buf, 1, DET_BUF_SIZE, file);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
302 if (in_buf == 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
303 goto done;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
304
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
305 for (i = 0; i < in_buf; i++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
306 head <<= 8;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
307 head |= buf[i];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
308 if (mpg123_head_check(head)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
309 vfs_fseek(file, i + 1 - in_buf, SEEK_CUR);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
310 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
311 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
312 }
775
d8e406227b9a [svn] - reinstate cyc-based checks intelligently
nenolod
parents: 773
diff changeset
313
d8e406227b9a [svn] - reinstate cyc-based checks intelligently
nenolod
parents: 773
diff changeset
314 if (++cyc > 20)
d8e406227b9a [svn] - reinstate cyc-based checks intelligently
nenolod
parents: 773
diff changeset
315 goto done;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
316 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
317 if (mpg123_decode_header(&fr, head)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
318 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
319 * We found something which looks like a MPEG-header.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
320 * We check the next frame too, to be sure
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
321 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
322
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
323 if (vfs_fseek(file, fr.framesize, SEEK_CUR) != 0)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
324 goto done;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
325 if (vfs_fread(tmp, 1, 4, file) != 4)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
326 goto done;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
327 head = convert_to_header(tmp);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
328 if (mpg123_head_check(head) && mpg123_decode_header(&fr, head))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
329 ret = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
330 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
331
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
332 done:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
333 vfs_fclose(file);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
334 return ret;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
335 }
777
f3ee3610ca26 [svn] - do not use type/magic detection here
nenolod
parents: 776
diff changeset
336 #endif
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
337
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
338 static int
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
339 is_our_file(char *filename)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
340 {
653
97113126c7f9 [svn] - Fix mp3 detection properly.
nenolod
parents: 651
diff changeset
341 gchar *ext = strrchr(filename, '.');
97113126c7f9 [svn] - Fix mp3 detection properly.
nenolod
parents: 651
diff changeset
342
761
363f8644bce7 [svn] - sanity checks here
nenolod
parents: 685
diff changeset
343 if (!strncasecmp(filename, "http://", 7) && (ext && strncasecmp(ext, ".ogg", 4)))
684
d991052592f6 [svn] - Roll back broken HTTP-based stream detection code.
nenolod
parents: 653
diff changeset
344 return TRUE;
777
f3ee3610ca26 [svn] - do not use type/magic detection here
nenolod
parents: 776
diff changeset
345 else if (ext && (!strncasecmp(ext, ".mp3", 4)
f3ee3610ca26 [svn] - do not use type/magic detection here
nenolod
parents: 776
diff changeset
346 || !strncasecmp(ext, ".mp2", 4)
f3ee3610ca26 [svn] - do not use type/magic detection here
nenolod
parents: 776
diff changeset
347 || !strncasecmp(ext, ".mpg", 4)))
f3ee3610ca26 [svn] - do not use type/magic detection here
nenolod
parents: 776
diff changeset
348 return TRUE;
653
97113126c7f9 [svn] - Fix mp3 detection properly.
nenolod
parents: 651
diff changeset
349
778
69d3bb31aa49 [svn] lalala
nenolod
parents: 777
diff changeset
350 return FALSE;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
351 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
352
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
353 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
354 play_frame(struct frame *fr)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
355 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
356 if (fr->error_protection) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
357 bsi.wordpointer += 2;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
358 /* mpg123_getbits(16); *//* skip crc */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
359 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
360 if (!fr->do_layer(fr)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
361 skip_frames = 2;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
362 mpg123_info->output_audio = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
363 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
364 else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
365 if (!skip_frames)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
366 mpg123_info->output_audio = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
367 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
368 skip_frames--;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
369 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
370 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
371
994
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
372 static const char *
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
373 get_id3_genre(unsigned char genre_code)
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
374 {
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
375 if (genre_code < GENRE_MAX)
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
376 return gettext(mpg123_id3_genres[genre_code]);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
377
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
378 return "";
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
379 }
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
380
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
381 guint
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
382 mpg123_strip_spaces(char *src, size_t n)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
383 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
384 gchar *space = NULL, /* last space in src */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
385 *start = src;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
386
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
387 while (n--)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
388 switch (*src++) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
389 case '\0':
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
390 n = 0; /* breaks out of while loop */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
391
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
392 src--;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
393 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
394 case ' ':
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
395 if (space == NULL)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
396 space = src - 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
397 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
398 default:
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
399 space = NULL; /* don't terminate intermediate spaces */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
400
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
401 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
402 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
403 if (space != NULL) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
404 src = space;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
405 *src = '\0';
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
406 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
407 return src - start;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
408 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
409
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
410 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
411 * Function extname (filename)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
412 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
413 * Return pointer within filename to its extenstion, or NULL if
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
414 * filename has no extension.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
415 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
416 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
417 static gchar *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
418 extname(const char *filename)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
419 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
420 gchar *ext = strrchr(filename, '.');
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
421
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
422 if (ext != NULL)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
423 ++ext;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
424
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
425 return ext;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
426 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
427
994
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
428 /*
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
429 * Function id3v1_to_id3v2 (v1, v2)
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
430 *
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
431 * Convert ID3v1 tag `v1' to ID3v2 tag `v2'.
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
432 *
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
433 */
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
434 void
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
435 mpg123_id3v1_to_id3v2(struct id3v1tag_t *v1, struct id3tag_t *v2)
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
436 {
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
437 memset(v2, 0, sizeof(struct id3tag_t));
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
438 strncpy(v2->title, v1->title, 30);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
439 strncpy(v2->artist, v1->artist, 30);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
440 strncpy(v2->album, v1->album, 30);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
441 strncpy(v2->comment, v1->u.v1_0.comment, 30);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
442 strncpy(v2->genre, get_id3_genre(v1->genre), sizeof(v2->genre));
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
443 g_strstrip(v2->title);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
444 g_strstrip(v2->artist);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
445 g_strstrip(v2->album);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
446 g_strstrip(v2->comment);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
447 g_strstrip(v2->genre);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
448 {
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
449 char y[5];
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
450 memcpy(y, v1->year, 4); y[4]=0;
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
451 v2->year = atoi(y);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
452 }
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
453
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
454 /* Check for v1.1 tags. */
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
455 if (v1->u.v1_1.__zero == 0)
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
456 v2->track_number = v1->u.v1_1.track_number;
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
457 else
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
458 v2->track_number = 0;
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
459 }
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
460
974
fa6a2ad65e71 [svn] Remove nonexistant tags from TitleInput.
nenolod
parents: 970
diff changeset
461 #define REMOVE_NONEXISTANT_TAG(x) if (!*x) { x = NULL; }
fa6a2ad65e71 [svn] Remove nonexistant tags from TitleInput.
nenolod
parents: 970
diff changeset
462
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
463 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
464 * Function mpg123_format_song_title (tag, filename)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
465 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
466 * Create song title according to `tag' and/or `filename' and
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
467 * return it. The title must be subsequently freed using g_free().
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
468 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
469 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
470 gchar *
957
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
471 mpg123_format_song_title(TagLib_Tag *taglib_tag, gchar * filename)
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
472 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
473 gchar *title = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
474 TitleInput *input;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
475
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
476 input = bmp_title_input_new();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
477
957
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
478 if (taglib_tag) {
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
479 input->performer = taglib_tag_artist(taglib_tag);
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
480 input->album_name = taglib_tag_album(taglib_tag);
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
481 input->track_name = taglib_tag_title(taglib_tag);
974
fa6a2ad65e71 [svn] Remove nonexistant tags from TitleInput.
nenolod
parents: 970
diff changeset
482
fa6a2ad65e71 [svn] Remove nonexistant tags from TitleInput.
nenolod
parents: 970
diff changeset
483 mpg123_strip_spaces(input->performer,strlen(input->performer));
fa6a2ad65e71 [svn] Remove nonexistant tags from TitleInput.
nenolod
parents: 970
diff changeset
484 mpg123_strip_spaces(input->album_name,strlen(input->album_name));
fa6a2ad65e71 [svn] Remove nonexistant tags from TitleInput.
nenolod
parents: 970
diff changeset
485 mpg123_strip_spaces(input->track_name,strlen(input->track_name));
fa6a2ad65e71 [svn] Remove nonexistant tags from TitleInput.
nenolod
parents: 970
diff changeset
486
957
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
487 input->year = taglib_tag_year(taglib_tag);
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
488 input->track_number = taglib_tag_track(taglib_tag);
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
489 input->genre = taglib_tag_genre(taglib_tag);
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
490 input->comment = taglib_tag_comment(taglib_tag);
974
fa6a2ad65e71 [svn] Remove nonexistant tags from TitleInput.
nenolod
parents: 970
diff changeset
491
fa6a2ad65e71 [svn] Remove nonexistant tags from TitleInput.
nenolod
parents: 970
diff changeset
492 /* remove any blank tags, fucking taglib */
fa6a2ad65e71 [svn] Remove nonexistant tags from TitleInput.
nenolod
parents: 970
diff changeset
493 REMOVE_NONEXISTANT_TAG(input->performer);
fa6a2ad65e71 [svn] Remove nonexistant tags from TitleInput.
nenolod
parents: 970
diff changeset
494 REMOVE_NONEXISTANT_TAG(input->album_name);
fa6a2ad65e71 [svn] Remove nonexistant tags from TitleInput.
nenolod
parents: 970
diff changeset
495 REMOVE_NONEXISTANT_TAG(input->track_name);
fa6a2ad65e71 [svn] Remove nonexistant tags from TitleInput.
nenolod
parents: 970
diff changeset
496 REMOVE_NONEXISTANT_TAG(input->genre);
fa6a2ad65e71 [svn] Remove nonexistant tags from TitleInput.
nenolod
parents: 970
diff changeset
497 REMOVE_NONEXISTANT_TAG(input->comment);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
498 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
499
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
500 input->file_name = g_path_get_basename(filename);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
501 input->file_path = g_path_get_dirname(filename);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
502 input->file_ext = extname(filename);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
503
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
504 title = xmms_get_titlestring(mpg123_cfg.title_override ?
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
505 mpg123_cfg.id3_format :
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
506 xmms_get_gentitle_format(), input);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
507
974
fa6a2ad65e71 [svn] Remove nonexistant tags from TitleInput.
nenolod
parents: 970
diff changeset
508 if (!title /* || strlen(input->track_name) == 0 */) {
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
509 /* Format according to filename. */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
510 title = g_path_get_basename(filename);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
511 if (extname(title))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
512 *(extname(title) - 1) = '\0'; /* removes period */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
513 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
514
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
515 g_free(input->file_path);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
516 g_free(input->file_name);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
517 g_free(input);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
518
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
519 return title;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
520 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
521
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
522 /*
957
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
523 * Function get_song_title (filename)
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
524 *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
525 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
526 static gchar *
957
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
527 get_song_title(char *filename)
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
528 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
529 char *ret = NULL;
957
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
530 taglib_file = taglib_file_new(filename);
997
e64eb333b63f [svn] Properly nullify the tag pointer or we could be passing a stale one.
chainsaw
parents: 994
diff changeset
531 taglib_tag = NULL;
957
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
532 if(taglib_file) {
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
533 taglib_tag = taglib_file_tag(taglib_file);
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
534 taglib_ap = taglib_file_audioproperties(taglib_file);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
535 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
536
957
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
537 ret = mpg123_format_song_title(taglib_tag, filename);
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
538
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
539 taglib_file_free(taglib_file);
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
540 taglib_tag_free_strings();
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
541 return ret;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
542 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
543
994
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
544 static long
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
545 get_song_length(VFSFile * file)
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
546 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
547 int len;
994
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
548 char tmp[4];
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
549
994
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
550 vfs_fseek(file, 0, SEEK_END);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
551 len = vfs_ftell(file);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
552 vfs_fseek(file, -128, SEEK_END);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
553 vfs_fread(tmp, 1, 3, file);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
554 if (!strncmp(tmp, "TAG", 3))
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
555 len -= 128;
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
556 return len;
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
557 }
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
558
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
559
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
560 static guint
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
561 get_song_time(VFSFile * file)
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
562 {
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
563 guint32 head;
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
564 guchar tmp[4], *buf;
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
565 struct frame frm;
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
566 xing_header_t xing_header;
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
567 double tpf, bpf;
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
568 guint32 len;
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
569
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
570 if (!file)
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
571 return -1;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
572
994
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
573 vfs_fseek(file, 0, SEEK_SET);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
574 if (vfs_fread(tmp, 1, 4, file) != 4)
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
575 return 0;
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
576 head = convert_to_header(tmp);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
577 while (!mpg123_head_check(head)) {
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
578 head <<= 8;
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
579 if (vfs_fread(tmp, 1, 1, file) != 1)
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
580 return 0;
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
581 head |= tmp[0];
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
582 }
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
583 if (mpg123_decode_header(&frm, head)) {
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
584 buf = g_malloc(frm.framesize + 4);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
585 vfs_fseek(file, -4, SEEK_CUR);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
586 vfs_fread(buf, 1, frm.framesize + 4, file);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
587 tpf = mpg123_compute_tpf(&frm);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
588 if (mpg123_get_xing_header(&xing_header, buf)) {
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
589 g_free(buf);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
590 if (xing_header.bytes == 0)
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
591 xing_header.bytes = get_song_length(file);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
592 return (tpf * xing_header.frames * 1000);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
593 }
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
594 g_free(buf);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
595 bpf = mpg123_compute_bpf(&frm);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
596 len = get_song_length(file);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
597 return ((guint) (len / bpf) * tpf * 1000);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
598 }
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
599 return 0;
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
600 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
601
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
602 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
603 get_song_info(char *filename, char **title_real, int *len_real)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
604 {
994
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
605 VFSFile *file;
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
606
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
607 (*len_real) = -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
608 (*title_real) = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
609
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
610 /*
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
611 * TODO: Getting song info from http streams.
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
612 */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
613 if (!strncasecmp(filename, "http://", 7))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
614 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
615
994
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
616 if ((file = vfs_fopen(filename, "rb")) != NULL) {
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
617 (*len_real) = get_song_time(file);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
618 (*title_real) = get_song_title(filename);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
619 vfs_fclose(file);
3d2984564cb8 [svn] Taglib length determination veto by nenolod, reverting. Leaving fileinfo optimizations in place, though.
chainsaw
parents: 993
diff changeset
620 }
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
621 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
622
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
623 static int
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
624 open_output(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
625 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
626 int r;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
627 AFormat fmt = mpg123_cfg.resolution == 16 ? FMT_S16_NE : FMT_U8;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
628 int freq = mpg123_freqs[fr.sampling_frequency] >> mpg123_cfg.downsample;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
629 int channels = mpg123_cfg.channels == 2 ? fr.stereo : 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
630 r = mpg123_ip.output->open_audio(fmt, freq, channels);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
631
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
632 if (r && dopause) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
633 mpg123_ip.output->pause(TRUE);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
634 dopause = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
635 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
636
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
637 return r;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
638 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
639
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
640
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
641 static int
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
642 mpg123_seek(struct frame *fr, xing_header_t * xh, gboolean vbr, int time)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
643 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
644 int jumped = -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
645
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
646 if (xh) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
647 int percent = ((double) time * 100.0) /
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
648 (mpg123_info->num_frames * mpg123_info->tpf);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
649 int byte = mpg123_seek_point(xh, percent);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
650 jumped = mpg123_stream_jump_to_byte(fr, byte);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
651 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
652 else if (vbr && mpg123_length > 0) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
653 int byte = ((guint64) time * 1000 * mpg123_info->filesize) /
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
654 mpg123_length;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
655 jumped = mpg123_stream_jump_to_byte(fr, byte);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
656 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
657 else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
658 int frame = time / mpg123_info->tpf;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
659 jumped = mpg123_stream_jump_to_frame(fr, frame);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
660 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
661
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
662 return jumped;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
663 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
664
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
665
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
666 static void *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
667 decode_loop(void *arg)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
668 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
669 gboolean have_xing_header = FALSE, vbr = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
670 int disp_count = 0, temp_time;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
671 char *filename = arg;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
672 xing_header_t xing_header;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
673
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
674 /* This is used by fileinfo on http streams */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
675 mpg123_bitrate = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
676
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
677 mpg123_pcm_sample = g_malloc0(32768);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
678 mpg123_pcm_point = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
679 mpg123_filename = filename;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
680
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
681 mpg123_read_frame_init();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
682
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
683 mpg123_open_stream(filename, -1);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
684
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
685 if (mpg123_info->eof || !mpg123_read_frame(&fr))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
686 mpg123_info->eof = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
687
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
688 if (!mpg123_info->eof && mpg123_info->going) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
689 if (mpg123_cfg.channels == 2)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
690 fr.single = -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
691 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
692 fr.single = 3;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
693
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
694 fr.down_sample = mpg123_cfg.downsample;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
695 fr.down_sample_sblimit = SBLIMIT >> mpg123_cfg.downsample;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
696 set_synth_functions(&fr);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
697 mpg123_init_layer3(fr.down_sample_sblimit);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
698
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
699 mpg123_info->tpf = mpg123_compute_tpf(&fr);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
700 if (strncasecmp(filename, "http://", 7)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
701 if (mpg123_stream_check_for_xing_header(&fr, &xing_header)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
702 mpg123_info->num_frames = xing_header.frames;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
703 have_xing_header = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
704 mpg123_read_frame(&fr);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
705 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
706 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
707
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
708 for (;;) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
709 memcpy(&temp_fr, &fr, sizeof(struct frame));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
710 if (!mpg123_read_frame(&temp_fr)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
711 mpg123_info->eof = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
712 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
713 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
714 if (fr.lay != temp_fr.lay ||
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
715 fr.sampling_frequency != temp_fr.sampling_frequency ||
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
716 fr.stereo != temp_fr.stereo || fr.lsf != temp_fr.lsf)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
717 memcpy(&fr, &temp_fr, sizeof(struct frame));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
718 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
719 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
720 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
721
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
722 if (!have_xing_header && strncasecmp(filename, "http://", 7))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
723 mpg123_info->num_frames = mpg123_calc_numframes(&fr);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
724
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
725 memcpy(&fr, &temp_fr, sizeof(struct frame));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
726 mpg123_bitrate = tabsel_123[fr.lsf][fr.lay - 1][fr.bitrate_index];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
727 disp_bitrate = mpg123_bitrate;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
728 mpg123_frequency = mpg123_freqs[fr.sampling_frequency];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
729 mpg123_stereo = fr.stereo;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
730 mpg123_layer = fr.lay;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
731 mpg123_lsf = fr.lsf;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
732 mpg123_mpeg25 = fr.mpeg25;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
733 mpg123_mode = fr.mode;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
734
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
735 if (strncasecmp(filename, "http://", 7)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
736 mpg123_length = mpg123_info->num_frames * mpg123_info->tpf * 1000;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
737 if (!mpg123_title)
957
12f57026da8f [svn] First attempt at introducing taglib here. Very rough, needs polishing. Please wear protective goggles before opening the file dialog. It *will* explode.
chainsaw
parents: 813
diff changeset
738 mpg123_title = get_song_title(filename);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
739 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
740 else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
741 if (!mpg123_title)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
742 mpg123_title = mpg123_http_get_title(filename);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
743 mpg123_length = -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
744 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
745
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
746 mpg123_ip.set_info(mpg123_title, mpg123_length,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
747 mpg123_bitrate * 1000,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
748 mpg123_freqs[fr.sampling_frequency], fr.stereo);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
749
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
750 output_opened = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
751
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
752 if (!open_output()) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
753 audio_error = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
754 mpg123_info->eof = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
755 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
756 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
757 play_frame(&fr);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
758 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
759
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
760 mpg123_info->first_frame = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
761 while (mpg123_info->going) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
762 if (mpg123_info->jump_to_time != -1) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
763 void *xp = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
764 if (have_xing_header)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
765 xp = &xing_header;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
766 if (mpg123_seek(&fr, xp, vbr, mpg123_info->jump_to_time) > -1) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
767 mpg123_ip.output->flush(mpg123_info->jump_to_time * 1000);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
768 mpg123_info->eof = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
769 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
770 mpg123_info->jump_to_time = -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
771 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
772 if (!mpg123_info->eof) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
773 if (mpg123_read_frame(&fr) != 0) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
774 if (fr.lay != mpg123_layer || fr.lsf != mpg123_lsf) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
775 memcpy(&temp_fr, &fr, sizeof(struct frame));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
776 if (mpg123_read_frame(&temp_fr) != 0) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
777 if (fr.lay == temp_fr.lay && fr.lsf == temp_fr.lsf) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
778 mpg123_layer = fr.lay;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
779 mpg123_lsf = fr.lsf;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
780 memcpy(&fr, &temp_fr, sizeof(struct frame));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
781 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
782 else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
783 memcpy(&fr, &temp_fr, sizeof(struct frame));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
784 skip_frames = 2;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
785 mpg123_info->output_audio = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
786 continue;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
787 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
788
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
789 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
790 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
791 if (mpg123_freqs[fr.sampling_frequency] != mpg123_frequency
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
792 || mpg123_stereo != fr.stereo) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
793 memcpy(&temp_fr, &fr, sizeof(struct frame));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
794 if (mpg123_read_frame(&temp_fr) != 0) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
795 if (fr.sampling_frequency ==
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
796 temp_fr.sampling_frequency
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
797 && temp_fr.stereo == fr.stereo) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
798 mpg123_ip.output->buffer_free();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
799 mpg123_ip.output->buffer_free();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
800 while (mpg123_ip.output->buffer_playing()
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
801 && mpg123_info->going
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
802 && mpg123_info->jump_to_time == -1)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
803 xmms_usleep(20000);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
804 if (!mpg123_info->going)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
805 break;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
806 temp_time = mpg123_ip.output->output_time();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
807 mpg123_ip.output->close_audio();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
808 mpg123_frequency =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
809 mpg123_freqs[fr.sampling_frequency];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
810 mpg123_stereo = fr.stereo;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
811 if (!mpg123_ip.output->
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
812 open_audio(mpg123_cfg.resolution ==
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
813 16 ? FMT_S16_NE : FMT_U8,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
814 mpg123_freqs[fr.sampling_frequency]
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
815 >> mpg123_cfg.downsample,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
816 mpg123_cfg.channels ==
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
817 2 ? fr.stereo : 1)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
818 audio_error = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
819 mpg123_info->eof = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
820 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
821 mpg123_ip.output->flush(temp_time);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
822 mpg123_ip.set_info(mpg123_title, mpg123_length,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
823 mpg123_bitrate * 1000,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
824 mpg123_frequency,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
825 mpg123_stereo);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
826 memcpy(&fr, &temp_fr, sizeof(struct frame));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
827 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
828 else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
829 memcpy(&fr, &temp_fr, sizeof(struct frame));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
830 skip_frames = 2;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
831 mpg123_info->output_audio = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
832 continue;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
833 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
834 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
835 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
836
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
837 if (tabsel_123[fr.lsf][fr.lay - 1][fr.bitrate_index] !=
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
838 mpg123_bitrate)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
839 mpg123_bitrate =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
840 tabsel_123[fr.lsf][fr.lay - 1][fr.bitrate_index];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
841
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
842 if (!disp_count) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
843 disp_count = 20;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
844 if (mpg123_bitrate != disp_bitrate) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
845 /* FIXME networks streams */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
846 disp_bitrate = mpg123_bitrate;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
847 if (!have_xing_header
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
848 && strncasecmp(filename, "http://", 7)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
849 double rel = mpg123_relative_pos();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
850 if (rel) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
851 mpg123_length =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
852 mpg123_ip.output->written_time() / rel;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
853 vbr = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
854 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
855
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
856 if (rel == 0 || !(mpg123_length > 0)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
857 mpg123_info->num_frames =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
858 mpg123_calc_numframes(&fr);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
859 mpg123_info->tpf = mpg123_compute_tpf(&fr);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
860 mpg123_length =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
861 mpg123_info->num_frames *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
862 mpg123_info->tpf * 1000;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
863 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
864
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
865
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
866 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
867 mpg123_ip.set_info(mpg123_title, mpg123_length,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
868 mpg123_bitrate * 1000,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
869 mpg123_frequency, mpg123_stereo);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
870 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
871 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
872 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
873 disp_count--;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
874 play_frame(&fr);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
875 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
876 else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
877 mpg123_ip.output->buffer_free();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
878 mpg123_ip.output->buffer_free();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
879 mpg123_info->eof = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
880 xmms_usleep(10000);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
881 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
882 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
883 else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
884 xmms_usleep(10000);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
885 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
886 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
887 g_free(mpg123_title);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
888 mpg123_title = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
889 mpg123_stream_close();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
890 if (output_opened && !audio_error)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
891 mpg123_ip.output->close_audio();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
892 g_free(mpg123_pcm_sample);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
893 mpg123_filename = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
894 g_free(filename);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
895
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
896 return NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
897 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
898
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
899 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
900 play_file(char *filename)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
901 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
902 memset(&fr, 0, sizeof(struct frame));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
903 memset(&temp_fr, 0, sizeof(struct frame));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
904
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
905 mpg123_info = g_malloc0(sizeof(PlayerInfo));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
906 mpg123_info->going = 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
907 mpg123_info->first_frame = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
908 mpg123_info->output_audio = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
909 mpg123_info->jump_to_time = -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
910 skip_frames = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
911 audio_error = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
912 output_opened = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
913 dopause = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
914
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
915 decode_thread = g_thread_create(decode_loop, g_strdup(filename), TRUE,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
916 NULL);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
917 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
918
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
919 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
920 stop(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
921 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
922 if (mpg123_info && mpg123_info->going) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
923 mpg123_info->going = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
924 g_thread_join(decode_thread);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
925 g_free(mpg123_info);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
926 mpg123_info = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
927 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
928 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
929
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
930 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
931 seek(int time)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
932 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
933 mpg123_info->jump_to_time = time;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
934
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
935 while (mpg123_info->jump_to_time != -1)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
936 xmms_usleep(10000);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
937 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
938
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
939 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
940 do_pause(short p)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
941 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
942 if (output_opened)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
943 mpg123_ip.output->pause(p);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
944 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
945 dopause = p;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
946 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
947
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
948 static int
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
949 get_time(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
950 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
951 if (audio_error)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
952 return -2;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
953 if (!mpg123_info)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
954 return -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
955 if (!mpg123_info->going
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
956 || (mpg123_info->eof && !mpg123_ip.output->buffer_playing()))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
957 return -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
958 return mpg123_ip.output->output_time();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
959 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
960
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
961 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
962 aboutbox(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
963 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
964 static GtkWidget *aboutbox;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
965
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
966 if (aboutbox != NULL)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
967 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
968
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
969 aboutbox = xmms_show_message(_("About MPEG Audio Plugin"),
223
e7e9a86c0c01 [svn] Update credits on here reflecting audacious-decoder changes.
nenolod
parents: 177
diff changeset
970 _("Audacious decoding engine by William Pitcock <nenolod@nenolod.net>, derived from:\n"
e7e9a86c0c01 [svn] Update credits on here reflecting audacious-decoder changes.
nenolod
parents: 177
diff changeset
971 "mpg123 decoding engine by Michael Hipp <mh@mpg123.de>\n"
e7e9a86c0c01 [svn] Update credits on here reflecting audacious-decoder changes.
nenolod
parents: 177
diff changeset
972 "Derived partially from mpg123 0.59s.mc3 as well.\n"
129
ce9d4aa5889a [svn] Update the credits to note the code sync that occured.
nenolod
parents: 61
diff changeset
973 "Based on the original XMMS plugin."),
ce9d4aa5889a [svn] Update the credits to note the code sync that occured.
nenolod
parents: 61
diff changeset
974 _("Ok"),
ce9d4aa5889a [svn] Update the credits to note the code sync that occured.
nenolod
parents: 61
diff changeset
975 FALSE, NULL, NULL);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
976
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
977 g_signal_connect(G_OBJECT(aboutbox), "destroy",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
978 G_CALLBACK(gtk_widget_destroyed), &aboutbox);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
979 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
980
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
981 InputPlugin mpg123_ip = {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
982 NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
983 NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
984 NULL, /* Description */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
985 init,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
986 aboutbox,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
987 mpg123_configure,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
988 is_our_file,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
989 NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
990 play_file,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
991 stop,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
992 do_pause,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
993 seek,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
994 mpg123_set_eq,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
995 get_time,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
996 NULL, NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
997 cleanup,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
998 NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
999 NULL, NULL, NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1000 get_song_info,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1001 mpg123_file_info_box, /* file_info_box */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1002 NULL
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1003 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1004
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1005 InputPlugin *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1006 get_iplugin_info(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1007 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1008 mpg123_ip.description = g_strdup_printf(_("MPEG Audio Plugin"));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1009 return &mpg123_ip;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
1010 }