diff options
-rw-r--r-- | apps/playback.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/apps/playback.c b/apps/playback.c index f23c8126d4..fdd097d29c 100644 --- a/apps/playback.c +++ b/apps/playback.c | |||
@@ -263,7 +263,7 @@ static void mp3_set_elapsed(struct mp3entry* id3); | |||
263 | static int mp3_get_file_pos(void); | 263 | static int mp3_get_file_pos(void); |
264 | 264 | ||
265 | static void audio_clear_track_entries( | 265 | static void audio_clear_track_entries( |
266 | bool clear_buffered, bool clear_unbuffered); | 266 | bool clear_buffered, bool clear_unbuffered, bool may_yield); |
267 | static void initialize_buffer_fill(bool clear_tracks); | 267 | static void initialize_buffer_fill(bool clear_tracks); |
268 | static void audio_fill_file_buffer( | 268 | static void audio_fill_file_buffer( |
269 | bool start_play, bool rebuffer, size_t offset); | 269 | bool start_play, bool rebuffer, size_t offset); |
@@ -951,7 +951,7 @@ static void audio_rebuffer(void) | |||
951 | buf_ridx = buf_widx = 0; | 951 | buf_ridx = buf_widx = 0; |
952 | track_widx = track_ridx; | 952 | track_widx = track_ridx; |
953 | cur_ti = &tracks[track_ridx]; | 953 | cur_ti = &tracks[track_ridx]; |
954 | audio_clear_track_entries(true, true); | 954 | audio_clear_track_entries(true, true, false); |
955 | filebufused = 0; | 955 | filebufused = 0; |
956 | 956 | ||
957 | /* Fill the buffer */ | 957 | /* Fill the buffer */ |
@@ -1890,7 +1890,8 @@ static bool audio_load_track(int offset, bool start_play, bool rebuffer) | |||
1890 | 1890 | ||
1891 | /* Note that this function might yield(). */ | 1891 | /* Note that this function might yield(). */ |
1892 | static void audio_clear_track_entries( | 1892 | static void audio_clear_track_entries( |
1893 | bool clear_buffered, bool clear_unbuffered) | 1893 | bool clear_buffered, bool clear_unbuffered, |
1894 | bool may_yield) | ||
1894 | { | 1895 | { |
1895 | int cur_idx = track_widx; | 1896 | int cur_idx = track_widx; |
1896 | int last_idx = -1; | 1897 | int last_idx = -1; |
@@ -1918,7 +1919,8 @@ static void audio_clear_track_entries( | |||
1918 | * just clear the track */ | 1919 | * just clear the track */ |
1919 | if (track_unbuffer_callback) | 1920 | if (track_unbuffer_callback) |
1920 | { | 1921 | { |
1921 | yield_codecs(); | 1922 | if (may_yield) |
1923 | yield_codecs(); | ||
1922 | track_unbuffer_callback(&tracks[last_idx].id3, false); | 1924 | track_unbuffer_callback(&tracks[last_idx].id3, false); |
1923 | } | 1925 | } |
1924 | 1926 | ||
@@ -1985,7 +1987,7 @@ static void audio_stop_playback(void) | |||
1985 | } | 1987 | } |
1986 | 1988 | ||
1987 | /* Mark all entries null. */ | 1989 | /* Mark all entries null. */ |
1988 | audio_clear_track_entries(true, false); | 1990 | audio_clear_track_entries(true, false, false); |
1989 | memset(tracks, 0, sizeof(struct track_info) * MAX_TRACK); | 1991 | memset(tracks, 0, sizeof(struct track_info) * MAX_TRACK); |
1990 | } | 1992 | } |
1991 | 1993 | ||
@@ -2085,7 +2087,7 @@ static void initialize_buffer_fill(bool clear_tracks) | |||
2085 | // cur_ti->start_pos = buf_ridx - cur_ti->buf_idx; | 2087 | // cur_ti->start_pos = buf_ridx - cur_ti->buf_idx; |
2086 | 2088 | ||
2087 | if (clear_tracks) | 2089 | if (clear_tracks) |
2088 | audio_clear_track_entries(true, false); | 2090 | audio_clear_track_entries(true, false, true); |
2089 | 2091 | ||
2090 | /* Save the current resume position once. */ | 2092 | /* Save the current resume position once. */ |
2091 | playlist_update_resume_info(audio_current_track()); | 2093 | playlist_update_resume_info(audio_current_track()); |
@@ -2237,7 +2239,7 @@ void audio_invalidate_tracks(void) | |||
2237 | 2239 | ||
2238 | playlist_end = false; | 2240 | playlist_end = false; |
2239 | track_widx = track_ridx; | 2241 | track_widx = track_ridx; |
2240 | audio_clear_track_entries(true, true); | 2242 | audio_clear_track_entries(true, true, true); |
2241 | 2243 | ||
2242 | /* If the current track is fully buffered, advance the write pointer */ | 2244 | /* If the current track is fully buffered, advance the write pointer */ |
2243 | if (tracks[track_widx].filerem == 0) | 2245 | if (tracks[track_widx].filerem == 0) |
@@ -2260,7 +2262,7 @@ static void audio_new_playlist(void) | |||
2260 | if (have_tracks()) { | 2262 | if (have_tracks()) { |
2261 | playlist_end = false; | 2263 | playlist_end = false; |
2262 | track_widx = track_ridx; | 2264 | track_widx = track_ridx; |
2263 | audio_clear_track_entries(true, true); | 2265 | audio_clear_track_entries(true, true, true); |
2264 | 2266 | ||
2265 | track_widx++; | 2267 | track_widx++; |
2266 | track_widx &= MAX_TRACK_MASK; | 2268 | track_widx &= MAX_TRACK_MASK; |
@@ -2333,7 +2335,7 @@ void audio_thread(void) | |||
2333 | 2335 | ||
2334 | case Q_AUDIO_PLAY: | 2336 | case Q_AUDIO_PLAY: |
2335 | logf("starting..."); | 2337 | logf("starting..."); |
2336 | audio_clear_track_entries(true, false); | 2338 | audio_clear_track_entries(true, false, true); |
2337 | audio_play_start((size_t)ev.data); | 2339 | audio_play_start((size_t)ev.data); |
2338 | break ; | 2340 | break ; |
2339 | 2341 | ||