annotate Plugins/Input/mpg123/mpg123.c @ 1096:9b4e9be457f0 trunk

[svn] - remove improper sampling rate change condition. Valid MP3s will not do this. Infact, I've never seen an MP3 that does this. Additionally, it doesn't even work with Shoutcast.
author nenolod
date Mon, 22 May 2006 16:37:39 -0700
parents 09eb2c83097a
children 03dbf5494d40
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;
1096
9b4e9be457f0 [svn] - remove improper sampling rate change condition. Valid MP3s will not do this. Infact, I've never seen an MP3 that does this. Additionally, it doesn't even work with Shoutcast.
nenolod
parents: 1090
diff changeset
670 int disp_count = 0;
61
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
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
792 if (tabsel_123[fr.lsf][fr.lay - 1][fr.bitrate_index] !=
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
793 mpg123_bitrate)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
794 mpg123_bitrate =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
795 tabsel_123[fr.lsf][fr.lay - 1][fr.bitrate_index];
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
796
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
797 if (!disp_count) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
798 disp_count = 20;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
799 if (mpg123_bitrate != disp_bitrate) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
800 /* FIXME networks streams */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
801 disp_bitrate = mpg123_bitrate;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
802 if (!have_xing_header
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
803 && strncasecmp(filename, "http://", 7)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
804 double rel = mpg123_relative_pos();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
805 if (rel) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
806 mpg123_length =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
807 mpg123_ip.output->written_time() / rel;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
808 vbr = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
809 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
810
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
811 if (rel == 0 || !(mpg123_length > 0)) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
812 mpg123_info->num_frames =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
813 mpg123_calc_numframes(&fr);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
814 mpg123_info->tpf = mpg123_compute_tpf(&fr);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
815 mpg123_length =
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
816 mpg123_info->num_frames *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
817 mpg123_info->tpf * 1000;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
818 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
819
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
820
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
821 }
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, mpg123_stereo);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
825 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
826 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
827 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
828 disp_count--;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
829 play_frame(&fr);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
830 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
831 else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
832 mpg123_ip.output->buffer_free();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
833 mpg123_ip.output->buffer_free();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
834 mpg123_info->eof = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
835 xmms_usleep(10000);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
836 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
837 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
838 else {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
839 xmms_usleep(10000);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
840 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
841 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
842 g_free(mpg123_title);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
843 mpg123_title = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
844 mpg123_stream_close();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
845 if (output_opened && !audio_error)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
846 mpg123_ip.output->close_audio();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
847 g_free(mpg123_pcm_sample);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
848 mpg123_filename = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
849 g_free(filename);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
850
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
851 return NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
852 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
853
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
854 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
855 play_file(char *filename)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
856 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
857 memset(&fr, 0, sizeof(struct frame));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
858 memset(&temp_fr, 0, sizeof(struct frame));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
859
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
860 mpg123_info = g_malloc0(sizeof(PlayerInfo));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
861 mpg123_info->going = 1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
862 mpg123_info->first_frame = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
863 mpg123_info->output_audio = TRUE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
864 mpg123_info->jump_to_time = -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
865 skip_frames = 0;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
866 audio_error = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
867 output_opened = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
868 dopause = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
869
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
870 decode_thread = g_thread_create(decode_loop, g_strdup(filename), TRUE,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
871 NULL);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
872 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
873
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
874 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
875 stop(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
876 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
877 if (mpg123_info && mpg123_info->going) {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
878 mpg123_info->going = FALSE;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
879 g_thread_join(decode_thread);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
880 g_free(mpg123_info);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
881 mpg123_info = NULL;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
882 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
883 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
884
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
885 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
886 seek(int time)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
887 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
888 mpg123_info->jump_to_time = time;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
889
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
890 while (mpg123_info->jump_to_time != -1)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
891 xmms_usleep(10000);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
892 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
893
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
894 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
895 do_pause(short p)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
896 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
897 if (output_opened)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
898 mpg123_ip.output->pause(p);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
899 else
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
900 dopause = p;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
901 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
902
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
903 static int
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
904 get_time(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
905 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
906 if (audio_error)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
907 return -2;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
908 if (!mpg123_info)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
909 return -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
910 if (!mpg123_info->going
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
911 || (mpg123_info->eof && !mpg123_ip.output->buffer_playing()))
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
912 return -1;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
913 return mpg123_ip.output->output_time();
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
914 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
915
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
916 static void
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
917 aboutbox(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
918 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
919 static GtkWidget *aboutbox;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
920
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
921 if (aboutbox != NULL)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
922 return;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
923
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
924 aboutbox = xmms_show_message(_("About MPEG Audio Plugin"),
223
e7e9a86c0c01 [svn] Update credits on here reflecting audacious-decoder changes.
nenolod
parents: 177
diff changeset
925 _("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
926 "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
927 "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
928 "Based on the original XMMS plugin."),
ce9d4aa5889a [svn] Update the credits to note the code sync that occured.
nenolod
parents: 61
diff changeset
929 _("Ok"),
ce9d4aa5889a [svn] Update the credits to note the code sync that occured.
nenolod
parents: 61
diff changeset
930 FALSE, NULL, NULL);
61
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
931
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
932 g_signal_connect(G_OBJECT(aboutbox), "destroy",
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
933 G_CALLBACK(gtk_widget_destroyed), &aboutbox);
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
934 }
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
935
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
936 InputPlugin mpg123_ip = {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
937 NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
938 NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
939 NULL, /* Description */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
940 init,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
941 aboutbox,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
942 mpg123_configure,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
943 is_our_file,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
944 NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
945 play_file,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
946 stop,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
947 do_pause,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
948 seek,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
949 mpg123_set_eq,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
950 get_time,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
951 NULL, NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
952 cleanup,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
953 NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
954 NULL, NULL, NULL,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
955 get_song_info,
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
956 mpg123_file_info_box, /* file_info_box */
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
957 NULL
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
958 };
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
959
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
960 InputPlugin *
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
961 get_iplugin_info(void)
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
962 {
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
963 mpg123_ip.description = g_strdup_printf(_("MPEG Audio Plugin"));
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
964 return &mpg123_ip;
fa848bd484d8 [svn] Move plugins to Plugins/
nenolod
parents:
diff changeset
965 }