Mercurial > audlegacy-plugins
comparison src/mpg123/mpg123.c @ 257:e0dc4cc45d26 trunk
[svn] - NewVFS probe support
author | nenolod |
---|---|
date | Sat, 18 Nov 2006 11:46:50 -0800 |
parents | 1bded2e3d57b |
children | 626f9f4d79a8 |
comparison
equal
deleted
inserted
replaced
256:acb93b546742 | 257:e0dc4cc45d26 |
---|---|
269 | 269 |
270 | 270 |
271 #define DET_BUF_SIZE 4096 | 271 #define DET_BUF_SIZE 4096 |
272 | 272 |
273 static gboolean | 273 static gboolean |
274 mpgdec_detect_by_content(char *filename) | 274 mpgdec_detect_by_content(VFSFile *file) |
275 { | 275 { |
276 VFSFile *file; | |
277 guchar tmp[4]; | 276 guchar tmp[4]; |
278 guint32 head; | 277 guint32 head; |
279 struct frame fr; | 278 struct frame fr; |
280 guchar buf[DET_BUF_SIZE]; | 279 guchar buf[DET_BUF_SIZE]; |
281 int in_buf, i; | 280 int in_buf, i; |
282 gboolean ret = FALSE; | 281 gboolean ret = FALSE; |
283 guint cyc = 0; | 282 guint cyc = 0; |
284 | 283 |
285 if ((file = vfs_fopen(filename, "rb")) == NULL) | |
286 return FALSE; | |
287 if (vfs_fread(tmp, 1, 4, file) != 4) | 284 if (vfs_fread(tmp, 1, 4, file) != 4) |
288 goto done; | 285 goto done; |
289 if (!memcmp(tmp, "ID3", 3)) | 286 if (!memcmp(tmp, "ID3", 3)) |
290 { | 287 { |
291 ret = TRUE; | 288 ret = TRUE; |
338 if (mpgdec_head_check(head) && mpgdec_decode_header(&fr, head)) | 335 if (mpgdec_head_check(head) && mpgdec_decode_header(&fr, head)) |
339 ret = TRUE; | 336 ret = TRUE; |
340 } | 337 } |
341 | 338 |
342 done: | 339 done: |
343 vfs_fclose(file); | |
344 return ret; | 340 return ret; |
345 } | 341 } |
346 | 342 |
347 static int | 343 static int |
348 is_our_file(char *filename) | 344 is_our_file(char *filename) |
349 { | 345 { |
346 VFSFile *file; | |
350 gchar *ext = strrchr(filename, '.'); | 347 gchar *ext = strrchr(filename, '.'); |
348 gboolean ret = FALSE; | |
349 | |
350 file = vfs_fopen(filename, "rb"); | |
351 | 351 |
352 if (CHECK_STREAM_URI(filename) && | 352 if (CHECK_STREAM_URI(filename) && |
353 (ext && strncasecmp(ext, ".ogg", 4)) && | 353 (ext && strncasecmp(ext, ".ogg", 4)) && |
354 (ext && strncasecmp(ext, ".flac", 5))) | 354 (ext && strncasecmp(ext, ".flac", 5))) |
355 return TRUE; | 355 ret = TRUE; |
356 else if (mpgdec_detect_by_content(filename)) | 356 else if (mpgdec_detect_by_content(file)) |
357 return TRUE; | 357 ret = TRUE; |
358 #if 0 | 358 |
359 else if (ext && (!strncasecmp(ext, ".mp3", 4) | 359 if (file != NULL) |
360 || !strncasecmp(ext, ".mp2", 4) | 360 vfs_fclose(file); |
361 || !strncasecmp(ext, ".mpg", 4))) | 361 |
362 return TRUE; | 362 return ret; |
363 #endif | 363 } |
364 | 364 |
365 return FALSE; | 365 static int |
366 is_our_fd(char *filename, VFSFile *file) | |
367 { | |
368 gchar *ext = strrchr(filename, '.'); | |
369 gboolean ret = FALSE; | |
370 | |
371 if (CHECK_STREAM_URI(filename) && | |
372 (ext && strncasecmp(ext, ".ogg", 4)) && | |
373 (ext && strncasecmp(ext, ".flac", 5))) | |
374 ret = TRUE; | |
375 else if (mpgdec_detect_by_content(file)) | |
376 ret = TRUE; | |
377 | |
378 return ret; | |
366 } | 379 } |
367 | 380 |
368 static void | 381 static void |
369 play_frame(struct frame *fr) | 382 play_frame(struct frame *fr) |
370 { | 383 { |
992 NULL, | 1005 NULL, |
993 NULL, NULL, NULL, | 1006 NULL, NULL, NULL, |
994 get_song_info, | 1007 get_song_info, |
995 mpgdec_file_info_box, /* file_info_box */ | 1008 mpgdec_file_info_box, /* file_info_box */ |
996 NULL, | 1009 NULL, |
997 get_song_tuple | 1010 get_song_tuple, |
1011 NULL, | |
1012 NULL, | |
1013 is_our_fd, | |
998 }; | 1014 }; |
999 | 1015 |
1000 InputPlugin * | 1016 InputPlugin * |
1001 get_iplugin_info(void) | 1017 get_iplugin_info(void) |
1002 { | 1018 { |