summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/playback.c43
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 */
630void 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
629void audio_fill_file_buffer(void) 668void 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 }