summaryrefslogtreecommitdiff
path: root/firmware/mpeg.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/mpeg.c')
-rw-r--r--firmware/mpeg.c40
1 files changed, 31 insertions, 9 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c
index 22a4e1f79e..2a5651ed61 100644
--- a/firmware/mpeg.c
+++ b/firmware/mpeg.c
@@ -35,7 +35,7 @@
35#include "file.h" 35#include "file.h"
36#endif 36#endif
37 37
38extern void bitswap(unsigned short *data, int length); 38extern void bitswap(unsigned char *data, int length);
39 39
40#define MPEG_CHUNKSIZE 0x180000 40#define MPEG_CHUNKSIZE 0x180000
41#define MPEG_SWAP_CHUNKSIZE 0x8000 41#define MPEG_SWAP_CHUNKSIZE 0x8000
@@ -465,9 +465,30 @@ static void mas_poll_start(int interval_in_ms)
465 TSR1 &= ~0x02; 465 TSR1 &= ~0x02;
466 TIER1 = 0xf9; /* Enable GRA match interrupt */ 466 TIER1 = 0xf9; /* Enable GRA match interrupt */
467 467
468 TSTR |= 0x02; /* Start timer 2 */ 468 TSTR |= 0x02; /* Start timer 1 */
469} 469}
470 470
471#ifdef DEBUG
472static void dbg_timer_start(void)
473{
474 /* We are using timer 2 */
475
476 TSTR &= ~0x04; /* Stop the timer */
477 TSNC &= ~0x04; /* No synchronization */
478 TMDR &= ~0x44; /* Operate normally */
479
480 TCNT1 = 0; /* Start counting at 0 */
481 TCR1 = 0x03; /* Sysclock/8 */
482
483 TSTR |= 0x04; /* Start timer 2 */
484}
485
486static int dbg_cnt2us(unsigned int cnt)
487{
488 return (cnt * 10000) / (FREQ/800);
489}
490#endif
491
471static int get_unplayed_space(void) 492static int get_unplayed_space(void)
472{ 493{
473 int space = mp3buf_write - mp3buf_read; 494 int space = mp3buf_write - mp3buf_read;
@@ -704,7 +725,7 @@ static int new_file(int steps)
704 } 725 }
705 else 726 else
706 { 727 {
707 /* skip past id3v2 tag (to an even byte) */ 728 /* skip past id3v2 tag */
708 lseek(mpeg_file, 729 lseek(mpeg_file,
709 id3tags[new_tag_idx]->id3.id3v2len, 730 id3tags[new_tag_idx]->id3.id3v2len,
710 SEEK_SET); 731 SEEK_SET);
@@ -827,9 +848,9 @@ static void mpeg_thread(void)
827 set_elapsed(id3); 848 set_elapsed(id3);
828 } 849 }
829 else { 850 else {
830 /* skip past id3v2 tag (to an even byte) */ 851 /* skip past id3v2 tag */
831 lseek(mpeg_file, 852 lseek(mpeg_file,
832 id3tags[tag_read_idx]->id3.id3v2len & ~1, 853 id3tags[tag_read_idx]->id3.id3v2len,
833 SEEK_SET); 854 SEEK_SET);
834 855
835 } 856 }
@@ -1046,8 +1067,6 @@ static void mpeg_thread(void)
1046 newpos = id3->id3v2len; 1067 newpos = id3->id3v2len;
1047 } 1068 }
1048 1069
1049 newpos = newpos & ~1;
1050
1051 if (mpeg_file >= 0) 1070 if (mpeg_file >= 0)
1052 curpos = lseek(mpeg_file, 0, SEEK_CUR); 1071 curpos = lseek(mpeg_file, 0, SEEK_CUR);
1053 else 1072 else
@@ -1196,8 +1215,7 @@ static void mpeg_thread(void)
1196 1215
1197 DEBUGF("B %x\n", amount_to_swap); 1216 DEBUGF("B %x\n", amount_to_swap);
1198 t1 = current_tick; 1217 t1 = current_tick;
1199 bitswap((unsigned short *)(mp3buf + mp3buf_swapwrite), 1218 bitswap(mp3buf + mp3buf_swapwrite, amount_to_swap);
1200 (amount_to_swap+1)/2);
1201 t2 = current_tick; 1219 t2 = current_tick;
1202 DEBUGF("time: %d\n", t2 - t1); 1220 DEBUGF("time: %d\n", t2 - t1);
1203 1221
@@ -2054,6 +2072,10 @@ void mpeg_init(int volume, int bass, int treble, int balance, int loudness, int
2054 2072
2055 memset(id3tags, sizeof(id3tags), 0); 2073 memset(id3tags, sizeof(id3tags), 0);
2056 memset(_id3tags, sizeof(id3tags), 0); 2074 memset(_id3tags, sizeof(id3tags), 0);
2075
2076#ifdef DEBUG
2077 dbg_timer_start();
2078#endif
2057} 2079}
2058 2080
2059/* ----------------------------------------------------------------- 2081/* -----------------------------------------------------------------