summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrandon Low <lostlogic@rockbox.org>2006-04-15 09:19:49 +0000
committerBrandon Low <lostlogic@rockbox.org>2006-04-15 09:19:49 +0000
commitbf397b5635fb619cd782e9496059fb5082b3ae40 (patch)
tree4ea881dbf4410a07b58179c13725c1f92762ae4b
parent521a3595682db5f08b9a686841387eb3dc265cb8 (diff)
downloadrockbox-bf397b5635fb619cd782e9496059fb5082b3ae40.tar.gz
rockbox-bf397b5635fb619cd782e9496059fb5082b3ae40.zip
Remove an unneeded WPS update signal. Make the codec thread more polite about requesting buffering. Prevent more Codec failure pops when the codec was _asked_ to stop.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9674 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/playback.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/apps/playback.c b/apps/playback.c
index cb2cbac82e..1aa595b131 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -522,8 +522,9 @@ size_t codec_filebuf_callback(void *ptr, size_t size)
522 522
523 /* Let the disk buffer catch fill until enough data is available */ 523 /* Let the disk buffer catch fill until enough data is available */
524 while (copy_n > cur_ti->available) { 524 while (copy_n > cur_ti->available) {
525 queue_post(&audio_queue, Q_AUDIO_FILL_BUFFER, 0); 525 if (!filling)
526 yield(); 526 queue_post(&audio_queue, Q_AUDIO_FILL_BUFFER, 0);
527 sleep(1);
527 if (ci.stop_codec || ci.new_track) 528 if (ci.stop_codec || ci.new_track)
528 return 0; 529 return 0;
529 } 530 }
@@ -604,8 +605,9 @@ void* codec_request_buffer_callback(size_t *realsize, size_t reqsize)
604 } 605 }
605 606
606 while (copy_n > cur_ti->available) { 607 while (copy_n > cur_ti->available) {
607 queue_post(&audio_queue, Q_AUDIO_FILL_BUFFER, 0); 608 if (!filling)
608 yield(); 609 queue_post(&audio_queue, Q_AUDIO_FILL_BUFFER, 0);
610 sleep(1);
609 if (ci.stop_codec || ci.new_track) { 611 if (ci.stop_codec || ci.new_track) {
610 *realsize = 0; 612 *realsize = 0;
611 return NULL; 613 return NULL;
@@ -1927,7 +1929,6 @@ static void initiate_track_change(long direction)
1927{ 1929{
1928 playlist_end = false; 1930 playlist_end = false;
1929 ci.new_track += direction; 1931 ci.new_track += direction;
1930 track_changed = true;
1931} 1932}
1932 1933
1933static void initiate_dir_change(long direction) 1934static void initiate_dir_change(long direction)
@@ -2101,8 +2102,12 @@ void codec_thread(void)
2101 } 2102 }
2102 2103
2103 if (audio_codec_loaded) 2104 if (audio_codec_loaded)
2104 if (!playing && ci.stop_codec) 2105 if (ci.stop_codec)
2105 pcmbuf_play_stop(); 2106 {
2107 status = CODEC_OK;
2108 if (!playing)
2109 pcmbuf_play_stop();
2110 }
2106 2111
2107 audio_codec_loaded = false; 2112 audio_codec_loaded = false;
2108 2113