summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/mpeg.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c
index 857cd67153..70232571b7 100644
--- a/firmware/mpeg.c
+++ b/firmware/mpeg.c
@@ -38,6 +38,7 @@
38#define MPEG_SWAP_CHUNKSIZE 0x8000 38#define MPEG_SWAP_CHUNKSIZE 0x8000
39#define MPEG_HIGH_WATER 2 39#define MPEG_HIGH_WATER 2
40#define MPEG_LOW_WATER 0x40000 40#define MPEG_LOW_WATER 0x40000
41#define MPEG_LOW_WATER_CHUNKSIZE 0x10000
41 42
42#define MPEG_PLAY 1 43#define MPEG_PLAY 1
43#define MPEG_STOP 2 44#define MPEG_STOP 2
@@ -496,6 +497,7 @@ static void mpeg_thread(void)
496 struct event ev; 497 struct event ev;
497 int len; 498 int len;
498 int free_space_left; 499 int free_space_left;
500 int unplayed_space_left;
499 int amount_to_read; 501 int amount_to_read;
500 int amount_to_swap; 502 int amount_to_swap;
501 503
@@ -676,6 +678,8 @@ static void mpeg_thread(void)
676 if(free_space_left <= 0) 678 if(free_space_left <= 0)
677 free_space_left = mp3buflen + free_space_left; 679 free_space_left = mp3buflen + free_space_left;
678 680
681 unplayed_space_left = mp3buflen - free_space_left;
682
679 /* Make sure that we don't fill the entire buffer */ 683 /* Make sure that we don't fill the entire buffer */
680 free_space_left -= 2; 684 free_space_left -= 2;
681 685
@@ -694,7 +698,11 @@ static void mpeg_thread(void)
694 } 698 }
695 else 699 else
696 { 700 {
697 amount_to_read = MIN(MPEG_CHUNKSIZE, free_space_left); 701 if(unplayed_space_left < MPEG_LOW_WATER)
702 amount_to_read = MIN(MPEG_LOW_WATER_CHUNKSIZE,
703 free_space_left);
704 else
705 amount_to_read = MIN(MPEG_CHUNKSIZE, free_space_left);
698 } 706 }
699 amount_to_read = MIN(mp3buflen - mp3buf_write, amount_to_read); 707 amount_to_read = MIN(mp3buflen - mp3buf_write, amount_to_read);
700 708