summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2006-08-03 07:45:53 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2006-08-03 07:45:53 +0000
commitbb5330cb881c3a400f29871c839fe15515b57565 (patch)
tree14257eee8c598ad191394ee8144a40f10ec55988 /apps
parentab279dd6bfbe8650463c4116133ffe04ccb2d3f1 (diff)
downloadrockbox-bb5330cb881c3a400f29871c839fe15515b57565.tar.gz
rockbox-bb5330cb881c3a400f29871c839fe15515b57565.zip
Don't yield_codecs() within codec thread.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10428 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/playback.c20
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);
263static int mp3_get_file_pos(void); 263static int mp3_get_file_pos(void);
264 264
265static void audio_clear_track_entries( 265static void audio_clear_track_entries(
266 bool clear_buffered, bool clear_unbuffered); 266 bool clear_buffered, bool clear_unbuffered, bool may_yield);
267static void initialize_buffer_fill(bool clear_tracks); 267static void initialize_buffer_fill(bool clear_tracks);
268static void audio_fill_file_buffer( 268static 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(). */
1892static void audio_clear_track_entries( 1892static 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