summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorBrandon Low <lostlogic@rockbox.org>2007-11-05 03:11:58 +0000
committerBrandon Low <lostlogic@rockbox.org>2007-11-05 03:11:58 +0000
commit47eb569b624ffa89756b121603ef315a19ffde22 (patch)
tree6335da3296a18c1f53cde578cb66a7d35e87b13b /apps
parentd02b5c744e39ea87980f75ad172aaaf0fcb29252 (diff)
downloadrockbox-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.c22
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();
+ }
}
}
}