diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/mpeg.c | 90 |
1 files changed, 46 insertions, 44 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c index cb19ebddf9..dae0ef4d41 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c | |||
@@ -354,62 +354,64 @@ static void mpeg_thread(void) | |||
354 | read too large chunks because the bitswapping will take | 354 | read too large chunks because the bitswapping will take |
355 | too much time. We must keep the DMA happy and also give | 355 | too much time. We must keep the DMA happy and also give |
356 | the other threads a chance to run. */ | 356 | the other threads a chance to run. */ |
357 | DEBUGF("R\n"); | 357 | if(filling) |
358 | len = read(mpeg_file, mp3buf+mp3buf_write, amount_to_read); | ||
359 | if(len) | ||
360 | { | 358 | { |
361 | DEBUGF("B\n"); | 359 | DEBUGF("R\n"); |
362 | bitswap(mp3buf + mp3buf_write, len); | 360 | len = read(mpeg_file, mp3buf+mp3buf_write, amount_to_read); |
363 | 361 | if(len) | |
364 | mp3buf_write += len; | ||
365 | if(mp3buf_write >= mp3buflen) | ||
366 | { | 362 | { |
367 | mp3buf_write = 0; | 363 | DEBUGF("B\n"); |
368 | DEBUGF("W\n"); | 364 | bitswap(mp3buf + mp3buf_write, len); |
369 | } | 365 | |
366 | mp3buf_write += len; | ||
367 | if(mp3buf_write >= mp3buflen) | ||
368 | { | ||
369 | mp3buf_write = 0; | ||
370 | DEBUGF("W\n"); | ||
371 | } | ||
370 | 372 | ||
371 | /* Tell ourselves that we want more data */ | 373 | /* Tell ourselves that we want more data */ |
372 | queue_post(&mpeg_queue, MPEG_NEED_DATA, 0); | 374 | queue_post(&mpeg_queue, MPEG_NEED_DATA, 0); |
373 | 375 | ||
374 | /* And while we're at it, see if we have startet playing | 376 | /* And while we're at it, see if we have started |
375 | yet. If not, do it. */ | 377 | playing yet. If not, do it. */ |
376 | if(play_pending) | 378 | if(play_pending) |
377 | { | 379 | { |
378 | play_pending = false; | 380 | play_pending = false; |
379 | playing = true; | 381 | playing = true; |
380 | 382 | ||
381 | init_dma(); | 383 | init_dma(); |
382 | start_dma(); | 384 | start_dma(); |
385 | } | ||
383 | } | 386 | } |
384 | } | 387 | else |
385 | else | 388 | { |
386 | { | 389 | close(mpeg_file); |
387 | close(mpeg_file); | ||
388 | 390 | ||
389 | /* Make sure that the write pointer is at a word | 391 | /* Make sure that the write pointer is at a word |
390 | boundary */ | 392 | boundary */ |
391 | mp3buf_write &= 0xfffffffe; | 393 | mp3buf_write &= 0xfffffffe; |
392 | 394 | ||
393 | #if 1 | 395 | #if 1 |
394 | /* No more data to play */ | ||
395 | DEBUGF("Finished playing\n"); | ||
396 | playing = false; | ||
397 | filling = false; | ||
398 | #else | ||
399 | next_track(); | ||
400 | if(new_file() < 0) | ||
401 | { | ||
402 | /* No more data to play */ | 396 | /* No more data to play */ |
403 | DEBUGF("Finished playing\n"); | 397 | DEBUGF("Finished playing\n"); |
404 | playing = false; | ||
405 | filling = false; | 398 | filling = false; |
406 | } | 399 | #else |
407 | else | 400 | next_track(); |
408 | { | 401 | if(new_file() < 0) |
409 | /* Tell ourselves that we want more data */ | 402 | { |
410 | queue_post(&mpeg_queue, MPEG_NEED_DATA, 0); | 403 | /* No more data to play */ |
411 | } | 404 | DEBUGF("Finished playing\n"); |
405 | playing = false; | ||
406 | filling = false; | ||
407 | } | ||
408 | else | ||
409 | { | ||
410 | /* Tell ourselves that we want more data */ | ||
411 | queue_post(&mpeg_queue, MPEG_NEED_DATA, 0); | ||
412 | } | ||
412 | #endif | 413 | #endif |
414 | } | ||
413 | } | 415 | } |
414 | break; | 416 | break; |
415 | } | 417 | } |
@@ -482,7 +484,7 @@ void mpeg_resume(void) | |||
482 | 484 | ||
483 | void mpeg_volume(int percent) | 485 | void mpeg_volume(int percent) |
484 | { | 486 | { |
485 | int volume = 0x2c * percent / 100; | 487 | int volume = 0x38 * percent / 100; |
486 | dac_volume(volume); | 488 | dac_volume(volume); |
487 | } | 489 | } |
488 | 490 | ||