diff options
| author | Michael Sevakis <jethead71@rockbox.org> | 2008-03-20 17:03:57 +0000 |
|---|---|---|
| committer | Michael Sevakis <jethead71@rockbox.org> | 2008-03-20 17:03:57 +0000 |
| commit | d3ecbbf988331d92883db69fadc626b0b9199967 (patch) | |
| tree | 410f14fd771dee33d5a284145f5bde33368bcbfa /apps | |
| parent | 0b3f2411879f26127bf9bc128fafca6a79c6b932 (diff) | |
| download | rockbox-d3ecbbf988331d92883db69fadc626b0b9199967.zip rockbox-d3ecbbf988331d92883db69fadc626b0b9199967.tar.gz rockbox-d3ecbbf988331d92883db69fadc626b0b9199967.tar.bz2 rockbox-d3ecbbf988331d92883db69fadc626b0b9199967.tar.xz | |
Turnaround time must be included in dsp yielding to throttle against other threads. Do at least one per buffer full as well (or things can stick a bit on initial input triggers).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16721 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
| -rw-r--r-- | apps/dsp.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -1112,7 +1112,8 @@ int dsp_callback(int msg, intptr_t param) int dsp_process(struct dsp_config *dsp, char *dst, const char *src[], int count) { int32_t *tmp[2]; - long last_yield = current_tick; + static long last_yield; + long tick; int written = 0; int samples; @@ -1126,6 +1127,10 @@ int dsp_process(struct dsp_config *dsp, char *dst, const char *src[], int count) if (new_gain) dsp_set_replaygain(); /* Gain has changed */ + /* Perform at least one yield before starting */ + last_yield = current_tick; + yield(); + /* Testing function pointers for NULL is preferred since the pointer will be preloaded to be used for the call if not. */ while (count > 0) @@ -1162,10 +1167,11 @@ int dsp_process(struct dsp_config *dsp, char *dst, const char *src[], int count) dst += samples * sizeof (int16_t) * 2; /* yield at least once each tick */ - if (current_tick > last_yield) + tick = current_tick; + if (TIME_AFTER(tick, last_yield)) { + last_yield = tick; yield(); - last_yield = current_tick; } } |