From 10befc8e6ed2129143af79cfcfbc0fd5a4fe3d85 Mon Sep 17 00:00:00 2001 From: Steve Bavin Date: Sun, 15 Oct 2006 11:03:26 +0000 Subject: Don't unboost CPU in an ISR git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11224 a1c6a512-1295-4272-9138-f99709370657 --- apps/pcmbuf.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'apps/pcmbuf.c') diff --git a/apps/pcmbuf.c b/apps/pcmbuf.c index 964ebbc901..d8612a4fbc 100644 --- a/apps/pcmbuf.c +++ b/apps/pcmbuf.c @@ -94,6 +94,7 @@ static size_t pcmbuf_mix_sample IDATA_ATTR; static bool low_latency_mode = false; static bool pcmbuf_flush; +static volatile bool output_completed = false; extern struct thread_entry *codec_thread_p; @@ -115,7 +116,7 @@ void pcmbuf_boost(bool state) #ifdef HAVE_PRIORITY_SCHEDULING static bool priority_modified = false; #endif - + if (crossfade_init || crossfade_active) return; @@ -203,14 +204,7 @@ process_new_buffer: *realsize = 0; *realstart = NULL; CALL_IF_EXISTS(pcmbuf_event_handler); - /* FIXME: We need to find another way to keep the CPU from - * being left boosted, because this is boosting in interrupt - * context. This is also not a good thing, because it will - * result in the CPU being deboosted if there is a legitimate - * buffer underrun (albeit only temporarily, because someone - * will reboost it soon, but it will make the skip longer - * than necessary. */ - pcmbuf_boost(false); + output_completed = true; } } } @@ -1037,3 +1031,12 @@ bool pcmbuf_is_crossfade_enabled(void) return crossfade_enabled; } +bool pcmbuf_output_completed(void) +{ + if (output_completed) + { + output_completed = false; + return true; + } + return false; +} -- cgit v1.2.3