Mercurial > audlegacy-plugins
comparison src/alac/plugin.c @ 1074:0847931f52b7 trunk
[svn] Port to plugin API v2.
author | chainsaw |
---|---|
date | Thu, 24 May 2007 15:46:25 -0700 |
parents | 914c96de3244 |
children | 37abd9b3de4b |
comparison
equal
deleted
inserted
replaced
1073:c77a0ed314bc | 1074:0847931f52b7 |
---|---|
89 g_signal_connect(G_OBJECT(aboutbox), "destroy", | 89 g_signal_connect(G_OBJECT(aboutbox), "destroy", |
90 G_CALLBACK(gtk_widget_destroyed), | 90 G_CALLBACK(gtk_widget_destroyed), |
91 &aboutbox); | 91 &aboutbox); |
92 } | 92 } |
93 | 93 |
94 static void alac_init(void) | |
95 { | |
96 /* empty */ | |
97 } | |
98 | |
99 gboolean is_our_fd(char *filename, VFSFile* input_file) | 94 gboolean is_our_fd(char *filename, VFSFile* input_file) |
100 { | 95 { |
101 demux_res_t demux_res; | 96 demux_res_t demux_res; |
102 stream_t *input_stream; | 97 stream_t *input_stream; |
103 | 98 |
211 return get_output_time(); | 206 return get_output_time(); |
212 else | 207 else |
213 return -1; | 208 return -1; |
214 } | 209 } |
215 | 210 |
216 gchar *alac_fmts[] = { "m4a", "alac", NULL }; | |
217 | |
218 InputPlugin alac_ip = { | |
219 NULL, | |
220 NULL, | |
221 "Apple Lossless Plugin", /* Description */ | |
222 alac_init, | |
223 alac_about, | |
224 NULL, | |
225 NULL, | |
226 NULL, | |
227 play_file, | |
228 stop, | |
229 do_pause, | |
230 seek, | |
231 NULL, | |
232 get_time, | |
233 NULL, | |
234 NULL, | |
235 NULL, | |
236 NULL, | |
237 NULL, | |
238 NULL, | |
239 NULL, | |
240 NULL, | |
241 NULL, /* file_info_box */ | |
242 NULL, | |
243 build_tuple, | |
244 NULL, | |
245 NULL, | |
246 is_our_fd, | |
247 alac_fmts | |
248 }; | |
249 | |
250 static int get_sample_info(demux_res_t *demux_res, uint32_t samplenum, | 211 static int get_sample_info(demux_res_t *demux_res, uint32_t samplenum, |
251 uint32_t *sample_duration, | 212 uint32_t *sample_duration, |
252 uint32_t *sample_byte_size) | 213 uint32_t *sample_byte_size) |
253 { | 214 { |
254 unsigned int duration_index_accum = 0; | 215 unsigned int duration_index_accum = 0; |
333 } | 294 } |
334 | 295 |
335 free(buffer); | 296 free(buffer); |
336 free(pDestBuffer); | 297 free(pDestBuffer); |
337 } | 298 } |
299 | |
300 static gchar *fmts[] = { "m4a", "alac", NULL }; | |
301 | |
302 InputPlugin alac_ip = { | |
303 .description = "Apple Lossless Plugin", | |
304 .about = alac_about, | |
305 .play_file = play_file, | |
306 .stop = stop, | |
307 .pause = do_pause, | |
308 .seek = seek, | |
309 .get_song_tuple = build_tuple, | |
310 .is_our_file_from_vfs = is_our_fd, | |
311 .vfs_extensions = fmts, | |
312 }; | |
313 | |
314 InputPlugin *alac_iplist[] = { &alac_ip, NULL }; | |
315 | |
316 DECLARE_PLUGIN(alac, NULL, NULL, alac_iplist, NULL, NULL, NULL, NULL); | |
317 | |
318 InputPlugin *alac_plugin = &alac_ip; | |
338 | 319 |
339 gpointer decode_thread(void *args) | 320 gpointer decode_thread(void *args) |
340 { | 321 { |
341 demux_res_t demux_res; | 322 demux_res_t demux_res; |
342 unsigned int output_size, i; | 323 unsigned int output_size, i; |
375 /* Sample rates are multiples of 251?! Apple is *fucking* *insane*! -nenolod */ | 356 /* Sample rates are multiples of 251?! Apple is *fucking* *insane*! -nenolod */ |
376 duration = (demux_res.num_sample_byte_sizes * (float)((1024 * demux_res.sample_size) - 1.0) / | 357 duration = (demux_res.num_sample_byte_sizes * (float)((1024 * demux_res.sample_size) - 1.0) / |
377 (float)(demux_res.sample_rate / 251)); | 358 (float)(demux_res.sample_rate / 251)); |
378 | 359 |
379 playback->output->open_audio(FMT_S16_LE, demux_res.sample_rate, demux_res.num_channels); | 360 playback->output->open_audio(FMT_S16_LE, demux_res.sample_rate, demux_res.num_channels); |
380 alac_ip.set_info(title, duration, -1, demux_res.sample_rate, demux_res.num_channels); | 361 alac_plugin->set_info(title, duration, -1, demux_res.sample_rate, demux_res.num_channels); |
381 | 362 |
382 /* will convert the entire buffer */ | 363 /* will convert the entire buffer */ |
383 GetBuffer(&demux_res); | 364 GetBuffer(&demux_res); |
384 | 365 |
385 going = 0; | 366 going = 0; |
391 | 372 |
392 playback->output->close_audio(); | 373 playback->output->close_audio(); |
393 | 374 |
394 return NULL; | 375 return NULL; |
395 } | 376 } |
396 | |
397 InputPlugin *get_iplugin_info(void) | |
398 { | |
399 return &alac_ip; | |
400 } |