From aabd6885bf48fca99973f12d3947865c63c60862 Mon Sep 17 00:00:00 2001 From: Brandon Low Date: Sun, 4 Nov 2007 02:40:24 +0000 Subject: [PATCH] More try to fix 8077, BUF_USED is not a good way to determine if the buffer is healthy any more, we'll need a enw way if we need to resurrect yield_codec later git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15447 a1c6a512-1295-4272-9138-f99709370657 --- apps/buffering.c | 44 ++++++++++++++------------------------------ 1 file changed, 14 insertions(+), 30 deletions(-) diff --git a/apps/buffering.c b/apps/buffering.c index c4766561a4..46abf653c7 100644 --- a/apps/buffering.c +++ b/apps/buffering.c @@ -515,33 +515,6 @@ These functions are used by the buffering thread to manage buffer space. */ -static inline bool filebuf_is_lowdata(void) -{ - return BUF_USED < BUFFERING_CRITICAL_LEVEL; -} - -/* Yield to the codec thread for as long as possible if it is in need of data. - Return true if the caller should break to let the buffering thread process - new queue events */ -static bool yield_codec(void) -{ - yield(); - - if (!queue_empty(&buffering_queue)) - return true; - - while (pcmbuf_is_lowdata() && !filebuf_is_lowdata()) - { - sleep(2); - trigger_cpu_boost(); - - if (!queue_empty(&buffering_queue)) - return true; - } - - return false; -} - /* Buffer data for the given handle. Return whether or not the buffering should continue explicitly. */ static bool buffer_handle(int handle_id) @@ -618,9 +591,20 @@ static bool buffer_handle(int handle_id) h->available += rc; h->filerem -= rc; - /* Stop buffering if new queue events have arrived */ - if (breakable && yield_codec()) - break; + yield(); + /* If this is a large file, see if we need to breakor give the codec + * more time */ + if (breakable) { + if (!queue_empty(&buffering_queue)) + break; + if (pcmbuf_is_lowdata()) + { + sleep(2); + trigger_cpu_boost(); + if (!queue_empty(&buffering_queue)) + break; + } + } } if (h->filerem == 0) {