diff options
Diffstat (limited to 'firmware/mpeg.c')
-rw-r--r-- | firmware/mpeg.c | 22 |
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 | ||
122 | static unsigned short big_fliptable[65536]; | ||
123 | |||
122 | static struct event_queue mpeg_queue; | 124 | static struct event_queue mpeg_queue; |
123 | static int mpeg_stack[MPEG_STACK_SIZE/sizeof(int)]; | 125 | static 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 | ||
139 | static int mpeg_file; | 141 | static int mpeg_file; |
140 | 142 | ||
143 | static 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 | |||
141 | static void mas_poll_start(int interval_in_ms) | 153 | static 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 | ||
210 | static void bitswap(unsigned char *data, int length) | 222 | static 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 | ||