summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/mpeg.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c
index 18c8e701fd..eda08e139d 100644
--- a/firmware/mpeg.c
+++ b/firmware/mpeg.c
@@ -119,6 +119,8 @@ static unsigned char fliptable[] =
119 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff 119 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
120}; 120};
121 121
122static unsigned short big_fliptable[65536];
123
122static struct event_queue mpeg_queue; 124static struct event_queue mpeg_queue;
123static int mpeg_stack[MPEG_STACK_SIZE/sizeof(int)]; 125static int mpeg_stack[MPEG_STACK_SIZE/sizeof(int)];
124 126
@@ -138,6 +140,16 @@ static bool filling; /* We are filling the buffer with data from disk */
138 140
139static int mpeg_file; 141static int mpeg_file;
140 142
143static void create_fliptable(void)
144{
145 int i;
146
147 for(i = 0;i < 65536;i++)
148 {
149 big_fliptable[i] = fliptable[i & 0xff] | (fliptable[i >> 8] << 8);
150 }
151}
152
141static void mas_poll_start(int interval_in_ms) 153static void mas_poll_start(int interval_in_ms)
142{ 154{
143 unsigned int count; 155 unsigned int count;
@@ -207,12 +219,12 @@ static void dma_tick(void)
207 } 219 }
208} 220}
209 221
210static void bitswap(unsigned char *data, int length) 222static void bitswap(unsigned short *data, int length)
211{ 223{
212 int i = length; 224 int i = length;
213 while(i--) 225 while(i--)
214 { 226 {
215 data[i] = fliptable[data[i]]; 227 data[i] = big_fliptable[data[i]];
216 } 228 }
217} 229}
218 230
@@ -393,7 +405,9 @@ static void mpeg_thread(void)
393 if(len > 0) 405 if(len > 0)
394 { 406 {
395 DEBUGF("B\n"); 407 DEBUGF("B\n");
396 bitswap(mp3buf + mp3buf_write, len); 408
409 bitswap((unsigned short *)(mp3buf + mp3buf_write),
410 (len+1)/2);
397 411
398 mp3buf_write += len; 412 mp3buf_write += len;
399 if(mp3buf_write >= mp3buflen) 413 if(mp3buf_write >= mp3buflen)
@@ -609,6 +623,8 @@ void mpeg_init(void)
609 623
610 mp3buflen = mp3end - mp3buf; 624 mp3buflen = mp3end - mp3buf;
611 625
626 create_fliptable();
627
612 queue_init(&mpeg_queue); 628 queue_init(&mpeg_queue);
613 create_thread(mpeg_thread, mpeg_stack, sizeof(mpeg_stack)); 629 create_thread(mpeg_thread, mpeg_stack, sizeof(mpeg_stack));
614 630