From 6271b2b9104e060f8e25c780f3cbb010cbcba827 Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Thu, 9 Jun 2005 09:47:00 +0000 Subject: Added Crossfade setting for iRiver git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6636 a1c6a512-1295-4272-9138-f99709370657 --- firmware/pcm_playback.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'firmware/pcm_playback.c') diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c index ab4f0c0375..e5d6f4218b 100644 --- a/firmware/pcm_playback.c +++ b/firmware/pcm_playback.c @@ -56,6 +56,7 @@ static volatile size_t audiobuffer_free; static size_t audiobuffer_fillpos; static bool boost_mode; +static bool crossfade_enabled; static bool crossfade_active; static int crossfade_pos; static int crossfade_amount; @@ -432,18 +433,7 @@ bool audiobuffer_insert(char *buf, size_t length) } while (length > 0) { - if (!crossfade_active) { - copy_n = MIN(length, PCMBUF_SIZE - audiobuffer_pos - - audiobuffer_fillpos); - copy_n = MIN(CHUNK_SIZE, copy_n); - - memcpy(&audiobuffer[audiobuffer_pos+audiobuffer_fillpos], - buf, copy_n); - buf += copy_n; - audiobuffer_free -= copy_n; - length -= copy_n; - - } else { + if (crossfade_enabled && crossfade_active) { copy_n = MIN(length, PCMBUF_SIZE - (unsigned int)crossfade_pos); crossfade((short *)&audiobuffer[crossfade_pos], @@ -453,7 +443,17 @@ bool audiobuffer_insert(char *buf, size_t length) crossfade_pos += copy_n; if (crossfade_pos >= PCMBUF_SIZE) crossfade_pos -= PCMBUF_SIZE; - continue ; + continue ; + } else { + copy_n = MIN(length, PCMBUF_SIZE - audiobuffer_pos - + audiobuffer_fillpos); + copy_n = MIN(CHUNK_SIZE, copy_n); + + memcpy(&audiobuffer[audiobuffer_pos+audiobuffer_fillpos], + buf, copy_n); + buf += copy_n; + audiobuffer_free -= copy_n; + length -= copy_n; } /* Pre-buffer to meet CHUNK_SIZE requirement */ @@ -501,6 +501,13 @@ void pcm_play_init(void) memset(&audiobuffer[0], 0, audiobuffer_pos); pcm_play_add_chunk(&audiobuffer[0], audiobuffer_pos, NULL); pcm_play_start(); + + crossfade_enabled = false; +} + +void pcm_crossfade_enable(bool on_off) +{ + crossfade_enabled = on_off; } void pcm_play_start(void) -- cgit v1.2.3