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 }