Mercurial > audlegacy-plugins
comparison src/madplug/plugin.c @ 2205:2faee266ea1e
madplug now provides more informative tuple
| author | Eugene Zagidullin <e.asphyx@gmail.com> |
|---|---|
| date | Tue, 04 Dec 2007 02:04:49 +0300 |
| parents | 13b8ab116b69 |
| children | 7c7e6f5c494e |
comparison
equal
deleted
inserted
replaced
| 2204:43da009d6e76 | 2205:2faee266ea1e |
|---|---|
| 534 #ifdef DEBUG | 534 #ifdef DEBUG |
| 535 g_message("e: audmad_get_song_info"); | 535 g_message("e: audmad_get_song_info"); |
| 536 #endif /* DEBUG */ | 536 #endif /* DEBUG */ |
| 537 } | 537 } |
| 538 | 538 |
| 539 static void | 539 static gboolean |
| 540 audmad_get_song_length(char *url, int *length, VFSFile *fd) | 540 audmad_fill_info(struct mad_info_t *info, VFSFile *fd) |
| 541 { | 541 { |
| 542 struct mad_info_t myinfo; | 542 if (fd == NULL || info == NULL) return FALSE; |
| 543 #ifdef DEBUG | 543 #ifdef DEBUG |
| 544 gchar *tmp = g_filename_to_utf8(url, -1, NULL, NULL, NULL); | 544 g_message("f: audmad_fill_info(): %s", fd->uri); |
| 545 g_message("f: audmad_get_song_length: %s", tmp); | 545 #endif |
| 546 g_free(tmp); | 546 |
| 547 #endif /* DEBUG */ | 547 if (input_init(info, fd->uri, fd) == FALSE) { |
| 548 | 548 #ifdef DEBUG |
| 549 if (input_init(&myinfo, url, fd ? fd : NULL) == FALSE) { | 549 g_message("audmad_fill_info(): error initialising input"); |
| 550 #ifdef DEBUG | 550 #endif |
| 551 g_message("error initialising input"); | 551 return FALSE; |
| 552 #endif | 552 } |
| 553 return; | 553 |
| 554 } | 554 info->fileinfo_request = FALSE; /* we don't need to read tuple again */ |
| 555 | 555 return input_get_info(info, aud_vfs_is_remote(fd->uri) ? TRUE : audmad_config.fast_play_time_calc); |
| 556 if (input_get_info(&myinfo, info.remote ? TRUE : audmad_config.fast_play_time_calc) == TRUE) { | |
| 557 *length = aud_tuple_get_int(myinfo.tuple, FIELD_LENGTH, NULL); | |
| 558 if(*length == -1) | |
| 559 *length = mad_timer_count(myinfo.duration, MAD_UNITS_MILLISECONDS); | |
| 560 } | |
| 561 else { | |
| 562 *length = -1; | |
| 563 } | |
| 564 input_term(&myinfo); | |
| 565 #ifdef DEBUG | |
| 566 g_message("e: audmad_get_song_info"); | |
| 567 #endif /* DEBUG */ | |
| 568 } | 556 } |
| 569 | 557 |
| 570 static void audmad_about() | 558 static void audmad_about() |
| 571 { | 559 { |
| 572 static GtkWidget *aboutbox; | 560 static GtkWidget *aboutbox; |
| 642 gchar *realfn = NULL; | 630 gchar *realfn = NULL; |
| 643 | 631 |
| 644 struct id3_file *id3file = NULL; | 632 struct id3_file *id3file = NULL; |
| 645 struct id3_tag *tag = NULL; | 633 struct id3_tag *tag = NULL; |
| 646 | 634 |
| 635 struct mad_info_t myinfo; | |
| 636 | |
| 647 gboolean local_fd = FALSE; | 637 gboolean local_fd = FALSE; |
| 638 int length; | |
| 648 | 639 |
| 649 #ifdef DEBUG | 640 #ifdef DEBUG |
| 650 string = aud_str_to_utf8(filename); | 641 string = aud_str_to_utf8(filename); |
| 651 g_message("f: mad: audmad_get_song_tuple: %s", string); | 642 g_message("f: mad: audmad_get_song_tuple: %s", string); |
| 652 g_free(string); | 643 g_free(string); |
| 653 string = NULL; | 644 string = NULL; |
| 654 #endif | 645 #endif |
| 646 | |
| 647 /* isn't is obfuscated? --eugene */ | |
| 655 | 648 |
| 656 if(info.remote && mad_timer_count(info.duration, MAD_UNITS_SECONDS) <= 0){ | 649 if(info.remote && mad_timer_count(info.duration, MAD_UNITS_SECONDS) <= 0){ |
| 657 if((fd && aud_vfs_is_streaming(fd)) || (info.playback && info.playback->playing)) { | 650 if((fd && aud_vfs_is_streaming(fd)) || (info.playback && info.playback->playing)) { |
| 658 gchar *tmp = NULL; | 651 gchar *tmp = NULL; |
| 659 tuple = aud_tuple_new_from_filename(filename); | 652 tuple = aud_tuple_new_from_filename(filename); |
| 706 if(!fd) { | 699 if(!fd) { |
| 707 fd = aud_vfs_fopen(filename, "rb"); | 700 fd = aud_vfs_fopen(filename, "rb"); |
| 708 if(!fd) | 701 if(!fd) |
| 709 return NULL; | 702 return NULL; |
| 710 local_fd = TRUE; | 703 local_fd = TRUE; |
| 704 } | |
| 705 | |
| 706 if (!audmad_fill_info(&myinfo, fd)) { | |
| 707 #ifdef DEBUG | |
| 708 g_message("get_song_tuple: error obtaining info\n"); | |
| 709 #endif | |
| 710 if (local_fd) aud_vfs_fclose(fd); | |
| 711 return NULL; | |
| 711 } | 712 } |
| 712 | 713 |
| 713 tuple = aud_tuple_new(); | 714 tuple = aud_tuple_new(); |
| 714 aud_tuple_associate_int(tuple, FIELD_LENGTH, NULL, -1); | 715 aud_tuple_associate_int(tuple, FIELD_LENGTH, NULL, -1); |
| 715 | 716 |
| 739 __set_and_free(tuple, FIELD_FILE_PATH, NULL, g_path_get_dirname(realfn ? realfn : filename)); | 740 __set_and_free(tuple, FIELD_FILE_PATH, NULL, g_path_get_dirname(realfn ? realfn : filename)); |
| 740 aud_tuple_associate_string(tuple, FIELD_FILE_EXT, NULL, extname(realfn ? realfn : filename)); | 741 aud_tuple_associate_string(tuple, FIELD_FILE_EXT, NULL, extname(realfn ? realfn : filename)); |
| 741 g_free(realfn); realfn = NULL; | 742 g_free(realfn); realfn = NULL; |
| 742 | 743 |
| 743 // length | 744 // length |
| 744 string = input_id3_get_string(tag, "TLEN"); | 745 length = mad_timer_count(myinfo.duration, MAD_UNITS_MILLISECONDS); |
| 745 if (string) { | 746 aud_tuple_associate_int(tuple, FIELD_LENGTH, NULL, length); |
| 746 aud_tuple_associate_int(tuple, FIELD_LENGTH, NULL, atoi(string)); | |
| 747 #ifdef DEBUG | |
| 748 g_message("get_song_tuple: TLEN = %d", aud_tuple_get_int(tuple, FIELD_LENGTH, NULL)); | |
| 749 #endif | |
| 750 g_free(string); | |
| 751 string = NULL; | |
| 752 } | |
| 753 else { | |
| 754 char *dummy = NULL; | |
| 755 int length = 0; | |
| 756 audmad_get_song_length(filename, &length, fd); | |
| 757 aud_tuple_associate_int(tuple, FIELD_LENGTH, NULL, length); | |
| 758 g_free(dummy); | |
| 759 } | |
| 760 | 747 |
| 761 // track number | 748 // track number |
| 762 string = input_id3_get_string(tag, ID3_FRAME_TRACK); | 749 string = input_id3_get_string(tag, ID3_FRAME_TRACK); |
| 763 if (string) { | 750 if (string) { |
| 764 aud_tuple_associate_int(tuple, FIELD_TRACK_NUMBER, NULL, atoi(string)); | 751 aud_tuple_associate_int(tuple, FIELD_TRACK_NUMBER, NULL, atoi(string)); |
| 779 __set_and_free(tuple, FIELD_FILE_NAME, NULL, g_path_get_basename(realfn ? realfn : filename)); | 766 __set_and_free(tuple, FIELD_FILE_NAME, NULL, g_path_get_basename(realfn ? realfn : filename)); |
| 780 __set_and_free(tuple, FIELD_FILE_PATH, NULL, g_path_get_dirname(realfn ? realfn : filename)); | 767 __set_and_free(tuple, FIELD_FILE_PATH, NULL, g_path_get_dirname(realfn ? realfn : filename)); |
| 781 aud_tuple_associate_string(tuple, FIELD_FILE_EXT, NULL, extname(realfn ? realfn : filename)); | 768 aud_tuple_associate_string(tuple, FIELD_FILE_EXT, NULL, extname(realfn ? realfn : filename)); |
| 782 g_free(realfn); realfn = NULL; | 769 g_free(realfn); realfn = NULL; |
| 783 // length | 770 // length |
| 784 { | 771 length = mad_timer_count(myinfo.duration, MAD_UNITS_MILLISECONDS); |
| 785 char *dummy = NULL; | 772 aud_tuple_associate_int(tuple, FIELD_LENGTH, NULL, length); |
| 786 int length = 0; | 773 } |
| 787 if(aud_tuple_get_int(tuple, FIELD_LENGTH, NULL) == -1) { | 774 |
| 788 audmad_get_song_length(filename, &length, fd); | 775 if (myinfo.vbr) { |
| 789 aud_tuple_associate_int(tuple, FIELD_LENGTH, NULL, length); | 776 string = g_strdup_printf("lossy, bitrate: VBR (avg. %d kbps)", myinfo.bitrate / 1000); |
| 790 } | 777 } else { |
| 791 g_free(dummy); | 778 string = g_strdup_printf("lossy, bitrate: %d kbps", myinfo.bitrate / 1000); |
| 792 } | 779 } |
| 793 } | 780 aud_tuple_associate_string(tuple, FIELD_QUALITY, NULL, string); |
| 794 | 781 g_free(string); |
| 795 /* TUDO: make tuple more informative (bitrate, layer). | 782 |
| 796 * but it can slowdown tuple creation and avoid sense of TLEN reading. --eugene */ | 783 string = g_strdup_printf("MPEG-1 Audio Layer %d", myinfo.mpeg_layer); |
| 797 | 784 aud_tuple_associate_string(tuple, FIELD_CODEC, NULL, string); |
| 798 aud_tuple_associate_string(tuple, FIELD_QUALITY, NULL, "lossy"); | 785 g_free(string); |
| 799 aud_tuple_associate_string(tuple, FIELD_CODEC, NULL, "MPEG Audio (MP3)"); | 786 |
| 800 aud_tuple_associate_string(tuple, FIELD_MIMETYPE, NULL, "audio/mpeg"); | 787 aud_tuple_associate_string(tuple, FIELD_MIMETYPE, NULL, "audio/mpeg"); |
| 788 | |
| 789 input_term(&myinfo); | |
| 801 | 790 |
| 802 if(local_fd) | 791 if(local_fd) |
| 803 aud_vfs_fclose(fd); | 792 aud_vfs_fclose(fd); |
| 804 | 793 |
| 805 #ifdef DEBUG | 794 #ifdef DEBUG |
