annotate src/wavpack/libwavpack.cxx @ 1600:49fe2225d236

Simplify and clean up codec name string setting.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 05 Sep 2007 07:38:21 +0300
parents 56b0d46a02f6
children 87a52bc00926
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1436
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
1 #include <string>
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
2
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
3 #include <assert.h>
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
4 #include <string.h>
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
5 #include <stdio.h>
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
6 #include <stdlib.h>
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
7 #include <unistd.h>
291
93c0da3f7a86 [svn] - make wavpack/wavpack.h include forced extern "C".
nenolod
parents: 284
diff changeset
8 extern "C" {
284
72f0de06bb56 [svn] - wavpack/wputils.h is deprecated, wavpack/wavpack.h should be used instead.
nenolod
parents: 264
diff changeset
9 #include <wavpack/wavpack.h>
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
10 #include <audacious/plugin.h>
111
5745352e0c88 [svn] - hey, this compiles now. neat :P
nenolod
parents: 109
diff changeset
11 #include <audacious/output.h>
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
12 #include <audacious/configdb.h>
1436
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
13 #include <audacious/main.h>
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
14 #include <audacious/util.h>
233
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
15 #include <audacious/vfs.h>
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
16 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
17 #include <glib.h>
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
18 #include <gtk/gtk.h>
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
19 #include <iconv.h>
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
20 #include <math.h>
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
21 #include "tags.h"
434
7385182ae4b8 [svn] - add missing config.h inclusion for wavpack, null and metronom plugin
giacomo
parents: 372
diff changeset
22 #include "../../config.h"
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
23 #ifndef M_LN10
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
24 #define M_LN10 2.3025850929940456840179914546843642
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
25 #endif
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
26
112
5755fb99ddab [svn] - make debugging notices optional
nenolod
parents: 111
diff changeset
27 #ifdef DEBUG
5755fb99ddab [svn] - make debugging notices optional
nenolod
parents: 111
diff changeset
28 # define DBG(format, args...) fprintf(stderr, format, ## args)
5755fb99ddab [svn] - make debugging notices optional
nenolod
parents: 111
diff changeset
29 #else
5755fb99ddab [svn] - make debugging notices optional
nenolod
parents: 111
diff changeset
30 # define DBG(format, args...)
5755fb99ddab [svn] - make debugging notices optional
nenolod
parents: 111
diff changeset
31 #endif
5755fb99ddab [svn] - make debugging notices optional
nenolod
parents: 111
diff changeset
32
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
33 #define BUFFER_SIZE 256 // read buffer size, in samples
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
34
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
35 static void wv_load_config();
253
ab24cfe495e0 [svn] Port to NewVFS file probe & add explicit cast to silence warning, thanks to spb.
chainsaw
parents: 247
diff changeset
36 static int wv_is_our_fd(gchar *filename, VFSFile *file);
1526
56b0d46a02f6 wavpack: Implement InputPlugin::probe_for_tuple.
William Pitcock <nenolod@atheme-project.org>
parents: 1521
diff changeset
37 static Tuple *wv_probe_for_tuple(gchar *filename, VFSFile *file);
566
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
38 static void wv_play(InputPlayback *);
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
39 static void wv_stop(InputPlayback *);
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
40 static void wv_pause(InputPlayback *, short);
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
41 static void wv_seek(InputPlayback *, int);
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
42 static int wv_get_time(InputPlayback *);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
43 static void wv_get_song_info(char *, char **, int *);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
44 static char *generate_title(const char *, WavpackContext *ctx);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
45 static double isSeek;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
46 static short paused;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
47 static bool killDecodeThread;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
48 static bool AudioError;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
49 static GThread *thread_handle;
1436
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
50 static Tuple *wv_get_song_tuple(char *);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
51
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
52 // in ui.cpp
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
53 void wv_configure();
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
54 void wv_about_box(void);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
55 void wv_file_info_box(char *);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
56 extern gboolean clipPreventionEnabled;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
57 extern gboolean dynBitrateEnabled;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
58 extern gboolean replaygainEnabled;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
59 extern gboolean albumReplaygainEnabled;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
60 extern gboolean openedAudio;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
61
1044
b1128efde471 [svn] - get rid of all warnings gcc 4.2.0 emits with my build configuration.
yaz
parents: 566
diff changeset
62 const gchar *wv_fmts[] = { "wv", NULL };
372
a157306caf03 [svn] - finalize the plugin-side of the extension-assist ABI
nenolod
parents: 368
diff changeset
63
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
64 InputPlugin mod = {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
65 NULL, //handle
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
66 NULL, //filename
1185
6d749f573b3b suppress warnings.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1128
diff changeset
67 (gchar *)"WavPack Audio Plugin",
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
68 wv_load_config,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
69 wv_about_box,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
70 wv_configure,
332
626f9f4d79a8 [svn] Remove old-style is_our_file() where a new-style is_our_fd() exists
kiyoshi
parents: 291
diff changeset
71 NULL,
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
72 NULL, //no use
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
73 wv_play,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
74 wv_stop,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
75 wv_pause,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
76 wv_seek,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
77 NULL, //set eq
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
78 wv_get_time,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
79 NULL, //get volume
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
80 NULL, //set volume
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
81 NULL, //cleanup
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
82 NULL, //obsolete
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
83 NULL, //add_vis
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
84 NULL,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
85 NULL,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
86 wv_get_song_info,
263
7e1d5cc9ef1b [svn] - fix wavpack plugin
nenolod
parents: 253
diff changeset
87 wv_file_info_box, //info box
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
88 NULL, //output
114
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
89 wv_get_song_tuple,
253
ab24cfe495e0 [svn] Port to NewVFS file probe & add explicit cast to silence warning, thanks to spb.
chainsaw
parents: 247
diff changeset
90 NULL,
ab24cfe495e0 [svn] Port to NewVFS file probe & add explicit cast to silence warning, thanks to spb.
chainsaw
parents: 247
diff changeset
91 NULL,
ab24cfe495e0 [svn] Port to NewVFS file probe & add explicit cast to silence warning, thanks to spb.
chainsaw
parents: 247
diff changeset
92 wv_is_our_fd,
1044
b1128efde471 [svn] - get rid of all warnings gcc 4.2.0 emits with my build configuration.
yaz
parents: 566
diff changeset
93 (gchar **)wv_fmts,
1526
56b0d46a02f6 wavpack: Implement InputPlugin::probe_for_tuple.
William Pitcock <nenolod@atheme-project.org>
parents: 1521
diff changeset
94 NULL, // high precision seeking
56b0d46a02f6 wavpack: Implement InputPlugin::probe_for_tuple.
William Pitcock <nenolod@atheme-project.org>
parents: 1521
diff changeset
95 wv_probe_for_tuple // probe for a tuple
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
96 };
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
97
233
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
98 int32_t read_bytes (void *id, void *data, int32_t bcount)
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
99 {
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
100 return vfs_fread (data, 1, bcount, (VFSFile *) id);
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
101 }
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
102
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
103 uint32_t get_pos (void *id)
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
104 {
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
105 return vfs_ftell ((VFSFile *) id);
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
106 }
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
107
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
108 int set_pos_abs (void *id, uint32_t pos)
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
109 {
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
110 return vfs_fseek ((VFSFile *) id, pos, SEEK_SET);
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
111 }
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
112
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
113 int set_pos_rel (void *id, int32_t delta, int mode)
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
114 {
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
115 return vfs_fseek ((VFSFile *) id, delta, mode);
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
116 }
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
117
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
118 int push_back_byte (void *id, int c)
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
119 {
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
120 return vfs_ungetc (c, (VFSFile *) id);
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
121 }
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
122
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
123 uint32_t get_length (void *id)
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
124 {
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
125 VFSFile *file = (VFSFile *) id;
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
126 uint32_t sz = 0;
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
127
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
128 if (file == NULL)
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
129 return 0;
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
130
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
131 vfs_fseek(file, 0, SEEK_END);
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
132 sz = vfs_ftell(file);
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
133 vfs_fseek(file, 0, SEEK_SET);
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
134
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
135 return sz;
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
136 }
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
137
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
138 /* XXX streams?? */
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
139 int can_seek (void *id)
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
140 {
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
141 return 1;
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
142 }
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
143
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
144 int32_t write_bytes (void *id, void *data, int32_t bcount)
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
145 {
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
146 return vfs_fwrite (data, 1, bcount, (VFSFile *) id);
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
147 }
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
148
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
149 WavpackStreamReader reader = {
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
150 read_bytes, get_pos, set_pos_abs, set_pos_rel, push_back_byte, get_length, can_seek,
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
151 write_bytes
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
152 };
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
153
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
154 class WavpackDecoder
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
155 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
156 public:
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
157 InputPlugin *mod;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
158 int32_t *input;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
159 int16_t *output;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
160 int sample_rate;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
161 int num_channels;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
162 WavpackContext *ctx;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
163 char error_buff[4096]; // TODO: fixme!
233
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
164 VFSFile *wv_Input, *wvc_Input;
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
165
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
166 WavpackDecoder(InputPlugin *mod) : mod(mod)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
167 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
168 ctx = NULL;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
169 input = NULL;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
170 output = NULL;
1520
2ed7413c199a wavpack fixes
William Pitcock <nenolod@atheme-project.org>
parents: 1501
diff changeset
171 wv_Input = NULL;
2ed7413c199a wavpack fixes
William Pitcock <nenolod@atheme-project.org>
parents: 1501
diff changeset
172 wvc_Input = NULL;
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
173 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
174
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
175 ~WavpackDecoder()
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
176 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
177 if (input != NULL) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
178 free(input);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
179 input = NULL;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
180 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
181 if (output != NULL) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
182 free(output);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
183 output = NULL;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
184 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
185 if (ctx != NULL) {
1520
2ed7413c199a wavpack fixes
William Pitcock <nenolod@atheme-project.org>
parents: 1501
diff changeset
186 if (wv_Input)
2ed7413c199a wavpack fixes
William Pitcock <nenolod@atheme-project.org>
parents: 1501
diff changeset
187 vfs_fclose(wv_Input);
2ed7413c199a wavpack fixes
William Pitcock <nenolod@atheme-project.org>
parents: 1501
diff changeset
188
2ed7413c199a wavpack fixes
William Pitcock <nenolod@atheme-project.org>
parents: 1501
diff changeset
189 if (wvc_Input)
2ed7413c199a wavpack fixes
William Pitcock <nenolod@atheme-project.org>
parents: 1501
diff changeset
190 vfs_fclose(wvc_Input);
233
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
191 g_free(ctx);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
192 ctx = NULL;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
193 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
194 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
195
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
196 bool attach(const char *filename)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
197 {
233
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
198 wv_Input = vfs_fopen(filename, "rb");
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
199
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
200 char *corrFilename = g_strconcat(filename, "c", NULL);
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
201
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
202 wvc_Input = vfs_fopen(corrFilename, "rb");
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
203
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
204 g_free(corrFilename);
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
205
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
206 ctx = WavpackOpenFileInputEx(&reader, wv_Input, wvc_Input, error_buff, OPEN_TAGS | OPEN_WVC, 0);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
207
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
208 if (ctx == NULL) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
209 return false;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
210 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
211
237
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
212 return true;
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
213 }
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
214
1520
2ed7413c199a wavpack fixes
William Pitcock <nenolod@atheme-project.org>
parents: 1501
diff changeset
215 bool attach(gchar *filename, VFSFile *wvi)
1501
04f8c7624ea3 Support Wavpack ".exe" executables, by using the Wavpack decoder to validate.
William Pitcock <nenolod@atheme-project.org>
parents: 1465
diff changeset
216 {
1520
2ed7413c199a wavpack fixes
William Pitcock <nenolod@atheme-project.org>
parents: 1501
diff changeset
217 ctx = WavpackOpenFileInputEx(&reader, wvi, NULL, error_buff, OPEN_TAGS, 0);
1501
04f8c7624ea3 Support Wavpack ".exe" executables, by using the Wavpack decoder to validate.
William Pitcock <nenolod@atheme-project.org>
parents: 1465
diff changeset
218
04f8c7624ea3 Support Wavpack ".exe" executables, by using the Wavpack decoder to validate.
William Pitcock <nenolod@atheme-project.org>
parents: 1465
diff changeset
219 if (ctx == NULL)
04f8c7624ea3 Support Wavpack ".exe" executables, by using the Wavpack decoder to validate.
William Pitcock <nenolod@atheme-project.org>
parents: 1465
diff changeset
220 return false;
04f8c7624ea3 Support Wavpack ".exe" executables, by using the Wavpack decoder to validate.
William Pitcock <nenolod@atheme-project.org>
parents: 1465
diff changeset
221
04f8c7624ea3 Support Wavpack ".exe" executables, by using the Wavpack decoder to validate.
William Pitcock <nenolod@atheme-project.org>
parents: 1465
diff changeset
222 return true;
04f8c7624ea3 Support Wavpack ".exe" executables, by using the Wavpack decoder to validate.
William Pitcock <nenolod@atheme-project.org>
parents: 1465
diff changeset
223 }
04f8c7624ea3 Support Wavpack ".exe" executables, by using the Wavpack decoder to validate.
William Pitcock <nenolod@atheme-project.org>
parents: 1465
diff changeset
224
237
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
225 bool attach_to_play(const char *filename)
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
226 {
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
227 wv_Input = vfs_fopen(filename, "rb");
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
228
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
229 char *corrFilename = g_strconcat(filename, "c", NULL);
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
230
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
231 wvc_Input = vfs_fopen(corrFilename, "rb");
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
232
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
233 g_free(corrFilename);
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
234
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
235 ctx = WavpackOpenFileInputEx(&reader, wv_Input, wvc_Input, error_buff, OPEN_TAGS | OPEN_WVC, 0);
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
236
1501
04f8c7624ea3 Support Wavpack ".exe" executables, by using the Wavpack decoder to validate.
William Pitcock <nenolod@atheme-project.org>
parents: 1465
diff changeset
237 if (ctx == NULL)
237
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
238 return false;
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
239
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
240 sample_rate = WavpackGetSampleRate(ctx);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
241 num_channels = WavpackGetNumChannels(ctx);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
242 input = (int32_t *)calloc(BUFFER_SIZE, num_channels * sizeof(int32_t));
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
243 output = (int16_t *)calloc(BUFFER_SIZE, num_channels * sizeof(int16_t));
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
244 mod->set_info(generate_title(filename, ctx),
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
245 (int) (WavpackGetNumSamples(ctx) / sample_rate) * 1000,
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
246 (int) WavpackGetAverageBitrate(ctx, num_channels),
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
247 (int) sample_rate, num_channels);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
248 return true;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
249 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
250
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
251 bool open_audio()
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
252 {
112
5755fb99ddab [svn] - make debugging notices optional
nenolod
parents: 111
diff changeset
253 return mod->output->open_audio(FMT_S16_NE, sample_rate, num_channels);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
254 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
255
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
256 void process_buffer(size_t num_samples)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
257 {
1501
04f8c7624ea3 Support Wavpack ".exe" executables, by using the Wavpack decoder to validate.
William Pitcock <nenolod@atheme-project.org>
parents: 1465
diff changeset
258 /* TODO: dithering */
04f8c7624ea3 Support Wavpack ".exe" executables, by using the Wavpack decoder to validate.
William Pitcock <nenolod@atheme-project.org>
parents: 1465
diff changeset
259 for (int i = 0; i < num_samples * num_channels; i++)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
260 output[i] = input[i];
1501
04f8c7624ea3 Support Wavpack ".exe" executables, by using the Wavpack decoder to validate.
William Pitcock <nenolod@atheme-project.org>
parents: 1465
diff changeset
261
112
5755fb99ddab [svn] - make debugging notices optional
nenolod
parents: 111
diff changeset
262 produce_audio(mod->output->output_time(), FMT_S16_NE,
111
5745352e0c88 [svn] - hey, this compiles now. neat :P
nenolod
parents: 109
diff changeset
263 num_channels,
5745352e0c88 [svn] - hey, this compiles now. neat :P
nenolod
parents: 109
diff changeset
264 num_samples * num_channels * sizeof(int16_t),
5745352e0c88 [svn] - hey, this compiles now. neat :P
nenolod
parents: 109
diff changeset
265 output,
5745352e0c88 [svn] - hey, this compiles now. neat :P
nenolod
parents: 109
diff changeset
266 NULL);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
267 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
268 };
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
269
1080
b51246bc3fb3 [svn] - wavpack: transition to plugin API v2
nenolod
parents: 1044
diff changeset
270 InputPlugin *wv_iplist[] = { &mod, NULL };
b51246bc3fb3 [svn] - wavpack: transition to plugin API v2
nenolod
parents: 1044
diff changeset
271
1395
761e17b23e0c added Discovery plugin type
Cristi Magherusan <majeru@atheme-project.org>
parents: 1354
diff changeset
272 DECLARE_PLUGIN(wavpack, NULL, NULL, wv_iplist, NULL, NULL, NULL, NULL,NULL);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
273
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
274 static int
253
ab24cfe495e0 [svn] Port to NewVFS file probe & add explicit cast to silence warning, thanks to spb.
chainsaw
parents: 247
diff changeset
275 wv_is_our_fd(gchar *filename, VFSFile *file)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
276 {
1501
04f8c7624ea3 Support Wavpack ".exe" executables, by using the Wavpack decoder to validate.
William Pitcock <nenolod@atheme-project.org>
parents: 1465
diff changeset
277 WavpackDecoder d(&mod);
04f8c7624ea3 Support Wavpack ".exe" executables, by using the Wavpack decoder to validate.
William Pitcock <nenolod@atheme-project.org>
parents: 1465
diff changeset
278
04f8c7624ea3 Support Wavpack ".exe" executables, by using the Wavpack decoder to validate.
William Pitcock <nenolod@atheme-project.org>
parents: 1465
diff changeset
279 if (d.attach(filename, file))
253
ab24cfe495e0 [svn] Port to NewVFS file probe & add explicit cast to silence warning, thanks to spb.
chainsaw
parents: 247
diff changeset
280 return TRUE;
1501
04f8c7624ea3 Support Wavpack ".exe" executables, by using the Wavpack decoder to validate.
William Pitcock <nenolod@atheme-project.org>
parents: 1465
diff changeset
281
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
282 return FALSE;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
283 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
284
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
285 void
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
286 load_tag(ape_tag *tag, WavpackContext *ctx)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
287 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
288 memset(tag, 0, sizeof(ape_tag));
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
289 WavpackGetTagItem(ctx, "Album", tag->album, sizeof(tag->album));
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
290 WavpackGetTagItem(ctx, "Artist", tag->artist, sizeof(tag->artist));
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
291 WavpackGetTagItem(ctx, "Comment", tag->comment, sizeof(tag->comment));
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
292 WavpackGetTagItem(ctx, "Genre", tag->genre, sizeof(tag->genre));
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
293 WavpackGetTagItem(ctx, "Title", tag->title, sizeof(tag->title));
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
294 WavpackGetTagItem(ctx, "Track", tag->track, sizeof(tag->track));
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
295 WavpackGetTagItem(ctx, "Year", tag->year, sizeof(tag->year));
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
296 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
297
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
298 static void *
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
299 end_thread()
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
300 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
301 return 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
302 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
303
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
304 static void *
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
305 DecodeThread(void *a)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
306 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
307 ape_tag tag;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
308 char *filename = (char *) a;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
309 int bps_updateCounter = 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
310 int bps;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
311 int i;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
312 WavpackDecoder d(&mod);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
313
237
f0117679cd26 [svn] - a slightly better way of doing things here
nenolod
parents: 233
diff changeset
314 if (!d.attach_to_play(filename)) {
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
315 killDecodeThread = true;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
316 return end_thread();
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
317 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
318 bps = WavpackGetBytesPerSample(d.ctx) * d.num_channels;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
319 DBG("reading %s at %d rate with %d channels\n", filename, d.sample_rate, d.num_channels);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
320
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
321 if (!d.open_audio()) {
1128
ea77e4df4ce4 [svn] - clean up some debugging stuff
nenolod
parents: 1127
diff changeset
322 DBG("error opening audio channel\n");
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
323 killDecodeThread = true;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
324 AudioError = true;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
325 openedAudio = false;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
326 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
327 else {
1128
ea77e4df4ce4 [svn] - clean up some debugging stuff
nenolod
parents: 1127
diff changeset
328 DBG("opened audio channel\n");
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
329 openedAudio = true;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
330 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
331 unsigned status;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
332 char *display = generate_title(filename, d.ctx);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
333 int length = (int) (1000 * WavpackGetNumSamples(d.ctx));
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
334
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
335 while (!killDecodeThread) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
336 if (isSeek != -1) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
337 DBG("seeking to position %d\n", isSeek);
253
ab24cfe495e0 [svn] Port to NewVFS file probe & add explicit cast to silence warning, thanks to spb.
chainsaw
parents: 247
diff changeset
338 WavpackSeekSample(d.ctx, (int)(isSeek * d.sample_rate));
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
339 isSeek = -1;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
340 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
341 if (paused == 0
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
342 && (mod.output->buffer_free() >=
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
343 (1152 * 2 *
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
344 (16 / 8)) << (mod.output->buffer_playing()? 1 : 0))) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
345 status =
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
346 WavpackUnpackSamples(d.ctx, d.input, BUFFER_SIZE);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
347 if (status == (unsigned) (-1)) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
348 printf("wavpack: Error decoding file.\n");
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
349 break;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
350 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
351 else if (status == 0) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
352 killDecodeThread = true;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
353 break;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
354 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
355 else {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
356 d.process_buffer(status);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
357 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
358 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
359 else {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
360 xmms_usleep(10000);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
361 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
362 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
363 return end_thread();
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
364 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
365
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
366 static void
566
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
367 wv_play(InputPlayback *data)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
368 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
369 paused = 0;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
370 isSeek = -1;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
371 killDecodeThread = false;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
372 AudioError = false;
1354
b670d1f3c2e4 wavpack: new threading model
William Pitcock <nenolod@atheme-project.org>
parents: 1185
diff changeset
373 thread_handle = 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: 1445
diff changeset
374 data->set_pb_ready(data);
1354
b670d1f3c2e4 wavpack: new threading model
William Pitcock <nenolod@atheme-project.org>
parents: 1185
diff changeset
375 DecodeThread((void *) data->filename);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
376 return;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
377 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
378
1436
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
379 static std::string
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
380 WavpackPluginGetQualityString(WavpackContext *ctx)
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
381 {
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
382 int mode = WavpackGetMode(ctx);
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
383
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
384 if (mode & MODE_LOSSLESS)
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
385 return "lossless";
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
386
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
387 if (mode & MODE_HYBRID)
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
388 return "lossy (hybrid)";
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
389
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
390 return "lossy";
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
391 }
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
392
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
393 static Tuple *
114
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
394 tuple_from_WavpackContext(const char *fn, WavpackContext *ctx)
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
395 {
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
396 ape_tag tag;
1436
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
397 Tuple *ti;
114
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
398 int sample_rate = WavpackGetSampleRate(ctx);
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
399
1436
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
400 ti = tuple_new_from_filename(fn);
114
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
401
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
402 load_tag(&tag, ctx);
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
403
1436
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
404 tuple_associate_string(ti, "title", tag.title);
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
405 tuple_associate_string(ti, "artist", tag.artist);
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
406 tuple_associate_string(ti, "album", tag.album);
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
407 tuple_associate_string(ti, "genre", tag.genre);
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
408 tuple_associate_string(ti, "comment", tag.comment);
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
409 tuple_associate_string(ti, "date", tag.year);
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
410 tuple_associate_string(ti, "quality", WavpackPluginGetQualityString(ctx).c_str());
1445
580f1b971518 we're looking for the name of the codec here, not tag.year(), thanks.
William Pitcock <nenolod@atheme-project.org>
parents: 1436
diff changeset
411 tuple_associate_string(ti, "codec", "WavPack");
1436
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
412
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
413 tuple_associate_int(ti, "track-number", atoi(tag.track));
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
414 tuple_associate_int(ti, "year", atoi(tag.year));
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
415 tuple_associate_int(ti, "length", (int)(WavpackGetNumSamples(ctx) / sample_rate) * 1000);
114
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
416
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
417 return ti;
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
418 }
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
419
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
420 static char *
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
421 generate_title(const char *fn, WavpackContext *ctx)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
422 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
423 static char *displaytitle = NULL;
1436
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
424 Tuple *ti;
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
425
114
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
426 ti = tuple_from_WavpackContext(fn, ctx);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
427
1510
3a252050736c replace tuple_formatter_process_string() with tuple_formatter_make_title_string() except that for streamings.
Yoshiki Yazawa <yaz@cc.rim.or.jp>
parents: 1501
diff changeset
428 displaytitle = tuple_formatter_make_title_string(ti, cfg.gentitle_format);
115
2e77e3fdd3c1 [svn] - make sure the tuple data is copied, not referenced (oops)
nenolod
parents: 114
diff changeset
429 if (!displaytitle || *displaytitle == '\0')
2e77e3fdd3c1 [svn] - make sure the tuple data is copied, not referenced (oops)
nenolod
parents: 114
diff changeset
430 displaytitle = g_strdup(fn);
114
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
431
1465
db616ccdd40c use tuple_free(x) in place of mowgli_object_unref(x)
Giacomo Lozito <james@develia.org>
parents: 1447
diff changeset
432 tuple_free((void *) ti);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
433
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
434 return displaytitle;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
435 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
436
1436
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
437 static Tuple *
114
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
438 wv_get_song_tuple(char *filename)
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
439 {
1436
0ff7d08693f6 wavpack: update to new tuple API, use std::string more.
William Pitcock <nenolod@atheme-project.org>
parents: 1395
diff changeset
440 Tuple *ti;
233
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
441 WavpackDecoder d(&mod);
114
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
442
233
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
443 if (!d.attach(filename)) {
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
444 printf("wavpack: Error opening file: \"%s\"\n", filename);
114
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
445 return NULL;
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
446 }
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
447
233
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
448 ti = tuple_from_WavpackContext(filename, d.ctx);
114
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
449
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
450 return ti;
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
451 }
9bb02321f986 [svn] - tuple support
nenolod
parents: 112
diff changeset
452
1526
56b0d46a02f6 wavpack: Implement InputPlugin::probe_for_tuple.
William Pitcock <nenolod@atheme-project.org>
parents: 1521
diff changeset
453 static Tuple *
56b0d46a02f6 wavpack: Implement InputPlugin::probe_for_tuple.
William Pitcock <nenolod@atheme-project.org>
parents: 1521
diff changeset
454 wv_probe_for_tuple(gchar *filename, VFSFile *file)
56b0d46a02f6 wavpack: Implement InputPlugin::probe_for_tuple.
William Pitcock <nenolod@atheme-project.org>
parents: 1521
diff changeset
455 {
56b0d46a02f6 wavpack: Implement InputPlugin::probe_for_tuple.
William Pitcock <nenolod@atheme-project.org>
parents: 1521
diff changeset
456 Tuple *ti;
56b0d46a02f6 wavpack: Implement InputPlugin::probe_for_tuple.
William Pitcock <nenolod@atheme-project.org>
parents: 1521
diff changeset
457 WavpackDecoder d(&mod);
56b0d46a02f6 wavpack: Implement InputPlugin::probe_for_tuple.
William Pitcock <nenolod@atheme-project.org>
parents: 1521
diff changeset
458
56b0d46a02f6 wavpack: Implement InputPlugin::probe_for_tuple.
William Pitcock <nenolod@atheme-project.org>
parents: 1521
diff changeset
459 if (!d.attach(filename, file))
56b0d46a02f6 wavpack: Implement InputPlugin::probe_for_tuple.
William Pitcock <nenolod@atheme-project.org>
parents: 1521
diff changeset
460 return NULL;
56b0d46a02f6 wavpack: Implement InputPlugin::probe_for_tuple.
William Pitcock <nenolod@atheme-project.org>
parents: 1521
diff changeset
461
56b0d46a02f6 wavpack: Implement InputPlugin::probe_for_tuple.
William Pitcock <nenolod@atheme-project.org>
parents: 1521
diff changeset
462 ti = tuple_from_WavpackContext(filename, d.ctx);
56b0d46a02f6 wavpack: Implement InputPlugin::probe_for_tuple.
William Pitcock <nenolod@atheme-project.org>
parents: 1521
diff changeset
463
56b0d46a02f6 wavpack: Implement InputPlugin::probe_for_tuple.
William Pitcock <nenolod@atheme-project.org>
parents: 1521
diff changeset
464 return ti;
56b0d46a02f6 wavpack: Implement InputPlugin::probe_for_tuple.
William Pitcock <nenolod@atheme-project.org>
parents: 1521
diff changeset
465 }
56b0d46a02f6 wavpack: Implement InputPlugin::probe_for_tuple.
William Pitcock <nenolod@atheme-project.org>
parents: 1521
diff changeset
466
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
467 static void
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
468 wv_get_song_info(char *filename, char **title, int *length)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
469 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
470 assert(filename != NULL);
233
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
471 WavpackDecoder d(&mod);
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
472
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
473 if (!d.attach(filename)) {
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
474 printf("wavpack: Error opening file: \"%s\"\n", filename);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
475 return;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
476 }
233
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
477
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
478 int sample_rate = WavpackGetSampleRate(d.ctx);
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
479 int num_channels = WavpackGetNumChannels(d.ctx);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
480 DBG("reading %s at %d rate with %d channels\n", filename, sample_rate, num_channels);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
481
233
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
482 *length = (int)(WavpackGetNumSamples(d.ctx) / sample_rate) * 1000,
7b7660c9f31c [svn] - rewrite to take advantage of already existant object-oriented framework
nenolod
parents: 130
diff changeset
483 *title = generate_title(filename, d.ctx);
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
484 DBG("title for %s = %s\n", filename, *title);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
485 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
486
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
487 static int
566
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
488 wv_get_time(InputPlayback *data)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
489 {
566
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
490 if (data->output == NULL)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
491 return -1;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
492 if (AudioError)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
493 return -2;
566
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
494 if (killDecodeThread && !data->output->buffer_playing())
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
495 return -1;
566
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
496 return data->output->output_time();
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
497 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
498
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
499 static void
566
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
500 wv_seek(InputPlayback *data, int sec)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
501 {
566
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
502 isSeek = sec;
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
503 data->output->flush((int) (1000 * isSeek));
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
504 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
505
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
506 static void
566
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
507 wv_pause(InputPlayback *data, short pause)
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
508 {
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
509 data->output->pause(paused = pause);
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
510 }
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
511
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
512 static void
98c4735c3c2e [svn] - update to new input plugin API
nenolod
parents: 434
diff changeset
513 wv_stop(InputPlayback *data)
109
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
514 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
515 killDecodeThread = true;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
516 if (thread_handle != 0) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
517 g_thread_join(thread_handle);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
518 if (openedAudio) {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
519 mod.output->buffer_free();
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
520 mod.output->close_audio();
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
521 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
522 openedAudio = false;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
523 if (AudioError)
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
524 printf("Could not open Audio\n");
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
525 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
526
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
527 }
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
528
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
529 static void
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
530 wv_load_config()
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
531 {
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
532 ConfigDb *cfg;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
533
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
534 cfg = bmp_cfg_db_open();
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
535
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
536 bmp_cfg_db_get_bool(cfg, "wavpack", "clip_prevention",
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
537 &clipPreventionEnabled);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
538 bmp_cfg_db_get_bool(cfg, "wavpack", "album_replaygain",
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
539 &albumReplaygainEnabled);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
540 bmp_cfg_db_get_bool(cfg, "wavpack", "dyn_bitrate", &dynBitrateEnabled);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
541 bmp_cfg_db_get_bool(cfg, "wavpack", "replaygain", &replaygainEnabled);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
542 bmp_cfg_db_close(cfg);
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
543
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
544 openedAudio = false;
38ce41606f10 [svn] - wavpack input plugin -- under construction
nenolod
parents:
diff changeset
545 }