diff options
| author | Michael Sevakis <jethead71@rockbox.org> | 2012-05-03 15:54:48 +0200 |
|---|---|---|
| committer | Nils Wallménius <nils@rockbox.org> | 2012-05-03 23:47:46 +0200 |
| commit | dbe5e5f2df24a0dbe650561c0b42ce982346534c (patch) | |
| tree | 65dffbf75406724b6772c79acaf6e2bff8c2ffcb /lib | |
| parent | 00cf2ce711c87cc6a3d44bce44e3b1b67a188e56 (diff) | |
| download | rockbox-dbe5e5f2df24a0dbe650561c0b42ce982346534c.zip rockbox-dbe5e5f2df24a0dbe650561c0b42ce982346534c.tar.gz rockbox-dbe5e5f2df24a0dbe650561c0b42ce982346534c.tar.bz2 rockbox-dbe5e5f2df24a0dbe650561c0b42ce982346534c.tar.xz | |
rbcodec: Hooks for target specific functions in dsp_process loop
Use them to move tick counting, yielding and coldfire macsr handling
code to a rockbox specific file.
Change-Id: Id7417dc98c08a342eba45ba56b044a276e50564b
Reviewed-on: http://gerrit.rockbox.org/229
Tested-by: Nils Wallménius <nils@rockbox.org>
Reviewed-by: Nils Wallménius <nils@rockbox.org>
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/rbcodec/dsp/dsp_core.c | 58 | ||||
| -rw-r--r-- | lib/rbcodec/test/warble.c | 11 |
2 files changed, 22 insertions, 47 deletions
diff --git a/lib/rbcodec/dsp/dsp_core.c b/lib/rbcodec/dsp/dsp_core.c index 44e53eb..175b9c1 100644 --- a/lib/rbcodec/dsp/dsp_core.c +++ b/lib/rbcodec/dsp/dsp_core.c @@ -21,6 +21,7 @@ ****************************************************************************/ #include "config.h" #include "system.h" +#include "platform.h" #include "dsp_core.h" #include "dsp_sample_io.h" #include <sys/types.h> @@ -52,9 +53,6 @@ struct dsp_config active/enabled stages */ /** Misc. extra stuff **/ -#ifdef CPU_COLDFIRE - unsigned long old_macsr; /* Old macsr value to restore */ -#endif #if 0 /* Not needed now but enable if something must know this */ bool processing; /* DSP is processing (to thwart inopportune buffer moves) */ @@ -350,31 +348,12 @@ bool dsp_proc_call(struct dsp_proc_entry *this, struct dsp_buffer **buf_p, return false; } -static inline void dsp_process_start(struct dsp_config *dsp) -{ -#if defined(CPU_COLDFIRE) - /* set emac unit for dsp processing, and save old macsr, we're running in - codec thread context at this point, so can't clobber it */ - dsp->old_macsr = coldfire_get_macsr(); - coldfire_set_macsr(EMAC_FRACTIONAL | EMAC_SATURATE); -#endif -#if 0 /* Not needed now but enable if something must know this */ - dsp->processing = true; -#endif - (void)dsp; -} - -static inline void dsp_process_end(struct dsp_config *dsp) -{ -#if 0 /* Not needed now but enable if something must know this */ - dsp->processing = false; -#endif -#if defined(CPU_COLDFIRE) - /* set old macsr again */ - coldfire_set_macsr(dsp->old_macsr); -#endif - (void)dsp; -} +#ifndef DSP_PROCESS_START +/* These do nothing if not previously defined */ +#define DSP_PROCESS_START() +#define DSP_PROCESS_LOOP() +#define DSP_PROCESS_END() +#endif /* !DSP_PROCESS_START */ /** * dsp_process: @@ -429,11 +408,10 @@ void dsp_process(struct dsp_config *dsp, struct dsp_buffer *src, return; } - /* At least perform one yield before starting */ - long last_yield = current_tick; - yield(); - - dsp_process_start(dsp); + DSP_PROCESS_START(); +#if 0 /* Not needed now but enable if something must know this */ + dsp->processing = true; +#endif /* Tag input with codec-specified sample format */ src->format = dsp->io_data.format; @@ -478,16 +456,14 @@ void dsp_process(struct dsp_config *dsp, struct dsp_buffer *src, dsp_advance_buffer32(buf, outcount); dsp_advance_buffer_output(dst, outcount); - /* Yield at least once each tick */ - long tick = current_tick; - if (TIME_AFTER(tick, last_yield)) - { - last_yield = tick; - yield(); - } + DSP_PROCESS_LOOP(); } /* while */ - dsp_process_end(dsp); +#if 0 /* Not needed now but enable if something must know this */ + dsp->process = false; +#endif + + DSP_PROCESS_END(); } intptr_t dsp_configure(struct dsp_config *dsp, unsigned int setting, diff --git a/lib/rbcodec/test/warble.c b/lib/rbcodec/test/warble.c index 53d360d..ea8efcf 100644 --- a/lib/rbcodec/test/warble.c +++ b/lib/rbcodec/test/warble.c @@ -45,11 +45,6 @@ /***************** EXPORTED *****************/ struct user_settings global_settings; -volatile long current_tick = 0; - -void yield(void) -{ -} int set_irq_level(int level) { @@ -601,6 +596,10 @@ static void ci_logf(const char *fmt, ...) } #endif +static void ci_yield(void) +{ +} + static void commit_dcache(void) {} static void commit_discard_dcache(void) {} static void commit_discard_idcache(void) {} @@ -626,7 +625,7 @@ static struct codec_api ci = { ci_should_loop, ci_sleep, - yield, + ci_yield, #if NUM_CORES > 1 ci_create_thread, |