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 {