diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/mpeg.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c index 9e61e02e00..db8994c3bc 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c | |||
@@ -92,7 +92,7 @@ extern char* playlist_peek(int steps); | |||
92 | extern bool playlist_check(int steps); | 92 | extern bool playlist_check(int steps); |
93 | extern int playlist_next(int steps); | 93 | extern int playlist_next(int steps); |
94 | extern int playlist_amount(void); | 94 | extern int playlist_amount(void); |
95 | extern void update_file_pos( int id, int pos ); | 95 | extern int playlist_update_resume_info(const struct mp3entry* id3); |
96 | 96 | ||
97 | /* list of tracks in memory */ | 97 | /* list of tracks in memory */ |
98 | #define MAX_TRACK_ENTRIES (1<<4) /* Must be power of 2 */ | 98 | #define MAX_TRACK_ENTRIES (1<<4) /* Must be power of 2 */ |
@@ -872,6 +872,8 @@ static void update_playlist(void) | |||
872 | if (playlist_next(playlist_amount()) < 0) | 872 | if (playlist_next(playlist_amount()) < 0) |
873 | is_playing = false; | 873 | is_playing = false; |
874 | } | 874 | } |
875 | |||
876 | playlist_update_resume_info(audio_current_track()); | ||
875 | } | 877 | } |
876 | 878 | ||
877 | static void track_change(void) | 879 | static void track_change(void) |
@@ -1036,6 +1038,11 @@ static void mpeg_thread(void) | |||
1036 | { | 1038 | { |
1037 | queue_wait_w_tmo(&mpeg_queue, &ev, 0); | 1039 | queue_wait_w_tmo(&mpeg_queue, &ev, 0); |
1038 | } | 1040 | } |
1041 | else if (playing) | ||
1042 | { | ||
1043 | /* periodically update resume info */ | ||
1044 | queue_wait_w_tmo(&mpeg_queue, &ev, HZ/2); | ||
1045 | } | ||
1039 | else | 1046 | else |
1040 | { | 1047 | { |
1041 | DEBUGF("S R:%x W:%x SW:%x\n", | 1048 | DEBUGF("S R:%x W:%x SW:%x\n", |
@@ -1108,6 +1115,10 @@ static void mpeg_thread(void) | |||
1108 | DEBUGF("MPEG_STOP\n"); | 1115 | DEBUGF("MPEG_STOP\n"); |
1109 | is_playing = false; | 1116 | is_playing = false; |
1110 | paused = false; | 1117 | paused = false; |
1118 | |||
1119 | if (playing) | ||
1120 | playlist_update_resume_info(audio_current_track()); | ||
1121 | |||
1111 | stop_playing(); | 1122 | stop_playing(); |
1112 | mpeg_stop_done = true; | 1123 | mpeg_stop_done = true; |
1113 | break; | 1124 | break; |
@@ -1120,6 +1131,7 @@ static void mpeg_thread(void) | |||
1120 | pause_tick = current_tick; | 1131 | pause_tick = current_tick; |
1121 | pause_track = current_track_counter; | 1132 | pause_track = current_track_counter; |
1122 | mp3_play_pause(false); | 1133 | mp3_play_pause(false); |
1134 | playlist_update_resume_info(audio_current_track()); | ||
1123 | break; | 1135 | break; |
1124 | 1136 | ||
1125 | case MPEG_RESUME: | 1137 | case MPEG_RESUME: |
@@ -1564,6 +1576,11 @@ static void mpeg_thread(void) | |||
1564 | init_recording_done = true; | 1576 | init_recording_done = true; |
1565 | break; | 1577 | break; |
1566 | #endif /* #if CONFIG_HWCODEC == MAS3587F */ | 1578 | #endif /* #if CONFIG_HWCODEC == MAS3587F */ |
1579 | |||
1580 | case SYS_TIMEOUT: | ||
1581 | if (playing) | ||
1582 | playlist_update_resume_info(audio_current_track()); | ||
1583 | break; | ||
1567 | } | 1584 | } |
1568 | #if CONFIG_HWCODEC == MAS3587F | 1585 | #if CONFIG_HWCODEC == MAS3587F |
1569 | } | 1586 | } |