summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/buffering.c27
-rw-r--r--apps/buffering.h2
-rw-r--r--apps/plugin.c1
-rw-r--r--apps/plugin.h5
4 files changed, 14 insertions, 21 deletions
diff --git a/apps/buffering.c b/apps/buffering.c
index a130a78..c47564b 100644
--- a/apps/buffering.c
+++ b/apps/buffering.c
@@ -1339,7 +1339,8 @@ static struct memory_handle *prep_bufdata(int handle_id, size_t *size,
if (h->filerem > 0 && avail < realsize) {
/* Data isn't ready. Request buffering */
- buf_request_buffer_handle(handle_id);
+ LOGFQUEUE("buffering >| Q_START_FILL %d",handle_id);
+ queue_send(&buffering_queue, Q_START_FILL, handle_id);
/* Wait for the data to be ready */
do
{
@@ -1486,7 +1487,6 @@ SECONDARY EXPORTED FUNCTIONS
============================
buf_handle_offset
-buf_request_buffer_handle
buf_set_base_handle
buf_handle_data_type
buf_is_handle
@@ -1510,12 +1510,6 @@ ssize_t buf_handle_offset(int handle_id)
return h->offset;
}
-void buf_request_buffer_handle(int handle_id)
-{
- LOGFQUEUE("buffering >| Q_START_FILL %d",handle_id);
- queue_send(&buffering_queue, Q_START_FILL, handle_id);
-}
-
void buf_set_base_handle(int handle_id)
{
mutex_lock(&llist_mutex);
@@ -1642,7 +1636,15 @@ static void NORETURN_ATTR buffering_thread(void)
LOGFQUEUE("buffering < Q_START_FILL %d", (int)ev.data);
shrink_buffer();
queue_reply(&buffering_queue, 1);
- filling |= buffer_handle((int)ev.data, 0);
+ if (buffer_handle((int)ev.data, 0)) {
+ filling = true;
+ }
+ else if (num_handles > 0 && conf_watermark > 0) {
+ update_data_counters(NULL);
+ if (data_counters.useful >= BUF_WATERMARK) {
+ send_event(BUFFER_EVENT_BUFFER_LOW, NULL);
+ }
+ }
break;
case Q_BUFFER_HANDLE:
@@ -1699,12 +1701,7 @@ static void NORETURN_ATTR buffering_thread(void)
#endif
if (filling) {
- if (data_counters.remaining > 0 && BUF_USED < buffer_len) {
- filling = fill_buffer();
- }
- else if (data_counters.remaining == 0) {
- filling = false;
- }
+ filling = data_counters.remaining > 0 ? fill_buffer() : false;
} else if (ev.id == SYS_TIMEOUT) {
if (data_counters.useful < BUF_WATERMARK) {
/* The buffer is low and we're idle, just watching the levels
diff --git a/apps/buffering.h b/apps/buffering.h
index 2e4cfd3..ee3e7c9 100644
--- a/apps/buffering.h
+++ b/apps/buffering.h
@@ -95,7 +95,6 @@ ssize_t bufcuttail(int handle_id, size_t size);
* buf_is_handle: is the handle valid?
* buf_pin_handle: Disallow/allow handle movement. Handle may still be removed.
* buf_handle_offset: Get the offset of the first buffered byte from the file
- * buf_request_buffer_handle: Request buffering of a handle
* buf_set_base_handle: Tell the buffering thread which handle is currently read
* buf_length: Total size of ringbuffer
* buf_used: Total amount of buffer space used (including allocated space)
@@ -106,7 +105,6 @@ enum data_type buf_handle_data_type(int handle_id);
ssize_t buf_handle_remaining(int handle_id);
bool buf_is_handle(int handle_id);
ssize_t buf_handle_offset(int handle_id);
-void buf_request_buffer_handle(int handle_id);
void buf_set_base_handle(int handle_id);
size_t buf_length(void);
size_t buf_used(void);
diff --git a/apps/plugin.c b/apps/plugin.c
index bb326d9..d9f7c4e 100644
--- a/apps/plugin.c
+++ b/apps/plugin.c
@@ -747,7 +747,6 @@ static const struct plugin_api rockbox_api = {
bufcuttail,
buf_handle_offset,
- buf_request_buffer_handle,
buf_set_base_handle,
buf_used,
#endif
diff --git a/apps/plugin.h b/apps/plugin.h
index cdf34e2..f15c626 100644
--- a/apps/plugin.h
+++ b/apps/plugin.h
@@ -145,12 +145,12 @@ void* plugin_get_buffer(size_t *buffer_size);
#define PLUGIN_MAGIC 0x526F634B /* RocK */
/* increase this every time the api struct changes */
-#define PLUGIN_API_VERSION 204
+#define PLUGIN_API_VERSION 205
/* update this to latest version if a change to the api struct breaks
backwards compatibility (and please take the opportunity to sort in any
new function which are "waiting" at the end of the function table) */
-#define PLUGIN_MIN_API_VERSION 204
+#define PLUGIN_MIN_API_VERSION 205
/* plugin return codes */
/* internal returns start at 0x100 to make exit(1..255) work */
@@ -873,7 +873,6 @@ struct plugin_api {
ssize_t (*bufcuttail)(int handle_id, size_t size);
ssize_t (*buf_handle_offset)(int handle_id);
- void (*buf_request_buffer_handle)(int handle_id);
void (*buf_set_base_handle)(int handle_id);
size_t (*buf_used)(void);
#endif