Mercurial > audlegacy-plugins
comparison src/madplug/input.c @ 1485:4e612b01f303
- make use of tuple_formatter_make_title_string(). now madplug can show file name if metadata is not available.
- temporal fix for the bug which prevented from playing remote file.
- some cleanups.
author | Yoshiki Yazawa <yaz@cc.rim.or.jp> |
---|---|
date | Mon, 13 Aug 2007 19:57:03 +0900 |
parents | eb0913bf54c3 |
children | d158ce84fda7 |
comparison
equal
deleted
inserted
replaced
1483:e8330e6bd0ba | 1485:4e612b01f303 |
---|---|
72 gboolean input_init(struct mad_info_t * info, const char *url, VFSFile *fd) | 72 gboolean input_init(struct mad_info_t * info, const char *url, VFSFile *fd) |
73 { | 73 { |
74 #ifdef DEBUG | 74 #ifdef DEBUG |
75 g_message("f: input_init"); | 75 g_message("f: input_init"); |
76 #endif | 76 #endif |
77 memset(info, 0, sizeof(struct mad_info_t)); | 77 memset(info, 0, sizeof(struct mad_info_t)); // all fields are cleared to 0 --yaz |
78 | 78 |
79 info->fmt = FMT_S16_LE; | 79 info->fmt = FMT_S16_LE; |
80 info->channels = -1; | 80 info->channels = -1; |
81 info->mpeg_layer = -1; | 81 info->mpeg_layer = -1; |
82 info->size = -1; | 82 info->size = -1; |
83 info->freq = -1; | 83 info->freq = -1; |
84 info->seek = -1; | 84 info->seek = -1; |
85 info->duration = mad_timer_zero; | 85 info->duration = mad_timer_zero; |
86 info->pos = mad_timer_zero; | 86 info->pos = mad_timer_zero; |
87 info->url = g_strdup(url); | 87 info->url = g_strdup(url); |
88 info->current_frame = 0; | 88 info->filename = g_strdup(url); |
89 info->frames = 0; | |
90 info->bitrate = 0; | |
91 info->vbr = 0; | |
92 info->mode = 0; | |
93 info->title = 0; | |
94 info->offset = 0; | |
95 info->prev_title = NULL; | |
96 | |
97 info->replaygain_album_str = 0; | |
98 info->replaygain_track_str = 0; | |
99 info->replaygain_album_peak_str = 0; | |
100 info->replaygain_track_peak_str = 0; | |
101 info->mp3gain_undo_str = 0; | |
102 info->mp3gain_minmax_str = 0; | |
103 | 89 |
104 // from input_read_replaygain() | 90 // from input_read_replaygain() |
105 info->has_replaygain = FALSE; | |
106 info->replaygain_album_scale = -1; | 91 info->replaygain_album_scale = -1; |
107 info->replaygain_track_scale = -1; | 92 info->replaygain_track_scale = -1; |
108 info->mp3gain_undo = -77; | 93 info->mp3gain_undo = -77; |
109 info->mp3gain_minmax = -77; | 94 info->mp3gain_minmax = -77; |
110 | |
111 info->tuple = NULL; | |
112 | |
113 info->filename = g_strdup(url); | |
114 | 95 |
115 if(!fd){ | 96 if(!fd){ |
116 info->infile = vfs_fopen(info->filename, "rb"); | 97 info->infile = vfs_fopen(info->filename, "rb"); |
117 if (info->infile == NULL) { | 98 if (info->infile == NULL) { |
118 return FALSE; | 99 return FALSE; |
351 g_free(scratch); | 332 g_free(scratch); |
352 } | 333 } |
353 | 334 |
354 static void input_alloc_tag(struct mad_info_t *info) | 335 static void input_alloc_tag(struct mad_info_t *info) |
355 { | 336 { |
356 Tuple *title_input; | 337 Tuple *tuple; |
357 | 338 |
358 if (info->tuple == NULL) { | 339 if (info->tuple == NULL) { |
359 title_input = tuple_new(); | 340 tuple = tuple_new(); |
360 info->tuple = title_input; | 341 info->tuple = tuple; |
361 tuple_associate_int(info->tuple, "length", -1); | 342 tuple_associate_int(info->tuple, "length", -1); |
362 } | 343 } |
363 else | |
364 title_input = info->tuple; | |
365 } | 344 } |
366 | 345 |
367 /** | 346 /** |
368 * read the ID3 tag | 347 * read the ID3 tag |
369 */ | 348 */ |
370 static void input_read_tag(struct mad_info_t *info) | 349 static void input_read_tag(struct mad_info_t *info) |
371 { | 350 { |
372 gchar *string = NULL; | 351 gchar *string = NULL; |
373 gchar *realfn = NULL; | 352 gchar *realfn = NULL; |
374 Tuple *title_input; | 353 Tuple *tuple; |
375 glong curpos = 0; | 354 glong curpos = 0; |
376 | 355 |
377 #ifdef DEBUG | 356 #ifdef DEBUG |
378 g_message("f: input_read_tag"); | 357 g_message("f: input_read_tag"); |
379 #endif | 358 #endif |
380 if (info->tuple == NULL) { | 359 if (info->tuple == NULL) { |
381 title_input = tuple_new(); | 360 tuple = tuple_new(); |
382 info->tuple = title_input; | 361 info->tuple = tuple; |
383 } | 362 } |
384 else | 363 else |
385 title_input = info->tuple; | 364 tuple = info->tuple; |
386 | 365 |
387 if(info->infile) { | 366 if(info->infile) { |
388 curpos = vfs_ftell(info->infile); | 367 curpos = vfs_ftell(info->infile); |
389 info->id3file = id3_file_vfsopen(info->infile, ID3_FILE_MODE_READONLY); | 368 info->id3file = id3_file_vfsopen(info->infile, ID3_FILE_MODE_READONLY); |
390 } | 369 } |
405 g_message("read_tag: no tag"); | 384 g_message("read_tag: no tag"); |
406 #endif | 385 #endif |
407 return; | 386 return; |
408 } | 387 } |
409 | 388 |
410 input_set_and_free_tag(info->tag, title_input, ID3_FRAME_ARTIST, "artist"); | 389 input_set_and_free_tag(info->tag, tuple, ID3_FRAME_ARTIST, "artist"); |
411 input_set_and_free_tag(info->tag, title_input, ID3_FRAME_TITLE, "title"); | 390 input_set_and_free_tag(info->tag, tuple, ID3_FRAME_TITLE, "title"); |
412 input_set_and_free_tag(info->tag, title_input, ID3_FRAME_ALBUM, "album"); | 391 input_set_and_free_tag(info->tag, tuple, ID3_FRAME_ALBUM, "album"); |
413 input_set_and_free_tag(info->tag, title_input, ID3_FRAME_GENRE, "genre"); | 392 input_set_and_free_tag(info->tag, tuple, ID3_FRAME_GENRE, "genre"); |
414 input_set_and_free_tag(info->tag, title_input, ID3_FRAME_COMMENT, "comment"); | 393 input_set_and_free_tag(info->tag, tuple, ID3_FRAME_COMMENT, "comment"); |
415 | 394 |
416 string = input_id3_get_string(info->tag, ID3_FRAME_TRACK); | 395 string = input_id3_get_string(info->tag, ID3_FRAME_TRACK); |
417 if (string) { | 396 if (string) { |
418 tuple_associate_int(title_input, "track-number", atoi(string)); | 397 tuple_associate_int(tuple, "track-number", atoi(string)); |
419 g_free(string); | 398 g_free(string); |
420 string = NULL; | 399 string = NULL; |
421 } | 400 } |
422 | 401 |
423 // year | 402 // year |
425 string = input_id3_get_string(info->tag, ID3_FRAME_YEAR); //TDRC | 404 string = input_id3_get_string(info->tag, ID3_FRAME_YEAR); //TDRC |
426 if (!string) | 405 if (!string) |
427 string = input_id3_get_string(info->tag, "TYER"); | 406 string = input_id3_get_string(info->tag, "TYER"); |
428 | 407 |
429 if (string) { | 408 if (string) { |
430 tuple_associate_int(title_input, "year", atoi(string)); | 409 tuple_associate_int(tuple, "year", atoi(string)); |
431 g_free(string); | 410 g_free(string); |
432 string = NULL; | 411 string = NULL; |
433 } | 412 } |
434 | 413 |
435 // length | 414 // length |
436 string = input_id3_get_string(info->tag, "TLEN"); | 415 string = input_id3_get_string(info->tag, "TLEN"); |
437 if (string) { | 416 if (string) { |
438 tuple_associate_int(title_input, "length", atoi(string)); | 417 tuple_associate_int(tuple, "length", atoi(string)); |
439 #ifdef DEBUG | 418 #ifdef DEBUG |
440 g_message("input_read_tag: TLEN = %d", atoi(string)); | 419 g_message("input_read_tag: TLEN = %d", atoi(string)); |
441 #endif | 420 #endif |
442 g_free(string); | 421 g_free(string); |
443 string = NULL; | 422 string = NULL; |
444 } | 423 } |
445 | 424 |
446 realfn = g_filename_from_uri(info->filename, NULL, NULL); | 425 realfn = g_filename_from_uri(info->filename, NULL, NULL); |
447 | 426 |
448 string = g_strdup(g_basename(realfn ? realfn : info->filename)); | 427 string = g_strdup(g_basename(realfn ? realfn : info->filename)); |
449 tuple_associate_string(title_input, "file-name", string); | 428 tuple_associate_string(tuple, "file-name", string); |
450 g_free(string); | 429 g_free(string); |
451 | 430 |
452 string = g_path_get_dirname(realfn ? realfn : info->filename); | 431 string = g_path_get_dirname(realfn ? realfn : info->filename); |
453 tuple_associate_string(title_input, "file-path", string); | 432 tuple_associate_string(tuple, "file-path", string); |
454 g_free(string); | 433 g_free(string); |
455 | 434 |
456 if ((string = strrchr(realfn ? realfn : info->filename, '.'))) { | 435 if ((string = strrchr(realfn ? realfn : info->filename, '.'))) { |
457 *string = '\0'; // make filename end at dot. | 436 *string = '\0'; // make filename end at dot. |
458 tuple_associate_string(title_input, "file-ext", string + 1); | 437 tuple_associate_string(tuple, "file-ext", string + 1); |
459 } | 438 } |
460 | 439 |
461 g_free(realfn); realfn = NULL; | 440 g_free(realfn); realfn = NULL; |
462 | 441 |
463 tuple_associate_string(title_input, "codec", "MPEG Audio (MP3)"); | 442 tuple_associate_string(tuple, "codec", "MPEG Audio (MP3)"); |
464 tuple_associate_string(title_input, "quality", "lossy"); | 443 tuple_associate_string(tuple, "quality", "lossy"); |
465 | 444 |
466 info->title = tuple_formatter_process_string(title_input, audmad_config.title_override == TRUE ? | 445 info->title = tuple_formatter_make_title_string(tuple, audmad_config.title_override == TRUE ? |
467 audmad_config.id3_format : get_gentitle_format()); | 446 audmad_config.id3_format : get_gentitle_format()); |
468 | 447 |
469 // for connection via proxy, we have to stop transfer once. I can't explain the reason. | 448 // for connection via proxy, we have to stop transfer once. I can't explain the reason. |
470 if (info->infile != NULL) { | 449 if (info->infile != NULL) { |
471 vfs_fseek(info->infile, -1, SEEK_SET); // an impossible request | 450 vfs_fseek(info->infile, -1, SEEK_SET); // an impossible request |