diff options
Diffstat (limited to 'apps/playback.c')
-rw-r--r-- | apps/playback.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/apps/playback.c b/apps/playback.c index f9caff1c4f..c053bc1473 100644 --- a/apps/playback.c +++ b/apps/playback.c | |||
@@ -626,6 +626,45 @@ void yield_codecs(void) | |||
626 | yield(); | 626 | yield(); |
627 | } | 627 | } |
628 | 628 | ||
629 | /* FIXME: This code should be made more generic and move to metadata.c */ | ||
630 | void strip_id3v1_tag(void) | ||
631 | { | ||
632 | int i; | ||
633 | static const unsigned char tag[] = "TAG"; | ||
634 | int tagptr; | ||
635 | bool found = true; | ||
636 | |||
637 | if (codecbufused >= 128) | ||
638 | { | ||
639 | tagptr = buf_widx - 128; | ||
640 | if (tagptr < 0) | ||
641 | tagptr += codecbuflen; | ||
642 | |||
643 | for(i = 0;i < 3;i++) | ||
644 | { | ||
645 | if(tagptr >= codecbuflen) | ||
646 | tagptr -= codecbuflen; | ||
647 | |||
648 | if(codecbuf[tagptr] != tag[i]) | ||
649 | { | ||
650 | found = false; | ||
651 | break; | ||
652 | } | ||
653 | |||
654 | tagptr++; | ||
655 | } | ||
656 | |||
657 | if(found) | ||
658 | { | ||
659 | /* Skip id3v1 tag */ | ||
660 | logf("Skipping ID3v1 tag\n"); | ||
661 | buf_widx -= 128; | ||
662 | tracks[track_widx].available -= 128; | ||
663 | codecbufused -= 128; | ||
664 | } | ||
665 | } | ||
666 | } | ||
667 | |||
629 | void audio_fill_file_buffer(void) | 668 | void audio_fill_file_buffer(void) |
630 | { | 669 | { |
631 | long i, size; | 670 | long i, size; |
@@ -651,6 +690,7 @@ void audio_fill_file_buffer(void) | |||
651 | rc = read(current_fd, &codecbuf[buf_widx], rc); | 690 | rc = read(current_fd, &codecbuf[buf_widx], rc); |
652 | if (rc <= 0) { | 691 | if (rc <= 0) { |
653 | tracks[track_widx].filerem = 0; | 692 | tracks[track_widx].filerem = 0; |
693 | strip_id3v1_tag(); | ||
654 | break ; | 694 | break ; |
655 | } | 695 | } |
656 | 696 | ||
@@ -965,6 +1005,9 @@ bool audio_load_track(int offset, bool start_play, int peek_offset) | |||
965 | } else { | 1005 | } else { |
966 | logf("Completely buf."); | 1006 | logf("Completely buf."); |
967 | close(fd); | 1007 | close(fd); |
1008 | |||
1009 | strip_id3v1_tag(); | ||
1010 | |||
968 | if (++track_widx >= MAX_TRACK) { | 1011 | if (++track_widx >= MAX_TRACK) { |
969 | track_widx = 0; | 1012 | track_widx = 0; |
970 | } | 1013 | } |