annotate src/musepack/libmpc.cxx @ 3203:f5456241bff9 default tip

changed include path from audacious to audlegacy.
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Tue, 10 Nov 2009 05:19:25 +0900
parents 13a0e4377c20
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
1 #include "libmpc.h"
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
2
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
3 #define FORCED_THREAD_STACKSIZE 1024 * 1000
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
4 #define REMOVE_NONEXISTANT_TAG(x) if (!*x) { x = NULL; }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
5
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
6 using TagLib::MPC::File;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
7 using TagLib::Tag;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
8 using TagLib::String;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
9 using TagLib::APE::ItemListMap;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
10
1044
b1128efde471 [svn] - get rid of all warnings gcc 4.2.0 emits with my build configuration.
yaz
parents: 659
diff changeset
11 const gchar *mpc_fmts[] = { "mpc", NULL };
372
a157306caf03 [svn] - finalize the plugin-side of the extension-assist ABI
nenolod
parents: 368
diff changeset
12
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
13 InputPlugin MpcPlugin = {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
14 NULL, //File Handle FILE* handle
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
15 NULL, //Filename char* filename
1185
6d749f573b3b suppress warnings.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1079
diff changeset
16 (gchar *)"Musepack Audio Plugin",
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
17 mpcOpenPlugin, //Open Plugin [CALLBACK]
1621
031e91938009 musepack: C++ at it's worst.
William Pitcock <nenolod@atheme.org>
parents: 1510
diff changeset
18 NULL, //Cleanup [UNUSED]
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
19 mpcAboutBox, //Show About box [CALLBACK]
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
20 mpcConfigBox, //Show Configure box [CALLBACK]
1621
031e91938009 musepack: C++ at it's worst.
William Pitcock <nenolod@atheme.org>
parents: 1510
diff changeset
21 FALSE, //Enabled/Disabled [BOOLEAN]
260
4f7b72c88319 [svn] So input.c wants to have the old-style function available...
chainsaw
parents: 254
diff changeset
22 mpcIsOurFile, //Check if it's our file [CALLBACK]
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
23 NULL, //Scan the directory [UNUSED]
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
24 mpcPlay, //Play [CALLBACK]
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
25 mpcStop, //Stop [CALLBACK]
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
26 mpcPause, //Pause [CALLBACK]
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
27 mpcSeek, //Seek [CALLBACK]
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
28 mpcGetTime, //Get Time [CALLBACK]
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
29 NULL, //Get Volume [UNUSED]
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
30 NULL, //Set Volume [UNUSED]
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
31 NULL, //Obsolete [UNUSED]
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
32 NULL, //Visual plugins add_vis_pcm(int time, AFormat fmt, int nch, int length, void *ptr)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
33 NULL, //Set Info Settings set_info(char *title, int length, int rate, int freq, int nch)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
34 NULL, //set Info Text set_info_text(char* text)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
35 mpcGetSongInfo, //Get Title String callback [CALLBACK]
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
36 mpcFileInfoBox, //Show File Info Box [CALLBACK]
254
cdf9756d1528 [svn] Port to NewVFS file probe.
chainsaw
parents: 232
diff changeset
37 mpcGetSongTuple,//Acquire tuple for song [CALLBACK]
cdf9756d1528 [svn] Port to NewVFS file probe.
chainsaw
parents: 232
diff changeset
38 mpcIsOurFD,
1044
b1128efde471 [svn] - get rid of all warnings gcc 4.2.0 emits with my build configuration.
yaz
parents: 659
diff changeset
39 (gchar **)mpc_fmts
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
40 };
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
41
1079
d0d7b6dd45f0 [svn] - musepack: transition to plugin API v2
nenolod
parents: 1044
diff changeset
42 InputPlugin *mpc_iplist[] = { &MpcPlugin, NULL };
d0d7b6dd45f0 [svn] - musepack: transition to plugin API v2
nenolod
parents: 1044
diff changeset
43
1395
761e17b23e0c added Discovery plugin type
Cristi Magherusan <majeru@atheme-project.org>
parents: 1357
diff changeset
44 DECLARE_PLUGIN(musepack, NULL, NULL, mpc_iplist, NULL, NULL, NULL, NULL,NULL);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
45
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
46 static PluginConfig pluginConfig = {0};
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
47 static Widgets widgets = {0};
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
48 static MpcDecoder mpcDecoder = {0};
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
49 static TrackInfo track = {0};
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
50
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
51 static GThread *threadHandle;
2709
04249b58c738 Remove references to output plugin field in InputPlugins (hopefully I didn't
Matti Hamalainen <ccr@tnsp.org>
parents: 2699
diff changeset
52 static GStaticMutex threadMutex = G_STATIC_MUTEX_INIT;
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
53
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
54 /*
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
55 * VFS callback implementation, adapted from mpc_reader.c.
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
56 * This _IS_ very sick, but it works. -nenolod
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
57 */
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
58 static mpc_int32_t
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
59 aud_vfs_fread_impl(void *data, void *ptr, mpc_int32_t size)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
60 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
61 mpc_reader_file *d = (mpc_reader_file *) data;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
62 VFSFile *file = (VFSFile *) d->file;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
63
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
64 return (mpc_int32_t) aud_vfs_fread(ptr, 1, size, file);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
65 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
66
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
67 static mpc_bool_t
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
68 aud_vfs_fseek_impl(void *data, mpc_int32_t offset)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
69 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
70 mpc_reader_file *d = (mpc_reader_file *) data;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
71 VFSFile *file = (VFSFile *) d->file;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
72
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
73 return d->is_seekable ? aud_vfs_fseek(file, offset, SEEK_SET) == 0 : FALSE;
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
74 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
75
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
76 static mpc_int32_t
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
77 aud_vfs_ftell_impl(void *data)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
78 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
79 mpc_reader_file *d = (mpc_reader_file *) data;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
80 VFSFile *file = (VFSFile *) d->file;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
81
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
82 return aud_vfs_ftell(file);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
83 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
84
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
85 static mpc_int32_t
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
86 aud_vfs_getsize_impl(void *data)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
87 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
88 mpc_reader_file *d = (mpc_reader_file *) data;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
89
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
90 return d->file_size;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
91 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
92
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
93 static mpc_bool_t
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
94 aud_vfs_canseek_impl(void *data)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
95 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
96 mpc_reader_file *d = (mpc_reader_file *) data;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
97
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
98 return d->is_seekable;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
99 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
100
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
101 /*
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
102 * This sets up an mpc_reader_file object to read from VFS instead of libc.
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
103 * Essentially, we use this instead of the normal constructor.
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
104 * - nenolod
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
105 */
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
106 void
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
107 mpc_reader_setup_file_vfs(mpc_reader_file *p_reader, VFSFile *input)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
108 {
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
109 p_reader->reader.seek = aud_vfs_fseek_impl;
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
110 p_reader->reader.read = aud_vfs_fread_impl;
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
111 p_reader->reader.tell = aud_vfs_ftell_impl;
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
112 p_reader->reader.get_size = aud_vfs_getsize_impl;
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
113 p_reader->reader.canseek = aud_vfs_canseek_impl;
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
114 p_reader->reader.data = p_reader;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
115
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
116 p_reader->file = (FILE *) input; // no worries, it gets cast back -nenolod
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
117 p_reader->is_seekable = TRUE; // XXX streams
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
118
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
119 aud_vfs_fseek(input, 0, SEEK_END);
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
120 p_reader->file_size = aud_vfs_ftell(input);
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
121 aud_vfs_fseek(input, 0, SEEK_SET);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
122 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
123
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
124 static void mpcOpenPlugin()
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
125 {
2523
769e17da93dd Replaced s/ConfigDb/mcs_handle_t/g, as per changes in the core.
Matti Hamalainen <ccr@tnsp.org>
parents: 2119
diff changeset
126 mcs_handle_t *cfg;
2113
05e0ef88c52c s/bmp_cfg_/aud_cfg_/
Matti Hamalainen <ccr@tnsp.org>
parents: 2111
diff changeset
127 cfg = aud_cfg_db_open();
05e0ef88c52c s/bmp_cfg_/aud_cfg_/
Matti Hamalainen <ccr@tnsp.org>
parents: 2111
diff changeset
128 aud_cfg_db_get_bool(cfg, "musepack", "clipPrevention", &pluginConfig.clipPrevention);
05e0ef88c52c s/bmp_cfg_/aud_cfg_/
Matti Hamalainen <ccr@tnsp.org>
parents: 2111
diff changeset
129 aud_cfg_db_get_bool(cfg, "musepack", "albumGain", &pluginConfig.albumGain);
05e0ef88c52c s/bmp_cfg_/aud_cfg_/
Matti Hamalainen <ccr@tnsp.org>
parents: 2111
diff changeset
130 aud_cfg_db_get_bool(cfg, "musepack", "dynamicBitrate", &pluginConfig.dynamicBitrate);
05e0ef88c52c s/bmp_cfg_/aud_cfg_/
Matti Hamalainen <ccr@tnsp.org>
parents: 2111
diff changeset
131 aud_cfg_db_get_bool(cfg, "musepack", "replaygain", &pluginConfig.replaygain);
05e0ef88c52c s/bmp_cfg_/aud_cfg_/
Matti Hamalainen <ccr@tnsp.org>
parents: 2111
diff changeset
132 aud_cfg_db_close(cfg);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
133 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
134
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
135 static void mpcAboutBox()
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
136 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
137 GtkWidget* aboutBox = widgets.aboutBox;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
138 if (aboutBox)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
139 gdk_window_raise(aboutBox->window);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
140 else
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
141 {
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
142 char* titleText = g_strdup_printf(_("Musepack Decoder Plugin 1.2"));
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
143 const char* contentText = _("Plugin code by\nBenoit Amiaux\nMartin Spuler\nKuniklo\n\nGet latest version at http://musepack.net\n");
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
144 const char* buttonText = _("Nevermind");
1677
f6f5603a0954 xmms_show_message() changed to audacious_info_dialog()
Matti Hamalainen <ccr@tnsp.org>
parents: 1676
diff changeset
145 aboutBox = audacious_info_dialog(titleText, contentText, buttonText, FALSE, NULL, NULL);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
146 widgets.aboutBox = aboutBox;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
147 g_signal_connect(G_OBJECT(aboutBox), "destroy", G_CALLBACK(gtk_widget_destroyed), &widgets.aboutBox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
148 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
149 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
150
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
151 static void mpcConfigBox()
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
152 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
153 GtkWidget* configBox = widgets.configBox;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
154 if(configBox)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
155 gdk_window_raise(configBox->window);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
156 else
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
157 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
158 configBox = gtk_window_new(GTK_WINDOW_TOPLEVEL);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
159 gtk_window_set_type_hint(GTK_WINDOW(configBox), GDK_WINDOW_TYPE_HINT_DIALOG);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
160 widgets.configBox = configBox;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
161 g_signal_connect(G_OBJECT(configBox), "destroy", G_CALLBACK(gtk_widget_destroyed), &widgets.configBox);
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
162 gtk_window_set_title(GTK_WINDOW(configBox), _("Musepack Decoder Configuration"));
3035
13a0e4377c20 Don't use deprecated gtk functions
Tomasz Mon <desowin@gmail.com>
parents: 2712
diff changeset
163 gtk_window_set_resizable(GTK_WINDOW(configBox), FALSE);
13a0e4377c20 Don't use deprecated gtk functions
Tomasz Mon <desowin@gmail.com>
parents: 2712
diff changeset
164 gtk_container_set_border_width(GTK_CONTAINER(configBox), 10);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
165
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
166 GtkWidget* notebook = gtk_notebook_new();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
167 GtkWidget* vbox = gtk_vbox_new(FALSE, 10);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
168 gtk_box_pack_start(GTK_BOX(vbox), notebook, TRUE, TRUE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
169 gtk_container_add(GTK_CONTAINER(configBox), vbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
170
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
171 //General Settings Tab
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
172 GtkWidget* generalSet = gtk_frame_new(_("General Settings"));
3035
13a0e4377c20 Don't use deprecated gtk functions
Tomasz Mon <desowin@gmail.com>
parents: 2712
diff changeset
173 gtk_container_set_border_width(GTK_CONTAINER(generalSet), 5);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
174
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
175 GtkWidget* gSvbox = gtk_vbox_new(FALSE, 10);
3035
13a0e4377c20 Don't use deprecated gtk functions
Tomasz Mon <desowin@gmail.com>
parents: 2712
diff changeset
176 gtk_container_set_border_width(GTK_CONTAINER(gSvbox), 5);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
177 gtk_container_add(GTK_CONTAINER(generalSet), gSvbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
178
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
179 GtkWidget* bitrateCheck = gtk_check_button_new_with_label(_("Enable Dynamic Bitrate Display"));
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
180 widgets.bitrateCheck = bitrateCheck;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
181 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(bitrateCheck), pluginConfig.dynamicBitrate);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
182 gtk_box_pack_start(GTK_BOX(gSvbox), bitrateCheck, FALSE, FALSE, 0);
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
183 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), generalSet, gtk_label_new(_("Plugin")));
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
184
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
185 //ReplayGain Settings Tab
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
186 GtkWidget* replaygainSet = gtk_frame_new(_("ReplayGain Settings"));
3035
13a0e4377c20 Don't use deprecated gtk functions
Tomasz Mon <desowin@gmail.com>
parents: 2712
diff changeset
187 gtk_container_set_border_width(GTK_CONTAINER(replaygainSet), 5);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
188
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
189 GtkWidget* rSVbox = gtk_vbox_new(FALSE, 10);
3035
13a0e4377c20 Don't use deprecated gtk functions
Tomasz Mon <desowin@gmail.com>
parents: 2712
diff changeset
190 gtk_container_set_border_width(GTK_CONTAINER(rSVbox), 5);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
191 gtk_container_add(GTK_CONTAINER(replaygainSet), rSVbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
192
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
193 GtkWidget* clippingCheck = gtk_check_button_new_with_label(_("Enable Clipping Prevention"));
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
194 widgets.clippingCheck = clippingCheck;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
195 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(clippingCheck), pluginConfig.clipPrevention);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
196 gtk_box_pack_start(GTK_BOX(rSVbox), clippingCheck, FALSE, FALSE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
197
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
198 GtkWidget* replaygainCheck = gtk_check_button_new_with_label(_("Enable ReplayGain"));
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
199 widgets.replaygainCheck = replaygainCheck;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
200 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(replaygainCheck), pluginConfig.replaygain);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
201 gtk_box_pack_start(GTK_BOX(rSVbox), replaygainCheck, FALSE, FALSE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
202
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
203 GtkWidget* replaygainType = gtk_frame_new(_("ReplayGain Type"));
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
204 gtk_box_pack_start(GTK_BOX(rSVbox), replaygainType, FALSE, FALSE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
205 g_signal_connect(G_OBJECT(replaygainCheck), "toggled", G_CALLBACK(toggleSwitch), replaygainType);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
206
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
207 GtkWidget* rgVbox = gtk_vbox_new(FALSE, 5);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
208 gtk_container_set_border_width(GTK_CONTAINER(rgVbox), 5);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
209 gtk_container_add(GTK_CONTAINER(replaygainType), rgVbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
210
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
211 GtkWidget* trackCheck = gtk_radio_button_new_with_label(NULL, _("Use Track Gain"));
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
212 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(trackCheck), !pluginConfig.albumGain);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
213 gtk_box_pack_start(GTK_BOX(rgVbox), trackCheck, FALSE, FALSE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
214
3035
13a0e4377c20 Don't use deprecated gtk functions
Tomasz Mon <desowin@gmail.com>
parents: 2712
diff changeset
215 GtkWidget* albumCheck = gtk_radio_button_new_with_label(gtk_radio_button_get_group(GTK_RADIO_BUTTON(trackCheck)), _("Use Album Gain"));
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
216 widgets.albumCheck = albumCheck;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
217 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(albumCheck), pluginConfig.albumGain);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
218 gtk_box_pack_start(GTK_BOX(rgVbox), albumCheck, FALSE, FALSE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
219 gtk_widget_set_sensitive(replaygainType, pluginConfig.replaygain);
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
220 gtk_notebook_append_page(GTK_NOTEBOOK(notebook), replaygainSet, gtk_label_new(_("ReplayGain")));
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
221
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
222 //Buttons
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
223 GtkWidget* buttonBox = gtk_hbutton_box_new();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
224 gtk_button_box_set_layout(GTK_BUTTON_BOX(buttonBox), GTK_BUTTONBOX_END);
3035
13a0e4377c20 Don't use deprecated gtk functions
Tomasz Mon <desowin@gmail.com>
parents: 2712
diff changeset
225 gtk_box_set_spacing(GTK_BOX(buttonBox), 5);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
226 gtk_box_pack_start(GTK_BOX(vbox), buttonBox, FALSE, FALSE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
227
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
228 GtkWidget* okButton = gtk_button_new_with_label(_("Ok"));
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
229 g_signal_connect(G_OBJECT(okButton), "clicked", G_CALLBACK(saveConfigBox), NULL);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
230 GTK_WIDGET_SET_FLAGS(okButton, GTK_CAN_DEFAULT);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
231 gtk_box_pack_start(GTK_BOX(buttonBox), okButton, TRUE, TRUE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
232
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
233 GtkWidget* cancelButton = gtk_button_new_with_label(_("Cancel"));
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
234 g_signal_connect_swapped(G_OBJECT(cancelButton), "clicked", G_CALLBACK(gtk_widget_destroy), GTK_OBJECT(widgets.configBox));
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
235 GTK_WIDGET_SET_FLAGS(cancelButton, GTK_CAN_DEFAULT);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
236 gtk_widget_grab_default(cancelButton);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
237 gtk_box_pack_start(GTK_BOX(buttonBox), cancelButton, TRUE, TRUE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
238
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
239 gtk_widget_show_all(configBox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
240 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
241 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
242
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
243 static void toggleSwitch(GtkWidget* p_Widget, gpointer p_Data)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
244 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
245 gtk_widget_set_sensitive(GTK_WIDGET(p_Data), gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(p_Widget)));
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
246 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
247
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
248 static void saveConfigBox(GtkWidget* p_Widget, gpointer p_Data)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
249 {
2523
769e17da93dd Replaced s/ConfigDb/mcs_handle_t/g, as per changes in the core.
Matti Hamalainen <ccr@tnsp.org>
parents: 2119
diff changeset
250 mcs_handle_t* cfg;
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
251 GtkToggleButton* tb;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
252
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
253 tb = GTK_TOGGLE_BUTTON(widgets.replaygainCheck);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
254 pluginConfig.replaygain = gtk_toggle_button_get_active(tb);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
255 tb = GTK_TOGGLE_BUTTON(widgets.clippingCheck);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
256 pluginConfig.clipPrevention = gtk_toggle_button_get_active(tb);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
257 tb = GTK_TOGGLE_BUTTON(widgets.bitrateCheck);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
258 pluginConfig.dynamicBitrate = gtk_toggle_button_get_active(tb);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
259 tb = GTK_TOGGLE_BUTTON(widgets.albumCheck);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
260 pluginConfig.albumGain = gtk_toggle_button_get_active(tb);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
261
2113
05e0ef88c52c s/bmp_cfg_/aud_cfg_/
Matti Hamalainen <ccr@tnsp.org>
parents: 2111
diff changeset
262 cfg = aud_cfg_db_open();
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
263
2113
05e0ef88c52c s/bmp_cfg_/aud_cfg_/
Matti Hamalainen <ccr@tnsp.org>
parents: 2111
diff changeset
264 aud_cfg_db_set_bool(cfg, "musepack", "clipPrevention", pluginConfig.clipPrevention);
05e0ef88c52c s/bmp_cfg_/aud_cfg_/
Matti Hamalainen <ccr@tnsp.org>
parents: 2111
diff changeset
265 aud_cfg_db_set_bool(cfg, "musepack", "albumGain", pluginConfig.albumGain);
05e0ef88c52c s/bmp_cfg_/aud_cfg_/
Matti Hamalainen <ccr@tnsp.org>
parents: 2111
diff changeset
266 aud_cfg_db_set_bool(cfg, "musepack", "dynamicBitrate", pluginConfig.dynamicBitrate);
05e0ef88c52c s/bmp_cfg_/aud_cfg_/
Matti Hamalainen <ccr@tnsp.org>
parents: 2111
diff changeset
267 aud_cfg_db_set_bool(cfg, "musepack", "replaygain", pluginConfig.replaygain);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
268
2113
05e0ef88c52c s/bmp_cfg_/aud_cfg_/
Matti Hamalainen <ccr@tnsp.org>
parents: 2111
diff changeset
269 aud_cfg_db_close(cfg);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
270
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
271 gtk_widget_destroy (widgets.configBox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
272 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
273
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
274 static gint mpcIsOurFile(gchar* p_Filename)
260
4f7b72c88319 [svn] So input.c wants to have the old-style function available...
chainsaw
parents: 254
diff changeset
275 {
4f7b72c88319 [svn] So input.c wants to have the old-style function available...
chainsaw
parents: 254
diff changeset
276 VFSFile *file;
4f7b72c88319 [svn] So input.c wants to have the old-style function available...
chainsaw
parents: 254
diff changeset
277 gchar magic[3];
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
278 if ((file = aud_vfs_fopen(p_Filename, "rb"))) {
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
279 aud_vfs_fread(magic, 1, 3, file);
260
4f7b72c88319 [svn] So input.c wants to have the old-style function available...
chainsaw
parents: 254
diff changeset
280 if (!memcmp(magic, "MP+", 3)) {
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
281 aud_vfs_fclose(file);
260
4f7b72c88319 [svn] So input.c wants to have the old-style function available...
chainsaw
parents: 254
diff changeset
282 return 1;
4f7b72c88319 [svn] So input.c wants to have the old-style function available...
chainsaw
parents: 254
diff changeset
283 }
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
284 aud_vfs_fclose(file);
260
4f7b72c88319 [svn] So input.c wants to have the old-style function available...
chainsaw
parents: 254
diff changeset
285 }
4f7b72c88319 [svn] So input.c wants to have the old-style function available...
chainsaw
parents: 254
diff changeset
286 return 0;
4f7b72c88319 [svn] So input.c wants to have the old-style function available...
chainsaw
parents: 254
diff changeset
287 }
4f7b72c88319 [svn] So input.c wants to have the old-style function available...
chainsaw
parents: 254
diff changeset
288
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
289 static gint mpcIsOurFD(gchar* p_Filename, VFSFile* file)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
290 {
254
cdf9756d1528 [svn] Port to NewVFS file probe.
chainsaw
parents: 232
diff changeset
291 gchar magic[3];
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
292 aud_vfs_fread(magic, 1, 3, file);
260
4f7b72c88319 [svn] So input.c wants to have the old-style function available...
chainsaw
parents: 254
diff changeset
293 if (!memcmp(magic, "MP+", 3))
254
cdf9756d1528 [svn] Port to NewVFS file probe.
chainsaw
parents: 232
diff changeset
294 return 1;
cdf9756d1528 [svn] Port to NewVFS file probe.
chainsaw
parents: 232
diff changeset
295 return 0;
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
296 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
297
567
1e987b380776 [svn] - update to new plugin API
nenolod
parents: 372
diff changeset
298 static void mpcPlay(InputPlayback *data)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
299 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
300 mpcDecoder.offset = -1;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
301 mpcDecoder.isAlive = true;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
302 mpcDecoder.isOutput = false;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
303 mpcDecoder.isPause = false;
1357
cf46ed0ee590 musepack: new threading model
William Pitcock <nenolod@atheme-project.org>
parents: 1304
diff changeset
304 threadHandle = g_thread_self();
1447
195b5657303e updated input plugins to use set_pb_ready to signal to the core that they're ready for playback
Giacomo Lozito <james@develia.org>
parents: 1438
diff changeset
305 data->set_pb_ready(data);
1986
4b78df9dcf93 more set_params()
William Pitcock <nenolod@atheme.org>
parents: 1978
diff changeset
306 decodeStream(data);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
307 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
308
567
1e987b380776 [svn] - update to new plugin API
nenolod
parents: 372
diff changeset
309 static void mpcStop(InputPlayback *data)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
310 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
311 setAlive(false);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
312 if (threadHandle)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
313 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
314 g_thread_join(threadHandle);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
315 if (mpcDecoder.isOutput)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
316 {
567
1e987b380776 [svn] - update to new plugin API
nenolod
parents: 372
diff changeset
317 data->output->buffer_free();
1e987b380776 [svn] - update to new plugin API
nenolod
parents: 372
diff changeset
318 data->output->close_audio();
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
319 mpcDecoder.isOutput = false;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
320 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
321 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
322 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
323
567
1e987b380776 [svn] - update to new plugin API
nenolod
parents: 372
diff changeset
324 static void mpcPause(InputPlayback *data, short p_Pause)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
325 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
326 lockAcquire();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
327 mpcDecoder.isPause = p_Pause;
567
1e987b380776 [svn] - update to new plugin API
nenolod
parents: 372
diff changeset
328 data->output->pause(p_Pause);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
329 lockRelease();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
330 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
331
567
1e987b380776 [svn] - update to new plugin API
nenolod
parents: 372
diff changeset
332 static void mpcSeek(InputPlayback *data, int p_Offset)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
333 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
334 lockAcquire();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
335 mpcDecoder.offset = static_cast<double> (p_Offset);
567
1e987b380776 [svn] - update to new plugin API
nenolod
parents: 372
diff changeset
336 data->output->flush(1000 * p_Offset);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
337 lockRelease();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
338 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
339
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
340 static gint mpcGetTime(InputPlayback *data)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
341 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
342 if(!isAlive())
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
343 return -1;
567
1e987b380776 [svn] - update to new plugin API
nenolod
parents: 372
diff changeset
344 return data->output->output_time();
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
345 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
346
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
347 static Tuple *mpcGetSongTuple(gchar* p_Filename)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
348 {
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
349 VFSFile *input = aud_vfs_fopen(p_Filename, "rb");
1438
dc3e28d3b92a mpc: convert, wma: fixes
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
350 Tuple *tuple = NULL;
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
351
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
352 if(input)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
353 {
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1704
diff changeset
354 tuple = aud_tuple_new_from_filename(p_Filename);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
355
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
356 MpcInfo tags = getTags(p_Filename);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
357
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1704
diff changeset
358 aud_tuple_associate_string(tuple, FIELD_DATE, NULL, tags.date);
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1704
diff changeset
359 aud_tuple_associate_string(tuple, FIELD_TITLE, NULL, tags.title);
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1704
diff changeset
360 aud_tuple_associate_string(tuple, FIELD_ARTIST, NULL, tags.artist);
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1704
diff changeset
361 aud_tuple_associate_string(tuple, FIELD_ALBUM, NULL, tags.album);
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1704
diff changeset
362 aud_tuple_associate_int(tuple, FIELD_TRACK_NUMBER, NULL, tags.track);
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1704
diff changeset
363 aud_tuple_associate_int(tuple, FIELD_YEAR, NULL, tags.year);
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1704
diff changeset
364 aud_tuple_associate_string(tuple, FIELD_GENRE, NULL, tags.genre);
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1704
diff changeset
365 aud_tuple_associate_string(tuple, FIELD_COMMENT, NULL, tags.comment);
1438
dc3e28d3b92a mpc: convert, wma: fixes
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
366
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
367 freeTags(tags);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
368
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
369 mpc_streaminfo info;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
370 mpc_reader_file reader;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
371 mpc_reader_setup_file_vfs(&reader, input);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
372 mpc_streaminfo_read(&info, &reader.reader);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
373
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1704
diff changeset
374 aud_tuple_associate_int(tuple, FIELD_LENGTH, NULL, static_cast<int> (1000 * mpc_streaminfo_get_length(&info)));
1478
dd05a74648a7 Improve ${codec} and ${quality} tuples.
William Pitcock <nenolod@atheme-project.org>
parents: 1477
diff changeset
375
dd05a74648a7 Improve ${codec} and ${quality} tuples.
William Pitcock <nenolod@atheme-project.org>
parents: 1477
diff changeset
376 gchar *scratch = g_strdup_printf("Musepack v%d (encoder %s)", info.stream_version, info.encoder);
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1704
diff changeset
377 aud_tuple_associate_string(tuple, FIELD_CODEC, NULL, scratch);
1478
dd05a74648a7 Improve ${codec} and ${quality} tuples.
William Pitcock <nenolod@atheme-project.org>
parents: 1477
diff changeset
378 g_free(scratch);
dd05a74648a7 Improve ${codec} and ${quality} tuples.
William Pitcock <nenolod@atheme-project.org>
parents: 1477
diff changeset
379
dd05a74648a7 Improve ${codec} and ${quality} tuples.
William Pitcock <nenolod@atheme-project.org>
parents: 1477
diff changeset
380 scratch = g_strdup_printf("lossy (%s)", info.profile_name);
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1704
diff changeset
381 aud_tuple_associate_string(tuple, FIELD_QUALITY, NULL, scratch);
1478
dd05a74648a7 Improve ${codec} and ${quality} tuples.
William Pitcock <nenolod@atheme-project.org>
parents: 1477
diff changeset
382 g_free(scratch);
dd05a74648a7 Improve ${codec} and ${quality} tuples.
William Pitcock <nenolod@atheme-project.org>
parents: 1477
diff changeset
383
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
384 aud_vfs_fclose(input);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
385 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
386 else
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
387 {
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
388 gchar* temp = g_strdup_printf("[xmms-musepack] mpcGetSongInfo is unable to open %s\n", p_Filename);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
389 perror(temp);
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
390 g_free(temp);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
391 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
392
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
393 return tuple;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
394 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
395
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
396 static void mpcGetSongInfo(char* p_Filename, char** p_Title, int* p_Length)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
397 {
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
398 VFSFile *input = aud_vfs_fopen(p_Filename, "rb");
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
399 if(input)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
400 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
401 MpcInfo tags = getTags(p_Filename);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
402 *p_Title = mpcGenerateTitle(tags, p_Filename);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
403 freeTags(tags);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
404 mpc_streaminfo info;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
405 mpc_reader_file reader;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
406 mpc_reader_setup_file_vfs(&reader, input);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
407 mpc_streaminfo_read(&info, &reader.reader);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
408 *p_Length = static_cast<int> (1000 * mpc_streaminfo_get_length(&info));
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
409 aud_vfs_fclose(input);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
410 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
411 else
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
412 {
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
413 gchar* temp = g_strdup_printf("[xmms-musepack] mpcGetSongInfo is unable to open %s\n", p_Filename);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
414 perror(temp);
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
415 g_free(temp);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
416 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
417 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
418
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
419 static void freeTags(MpcInfo& tags)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
420 {
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
421 g_free(tags.title);
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
422 g_free(tags.artist);
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
423 g_free(tags.album);
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
424 g_free(tags.comment);
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
425 g_free(tags.genre);
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
426 g_free(tags.date);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
427 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
428
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
429 static MpcInfo getTags(const gchar* p_Filename)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
430 {
1477
04311d687e94 fix musepack tag retrieval
William Pitcock <nenolod@atheme-project.org>
parents: 1473
diff changeset
431 gchar *pRealFilename = g_filename_from_uri(p_Filename, NULL, NULL);
04311d687e94 fix musepack tag retrieval
William Pitcock <nenolod@atheme-project.org>
parents: 1473
diff changeset
432 File oFile(pRealFilename ? pRealFilename : p_Filename, false);
04311d687e94 fix musepack tag retrieval
William Pitcock <nenolod@atheme-project.org>
parents: 1473
diff changeset
433 g_free(pRealFilename);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
434 Tag* poTag = oFile.tag();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
435 MpcInfo tags = {0};
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
436 tags.title = g_strdup(poTag->title().toCString(true));
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
437 REMOVE_NONEXISTANT_TAG(tags.title);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
438 tags.artist = g_strdup(poTag->artist().toCString(true));
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
439 REMOVE_NONEXISTANT_TAG(tags.artist);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
440 tags.album = g_strdup(poTag->album().toCString(true));
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
441 REMOVE_NONEXISTANT_TAG(tags.album);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
442 tags.genre = g_strdup(poTag->genre().toCString(true));
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
443 REMOVE_NONEXISTANT_TAG(tags.genre);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
444 tags.comment = g_strdup(poTag->comment().toCString(true));
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
445 REMOVE_NONEXISTANT_TAG(tags.comment);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
446 tags.year = poTag->year();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
447 tags.track = poTag->track();
659
d1a03def0021 [svn] - disable broken APETag support for now, can cause crashes
nenolod
parents: 567
diff changeset
448 #if 0
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
449 TagLib::APE::Tag* ape = oFile.APETag(false);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
450 if(ape)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
451 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
452 ItemListMap map = ape->itemListMap();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
453 if(map.contains("YEAR"))
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
454 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
455 tags.date = g_strdup(map["YEAR"].toString().toCString(true));
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
456 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
457 else
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
458 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
459 tags.date = g_strdup_printf("%d", tags.year);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
460 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
461 }
659
d1a03def0021 [svn] - disable broken APETag support for now, can cause crashes
nenolod
parents: 567
diff changeset
462 #endif
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
463 return tags;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
464 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
465
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
466 static void mpcFileInfoBox(char* p_Filename)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
467 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
468 GtkWidget* infoBox = widgets.infoBox;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
469
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
470 if(infoBox)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
471 gdk_window_raise(infoBox->window);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
472 else
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
473 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
474 infoBox = gtk_window_new(GTK_WINDOW_TOPLEVEL);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
475 gtk_window_set_type_hint(GTK_WINDOW(infoBox), GDK_WINDOW_TYPE_HINT_DIALOG);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
476 widgets.infoBox = infoBox;
3035
13a0e4377c20 Don't use deprecated gtk functions
Tomasz Mon <desowin@gmail.com>
parents: 2712
diff changeset
477 gtk_window_set_resizable(GTK_WINDOW(infoBox), FALSE);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
478 g_signal_connect(G_OBJECT(infoBox), "destroy", G_CALLBACK(closeInfoBox), NULL);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
479 gtk_container_set_border_width(GTK_CONTAINER(infoBox), 10);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
480
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
481 GtkWidget* iVbox = gtk_vbox_new(FALSE, 10);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
482 gtk_container_add(GTK_CONTAINER(infoBox), iVbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
483
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
484 GtkWidget* filenameHbox = gtk_hbox_new(FALSE, 5);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
485 gtk_box_pack_start(GTK_BOX(iVbox), filenameHbox, FALSE, TRUE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
486
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
487 GtkWidget* fileLabel = gtk_label_new(_("Filename:"));
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
488 gtk_box_pack_start(GTK_BOX(filenameHbox), fileLabel, FALSE, TRUE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
489
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
490 GtkWidget* fileEntry = gtk_entry_new();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
491 widgets.fileEntry = fileEntry;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
492 gtk_editable_set_editable(GTK_EDITABLE(fileEntry), FALSE);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
493 gtk_box_pack_start(GTK_BOX(filenameHbox), fileEntry, TRUE, TRUE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
494
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
495 GtkWidget* iHbox = gtk_hbox_new(FALSE, 10);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
496 gtk_box_pack_start(GTK_BOX(iVbox), iHbox, FALSE, TRUE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
497
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
498 GtkWidget* leftBox = gtk_vbox_new(FALSE, 10);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
499 gtk_box_pack_start(GTK_BOX(iHbox), leftBox, FALSE, FALSE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
500
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
501 //Tag labels
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
502 GtkWidget* tagFrame = gtk_frame_new(_("Musepack Tag"));
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
503 gtk_box_pack_start(GTK_BOX(leftBox), tagFrame, FALSE, FALSE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
504 gtk_widget_set_sensitive(tagFrame, TRUE);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
505
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
506 GtkWidget* iTable = gtk_table_new(5, 5, FALSE);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
507 gtk_container_set_border_width(GTK_CONTAINER(iTable), 5);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
508 gtk_container_add(GTK_CONTAINER(tagFrame), iTable);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
509
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
510 mpcGtkTagLabel(_("Title:"), 0, 1, 0, 1, iTable);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
511 GtkWidget* titleEntry = mpcGtkTagEntry(1, 4, 0, 1, 0, iTable);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
512 widgets.titleEntry = titleEntry;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
513
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
514 mpcGtkTagLabel(_("Artist:"), 0, 1, 1, 2, iTable);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
515 GtkWidget* artistEntry = mpcGtkTagEntry(1, 4, 1, 2, 0, iTable);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
516 widgets.artistEntry = artistEntry;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
517
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
518 mpcGtkTagLabel(_("Album:"), 0, 1, 2, 3, iTable);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
519 GtkWidget* albumEntry = mpcGtkTagEntry(1, 4, 2, 3, 0, iTable);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
520 widgets.albumEntry = albumEntry;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
521
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
522 mpcGtkTagLabel(_("Comment:"), 0, 1, 3, 4, iTable);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
523 GtkWidget* commentEntry = mpcGtkTagEntry(1, 4, 3, 4, 0, iTable);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
524 widgets.commentEntry = commentEntry;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
525
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
526 mpcGtkTagLabel(_("Year:"), 0, 1, 4, 5, iTable);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
527 GtkWidget* yearEntry = mpcGtkTagEntry(1, 2, 4, 5, 4, iTable);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
528 widgets.yearEntry = yearEntry;
3035
13a0e4377c20 Don't use deprecated gtk functions
Tomasz Mon <desowin@gmail.com>
parents: 2712
diff changeset
529 gtk_widget_set_size_request(yearEntry, 4, -1);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
530
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
531 mpcGtkTagLabel(_("Track:"), 2, 3, 4, 5, iTable);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
532 GtkWidget* trackEntry = mpcGtkTagEntry(3, 4, 4, 5, 4, iTable);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
533 widgets.trackEntry = trackEntry;
3035
13a0e4377c20 Don't use deprecated gtk functions
Tomasz Mon <desowin@gmail.com>
parents: 2712
diff changeset
534 gtk_widget_set_size_request(trackEntry, 3, -1);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
535
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
536 mpcGtkTagLabel(_("Genre:"), 0, 1, 5, 6, iTable);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
537 GtkWidget* genreEntry = mpcGtkTagEntry(1, 4, 5, 6, 0, iTable);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
538 widgets.genreEntry = genreEntry;
3035
13a0e4377c20 Don't use deprecated gtk functions
Tomasz Mon <desowin@gmail.com>
parents: 2712
diff changeset
539 gtk_widget_set_size_request(genreEntry, 20, -1);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
540
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
541 //Buttons
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
542 GtkWidget* buttonBox = gtk_hbutton_box_new();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
543 gtk_button_box_set_layout(GTK_BUTTON_BOX(buttonBox), GTK_BUTTONBOX_END);
3035
13a0e4377c20 Don't use deprecated gtk functions
Tomasz Mon <desowin@gmail.com>
parents: 2712
diff changeset
544 gtk_box_set_spacing(GTK_BOX(buttonBox), 5);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
545 gtk_box_pack_start(GTK_BOX(leftBox), buttonBox, FALSE, FALSE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
546
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
547 GtkWidget* saveButton = mpcGtkButton(_("Save"), buttonBox);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
548 g_signal_connect(G_OBJECT(saveButton), "clicked", G_CALLBACK(saveTags), NULL);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
549
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
550 GtkWidget* removeButton = mpcGtkButton(_("Remove Tag"), buttonBox);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
551 g_signal_connect_swapped(G_OBJECT(removeButton), "clicked", G_CALLBACK(removeTags), NULL);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
552
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
553 GtkWidget* cancelButton = mpcGtkButton(_("Cancel"), buttonBox);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
554 g_signal_connect_swapped(G_OBJECT(cancelButton), "clicked", G_CALLBACK(closeInfoBox), NULL);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
555 gtk_widget_grab_default(cancelButton);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
556
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
557 //File information
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
558 GtkWidget* infoFrame = gtk_frame_new(_("Musepack Info"));
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
559 gtk_box_pack_start(GTK_BOX(iHbox), infoFrame, FALSE, FALSE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
560
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
561 GtkWidget* infoVbox = gtk_vbox_new(FALSE, 5);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
562 gtk_container_add(GTK_CONTAINER(infoFrame), infoVbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
563 gtk_container_set_border_width(GTK_CONTAINER(infoVbox), 10);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
564 gtk_box_set_spacing(GTK_BOX(infoVbox), 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
565
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
566 GtkWidget* streamLabel = mpcGtkLabel(infoVbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
567 GtkWidget* encoderLabel = mpcGtkLabel(infoVbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
568 GtkWidget* profileLabel = mpcGtkLabel(infoVbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
569 GtkWidget* bitrateLabel = mpcGtkLabel(infoVbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
570 GtkWidget* rateLabel = mpcGtkLabel(infoVbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
571 GtkWidget* channelsLabel = mpcGtkLabel(infoVbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
572 GtkWidget* lengthLabel = mpcGtkLabel(infoVbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
573 GtkWidget* fileSizeLabel = mpcGtkLabel(infoVbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
574 GtkWidget* trackPeakLabel = mpcGtkLabel(infoVbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
575 GtkWidget* trackGainLabel = mpcGtkLabel(infoVbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
576 GtkWidget* albumPeakLabel = mpcGtkLabel(infoVbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
577 GtkWidget* albumGainLabel = mpcGtkLabel(infoVbox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
578
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
579 VFSFile *input = aud_vfs_fopen(p_Filename, "rb");
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
580 if(input)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
581 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
582 mpc_streaminfo info;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
583 mpc_reader_file reader;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
584 mpc_reader_setup_file_vfs(&reader, input);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
585 mpc_streaminfo_read(&info, &reader.reader);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
586
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
587 gint time = static_cast<int> (mpc_streaminfo_get_length(&info));
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
588 gint minutes = time / 60;
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
589 gint seconds = time % 60;
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
590
1304
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
591 mpcGtkPrintLabel(streamLabel, _("Streamversion %d"), info.stream_version);
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
592 mpcGtkPrintLabel(encoderLabel, _("Encoder: %s"), info.encoder);
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
593 mpcGtkPrintLabel(profileLabel, _("Profile: %s"), info.profile_name);
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
594 mpcGtkPrintLabel(bitrateLabel, _("Average bitrate: %6.1f kbps"), info.average_bitrate * 1.e-3);
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
595 mpcGtkPrintLabel(rateLabel, _("Samplerate: %d Hz"), info.sample_freq);
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
596 mpcGtkPrintLabel(channelsLabel, _("Channels: %d"), info.channels);
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
597 mpcGtkPrintLabel(lengthLabel, _("Length: %d:\%.2d"), minutes, seconds);
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
598 mpcGtkPrintLabel(fileSizeLabel, _("File size: %d Bytes"), info.total_file_length);
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
599 mpcGtkPrintLabel(trackPeakLabel, _("Track Peak: %5u"), info.peak_title);
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
600 mpcGtkPrintLabel(trackGainLabel, _("Track Gain: %-+2.2f dB"), 0.01 * info.gain_title);
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
601 mpcGtkPrintLabel(albumPeakLabel, _("Album Peak: %5u"), info.peak_album);
f34112ab9101 As usual, "i18n" modifications.
Stany HENRY <StrassBoy@gmail.com>
parents: 1185
diff changeset
602 mpcGtkPrintLabel(albumGainLabel, _("Album Gain: %-+5.2f dB"), 0.01 * info.gain_album);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
603
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
604 MpcInfo tags = getTags(p_Filename);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
605 gtk_entry_set_text(GTK_ENTRY(titleEntry), tags.title);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
606 gtk_entry_set_text(GTK_ENTRY(artistEntry), tags.artist);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
607 gtk_entry_set_text(GTK_ENTRY(albumEntry), tags.album);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
608 gtk_entry_set_text(GTK_ENTRY(commentEntry), tags.comment);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
609 gtk_entry_set_text(GTK_ENTRY(genreEntry), tags.genre);
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
610 gchar* entry = g_strdup_printf ("%d", tags.track);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
611 gtk_entry_set_text(GTK_ENTRY(trackEntry), entry);
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
612 g_free(entry);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
613 entry = g_strdup_printf ("%d", tags.year);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
614 gtk_entry_set_text(GTK_ENTRY(yearEntry), entry);
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
615 g_free(entry);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
616 entry = g_filename_display_name(p_Filename);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
617 gtk_entry_set_text(GTK_ENTRY(fileEntry), entry);
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
618 g_free(entry);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
619 freeTags(tags);
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
620 aud_vfs_fclose(input);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
621 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
622 else
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
623 {
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
624 gchar* temp = g_strdup_printf("[xmms-musepack] mpcFileInfoBox is unable to read tags from %s", p_Filename);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
625 perror(temp);
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
626 g_free(temp);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
627 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
628
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
629 gchar* name = g_filename_display_basename(p_Filename);
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
630 gchar* text = g_strdup_printf(_("File Info - %s"), name);
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
631 g_free(name);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
632 gtk_window_set_title(GTK_WINDOW(infoBox), text);
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
633 g_free(text);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
634
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
635 gtk_widget_show_all(infoBox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
636 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
637 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
638
1044
b1128efde471 [svn] - get rid of all warnings gcc 4.2.0 emits with my build configuration.
yaz
parents: 659
diff changeset
639 static void mpcGtkPrintLabel(GtkWidget* widget, const char* format,...)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
640 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
641 va_list args;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
642
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
643 va_start(args, format);
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
644 gchar* temp = g_strdup_vprintf(format, args);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
645 va_end(args);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
646
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
647 gtk_label_set_text(GTK_LABEL(widget), temp);
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
648 g_free(temp);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
649 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
650
1044
b1128efde471 [svn] - get rid of all warnings gcc 4.2.0 emits with my build configuration.
yaz
parents: 659
diff changeset
651 static GtkWidget* mpcGtkTagLabel(const char* p_Text, int a, int b, int c, int d, GtkWidget* p_Box)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
652 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
653 GtkWidget* label = gtk_label_new(p_Text);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
654 gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
655 gtk_table_attach(GTK_TABLE(p_Box), label, a, b, c, d, GTK_FILL, GTK_FILL, 5, 5);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
656 return label;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
657 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
658
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
659 static GtkWidget* mpcGtkTagEntry(int a, int b, int c, int d, int p_Size, GtkWidget* p_Box)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
660 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
661 GtkWidget* entry;
3035
13a0e4377c20 Don't use deprecated gtk functions
Tomasz Mon <desowin@gmail.com>
parents: 2712
diff changeset
662 entry = gtk_entry_new();
13a0e4377c20 Don't use deprecated gtk functions
Tomasz Mon <desowin@gmail.com>
parents: 2712
diff changeset
663 if(p_Size)
13a0e4377c20 Don't use deprecated gtk functions
Tomasz Mon <desowin@gmail.com>
parents: 2712
diff changeset
664 gtk_entry_set_max_length(GTK_ENTRY(entry), p_Size);
13a0e4377c20 Don't use deprecated gtk functions
Tomasz Mon <desowin@gmail.com>
parents: 2712
diff changeset
665
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
666 gtk_table_attach(GTK_TABLE(p_Box), entry, a, b, c, d,
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
667 (GtkAttachOptions) (GTK_FILL | GTK_EXPAND | GTK_SHRINK),
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
668 (GtkAttachOptions) (GTK_FILL | GTK_EXPAND | GTK_SHRINK), 0, 5);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
669 return entry;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
670 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
671
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
672 static GtkWidget* mpcGtkLabel(GtkWidget* p_Box)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
673 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
674 GtkWidget* label = gtk_label_new("");
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
675 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
676 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
677 gtk_box_pack_start(GTK_BOX(p_Box), label, FALSE, FALSE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
678 return label;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
679 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
680
1044
b1128efde471 [svn] - get rid of all warnings gcc 4.2.0 emits with my build configuration.
yaz
parents: 659
diff changeset
681 static GtkWidget* mpcGtkButton(const char* p_Text, GtkWidget* p_Box)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
682 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
683 GtkWidget* button = gtk_button_new_with_label(p_Text);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
684 GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
685 gtk_box_pack_start(GTK_BOX(p_Box), button, TRUE, TRUE, 0);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
686 return button;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
687 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
688
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
689 static void removeTags(GtkWidget * w, gpointer data)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
690 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
691 File oFile(gtk_entry_get_text(GTK_ENTRY(widgets.fileEntry)));
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
692 oFile.remove();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
693 oFile.save();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
694 closeInfoBox(NULL, NULL);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
695 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
696
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
697 static void saveTags(GtkWidget* w, gpointer data)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
698 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
699 File oFile(gtk_entry_get_text(GTK_ENTRY(widgets.fileEntry)));
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
700 Tag* poTag = oFile.tag();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
701
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
702 gchar* cAlbum = g_strdup(gtk_entry_get_text(GTK_ENTRY(widgets.albumEntry)));
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
703 gchar* cArtist = g_strdup(gtk_entry_get_text(GTK_ENTRY(widgets.artistEntry)));
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
704 gchar* cTitle = g_strdup(gtk_entry_get_text(GTK_ENTRY(widgets.titleEntry)));
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
705 gchar* cGenre = g_strdup(gtk_entry_get_text(GTK_ENTRY(widgets.genreEntry)));
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
706 gchar* cComment = g_strdup(gtk_entry_get_text(GTK_ENTRY(widgets.commentEntry)));
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
707
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
708 const String album = String(cAlbum, TagLib::String::UTF8);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
709 const String artist = String(cArtist, TagLib::String::UTF8);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
710 const String title = String(cTitle, TagLib::String::UTF8);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
711 const String genre = String(cGenre, TagLib::String::UTF8);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
712 const String comment = String(cComment, TagLib::String::UTF8);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
713
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
714 poTag->setAlbum(album);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
715 poTag->setArtist(artist);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
716 poTag->setTitle(title);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
717 poTag->setGenre(genre);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
718 poTag->setComment(comment);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
719 poTag->setYear(atoi(gtk_entry_get_text(GTK_ENTRY(widgets.yearEntry))));
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
720 poTag->setTrack(atoi(gtk_entry_get_text(GTK_ENTRY(widgets.trackEntry))));
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
721
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
722 g_free(cAlbum);
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
723 g_free(cArtist);
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
724 g_free(cTitle);
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
725 g_free(cGenre);
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
726 g_free(cComment);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
727
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
728 oFile.save();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
729 closeInfoBox(NULL, NULL);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
730 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
731
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
732 static void closeInfoBox(GtkWidget* w, gpointer data)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
733 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
734 gtk_widget_destroy(widgets.infoBox);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
735 widgets.infoBox = NULL;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
736 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
737
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
738 static char* mpcGenerateTitle(const MpcInfo& p_Tags, gchar* p_Filename)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
739 {
1438
dc3e28d3b92a mpc: convert, wma: fixes
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
740 Tuple* tuple = mpcGetSongTuple(p_Filename);
dc3e28d3b92a mpc: convert, wma: fixes
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
741
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
742 gchar* title = aud_tuple_formatter_make_title_string(tuple, aud_get_gentitle_format());
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
743
1976
5fa26178eaef s/tuple_/aud_tuple_/g
William Pitcock <nenolod@atheme.org>
parents: 1704
diff changeset
744 aud_tuple_free((void *) tuple);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
745 return title;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
746 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
747
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
748 static void* endThread(gchar* p_FileName, VFSFile * p_FileHandle, bool release)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
749 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
750 if(release)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
751 lockRelease();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
752 if(mpcDecoder.isError)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
753 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
754 perror(mpcDecoder.isError);
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
755 g_free(mpcDecoder.isError);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
756 mpcDecoder.isError = NULL;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
757 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
758 setAlive(false);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
759 if(p_FileHandle)
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
760 aud_vfs_fclose(p_FileHandle);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
761 if(track.display)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
762 {
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
763 g_free(track.display);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
764 track.display = NULL;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
765 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
766 return 0;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
767 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
768
1986
4b78df9dcf93 more set_params()
William Pitcock <nenolod@atheme.org>
parents: 1978
diff changeset
769 static void* decodeStream(InputPlayback *data)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
770 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
771 lockAcquire();
2119
5fea114ca11e Use a #define for config ID.
Matti Hamalainen <ccr@tnsp.org>
parents: 2116
diff changeset
772 gchar* filename = data->filename;
1978
fa9f85cebade s/vfs_/aud_vfs_/g
William Pitcock <nenolod@atheme.org>
parents: 1976
diff changeset
773 VFSFile *input = aud_vfs_fopen(filename, "rb");
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
774 if (!input)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
775 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
776 mpcDecoder.isError = g_strdup_printf("[xmms-musepack] decodeStream is unable to open %s", filename);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
777 return endThread(filename, input, true);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
778 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
779
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
780 mpc_reader_file reader;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
781 mpc_reader_setup_file_vfs(&reader, input);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
782
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
783 mpc_streaminfo info;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
784 if (mpc_streaminfo_read(&info, &reader.reader) != ERROR_CODE_OK)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
785 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
786 mpcDecoder.isError = g_strdup_printf("[xmms-musepack] decodeStream is unable to read %s", filename);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
787 return endThread(filename, input, true);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
788 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
789
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
790 MpcInfo tags = getTags(filename);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
791 track.display = mpcGenerateTitle(tags, filename);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
792 track.length = static_cast<int> (1000 * mpc_streaminfo_get_length(&info));
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
793 track.bitrate = static_cast<int> (info.average_bitrate);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
794 track.sampleFreq = info.sample_freq;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
795 track.channels = info.channels;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
796 freeTags(tags);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
797
1986
4b78df9dcf93 more set_params()
William Pitcock <nenolod@atheme.org>
parents: 1978
diff changeset
798 data->set_params(data, track.display, track.length, track.bitrate, track.sampleFreq, track.channels);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
799
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
800 mpc_decoder decoder;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
801 mpc_decoder_setup(&decoder, &reader.reader);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
802 if (!mpc_decoder_initialize(&decoder, &info))
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
803 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
804 mpcDecoder.isError = g_strdup_printf("[xmms-musepack] decodeStream is unable to initialize decoder on %s", filename);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
805 return endThread(filename, input, true);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
806 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
807
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
808 setReplaygain(info, decoder);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
809
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
810 MPC_SAMPLE_FORMAT sampleBuffer[MPC_DECODER_BUFFER_LENGTH];
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
811 char xmmsBuffer[MPC_DECODER_BUFFER_LENGTH * 4];
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
812
2709
04249b58c738 Remove references to output plugin field in InputPlugins (hopefully I didn't
Matti Hamalainen <ccr@tnsp.org>
parents: 2699
diff changeset
813 if (!data->output->open_audio(FMT_S16_LE, track.sampleFreq, track.channels))
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
814 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
815 mpcDecoder.isError = g_strdup_printf("[xmms-musepack] decodeStream is unable to open an audio output");
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
816 return endThread(filename, input, true);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
817 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
818 else
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
819 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
820 mpcDecoder.isOutput = true;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
821 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
822
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
823 lockRelease();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
824
2111
ac599b9b0490 Use GLib types; Also g_free() MUST be used when memory is allocated via any
Matti Hamalainen <ccr@tnsp.org>
parents: 2055
diff changeset
825 gint counter = 2 * track.sampleFreq / 3;
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
826 while (isAlive())
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
827 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
828 if (getOffset() != -1)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
829 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
830 mpc_decoder_seek_seconds(&decoder, mpcDecoder.offset);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
831 setOffset(-1);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
832 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
833
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
834 lockAcquire();
2709
04249b58c738 Remove references to output plugin field in InputPlugins (hopefully I didn't
Matti Hamalainen <ccr@tnsp.org>
parents: 2699
diff changeset
835 short iPlaying = data->output->buffer_playing()? 1 : 0;
04249b58c738 Remove references to output plugin field in InputPlugins (hopefully I didn't
Matti Hamalainen <ccr@tnsp.org>
parents: 2699
diff changeset
836 gint iFree = data->output->buffer_free();
04249b58c738 Remove references to output plugin field in InputPlugins (hopefully I didn't
Matti Hamalainen <ccr@tnsp.org>
parents: 2699
diff changeset
837 if (!mpcDecoder.isPause && iFree >= ((1152 * 4) << iPlaying))
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
838 {
1998
8f3188746b64 chase last changeset in aud
William Pitcock <nenolod@atheme.org>
parents: 1986
diff changeset
839 unsigned status = processBuffer(data, sampleBuffer, xmmsBuffer, decoder);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
840 if (status == (unsigned) (-1))
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
841 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
842 mpcDecoder.isError = g_strdup_printf("[xmms-musepack] error from internal decoder on %s", filename);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
843 return endThread(filename, input, true);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
844 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
845 if (status == 0 && iPlaying == 0)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
846 return endThread(filename, input, true);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
847
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
848 lockRelease();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
849
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
850 if(pluginConfig.dynamicBitrate)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
851 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
852 counter -= status;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
853 if(counter < 0)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
854 {
1986
4b78df9dcf93 more set_params()
William Pitcock <nenolod@atheme.org>
parents: 1978
diff changeset
855 data->set_params(data, track.display, track.length, track.bitrate, track.sampleFreq, track.channels);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
856 counter = 2 * track.sampleFreq / 3;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
857 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
858 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
859 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
860 else
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
861 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
862 lockRelease();
1676
aee4ebea943a xmms_usleep() was removed, use g_usleep()
Matti Hamalainen <ccr@tnsp.org>
parents: 1621
diff changeset
863 g_usleep(10000);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
864 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
865 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
866 return endThread(filename, input, false);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
867 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
868
1998
8f3188746b64 chase last changeset in aud
William Pitcock <nenolod@atheme.org>
parents: 1986
diff changeset
869 static int processBuffer(InputPlayback *playback,
8f3188746b64 chase last changeset in aud
William Pitcock <nenolod@atheme.org>
parents: 1986
diff changeset
870 MPC_SAMPLE_FORMAT* sampleBuffer, char* xmmsBuffer, mpc_decoder& decoder)
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
871 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
872 mpc_uint32_t vbrAcc = 0;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
873 mpc_uint32_t vbrUpd = 0;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
874
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
875 unsigned status = mpc_decoder_decode(&decoder, sampleBuffer, &vbrAcc, &vbrUpd);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
876 copyBuffer(sampleBuffer, xmmsBuffer, status);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
877
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
878 if (pluginConfig.dynamicBitrate)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
879 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
880 track.bitrate = static_cast<int> (vbrUpd * track.sampleFreq / 1152);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
881 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
882
1998
8f3188746b64 chase last changeset in aud
William Pitcock <nenolod@atheme.org>
parents: 1986
diff changeset
883 playback->pass_audio(playback, FMT_S16_LE, track.channels, status * 4, xmmsBuffer, NULL);
232
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
884 return status;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
885 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
886
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
887 static void setReplaygain(mpc_streaminfo& info, mpc_decoder& decoder)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
888 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
889 if(!pluginConfig.replaygain && !pluginConfig.clipPrevention)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
890 return;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
891
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
892 int peak = pluginConfig.albumGain ? info.peak_album : info.peak_title;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
893 double gain = pluginConfig.albumGain ? info.gain_album : info.gain_title;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
894
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
895 if(!peak)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
896 peak = 32767;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
897 if(!gain)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
898 gain = 1.;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
899
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
900 double clip = 32767. / peak;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
901 gain = exp((M_LN10 / 2000.) * gain);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
902
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
903 if(pluginConfig.clipPrevention && !pluginConfig.replaygain)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
904 gain = clip;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
905 else if(pluginConfig.replaygain && pluginConfig.clipPrevention)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
906 if(clip < gain)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
907 gain = clip;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
908
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
909 mpc_decoder_scale_output(&decoder, gain);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
910 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
911
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
912 inline static void lockAcquire()
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
913 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
914 g_static_mutex_lock(&threadMutex);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
915 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
916
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
917 inline static void lockRelease()
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
918 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
919 g_static_mutex_unlock(&threadMutex);
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
920 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
921
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
922 inline static bool isAlive()
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
923 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
924 lockAcquire();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
925 bool isAlive = mpcDecoder.isAlive;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
926 lockRelease();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
927 return isAlive;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
928 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
929
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
930 inline static bool isPause()
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
931 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
932 lockAcquire();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
933 bool isPause = mpcDecoder.isPause;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
934 lockRelease();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
935 return isPause;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
936 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
937
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
938 inline static void setAlive(bool isAlive)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
939 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
940 lockAcquire();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
941 mpcDecoder.isAlive = isAlive;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
942 lockRelease();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
943 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
944
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
945 inline static double getOffset()
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
946 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
947 lockAcquire();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
948 double offset = mpcDecoder.offset;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
949 lockRelease();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
950 return offset;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
951 }
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
952
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
953 inline static void setOffset(double offset)
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
954 {
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
955 lockAcquire();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
956 mpcDecoder.offset = offset;
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
957 lockRelease();
6c78d6d3cdb7 [svn] - put musepack support back
nenolod
parents:
diff changeset
958 }