diff options
author | Brandon Low <lostlogic@rockbox.org> | 2007-11-05 03:11:58 +0000 |
---|---|---|
committer | Brandon Low <lostlogic@rockbox.org> | 2007-11-05 03:11:58 +0000 |
commit | 47eb569b624ffa89756b121603ef315a19ffde22 (patch) | |
tree | 6335da3296a18c1f53cde578cb66a7d35e87b13b /apps | |
parent | d02b5c744e39ea87980f75ad172aaaf0fcb29252 (diff) | |
download | rockbox-47eb569b624ffa89756b121603ef315a19ffde22.tar.gz rockbox-47eb569b624ffa89756b121603ef315a19ffde22.zip |
SHould fix FS#8074, is more better regardless though
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15466 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r-- | apps/buffering.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/apps/buffering.c b/apps/buffering.c index 072517fe1c..fa4bf7eef6 100644 --- a/apps/buffering.c +++ b/apps/buffering.c @@ -179,6 +179,8 @@ enum { Q_SET_WATERMARK, Q_SET_CHUNKSIZE, Q_SET_PRESEEK, + Q_FILL_BUFFER, /* Request that the buffering thread initiate a buffer + fill at its earliest convenience */ }; /* Buffering thread */ @@ -1083,6 +1085,9 @@ ssize_t buf_handle_offset(int handle_id) void buf_request_buffer_handle(int handle_id) { + LOGFQUEUE("buffering >| buffering Q_FILL_BUFFER"); + queue_send(&buffering_queue, Q_FILL_BUFFER, 0); + LOGFQUEUE("buffering >| buffering Q_BUFFER_HANDLE %d", handle_id); queue_send(&buffering_queue, Q_BUFFER_HANDLE, handle_id); } @@ -1190,14 +1195,19 @@ void buffering_thread(void) switch (ev.id) { - case Q_BUFFER_HANDLE: - LOGFQUEUE("buffering < Q_BUFFER_HANDLE"); - queue_reply(&buffering_queue, 1); + case Q_FILL_BUFFER: + LOGFQUEUE("buffering < Q_FILL_BUFFER"); /* Call buffer callbacks here because this is one of two ways * to begin a full buffer fill */ call_buffer_low_callbacks(); - buffer_handle((int)ev.data); + shrink_buffer(first_handle); filling = true; + queue_reply(&buffering_queue, 1); + break; + case Q_BUFFER_HANDLE: + LOGFQUEUE("buffering < Q_BUFFER_HANDLE"); + queue_reply(&buffering_queue, 1); + buffer_handle((int)ev.data); break; case Q_RESET_HANDLE: @@ -1292,8 +1302,10 @@ void buffering_thread(void) else if (ev.id == SYS_TIMEOUT) { if (data_counters.remaining > 0 && - data_counters.useful <= conf_watermark) + data_counters.useful <= conf_watermark) { + shrink_buffer(first_handle); filling = fill_buffer(); + } } } } |