1
0
Fork 0
forked from len0rd/rockbox

Crossfade works better for high bitrate vorbis files.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6937 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Miika Pekkarinen 2005-06-29 21:44:23 +00:00
parent 7d6d122441
commit bc9a378c4f

View file

@ -606,31 +606,43 @@ bool pcm_insert_buffer(char *buf, long length)
if (!prepare_insert(length)) if (!prepare_insert(length))
return false; return false;
while (length > 0) {
if (crossfade_active) { if (crossfade_active) {
while (length > 0 && crossfade_active) {
copy_n = MIN(length, PCMBUF_SIZE - crossfade_pos); copy_n = MIN(length, PCMBUF_SIZE - crossfade_pos);
copy_n = 2 * crossfade((short *)&audiobuffer[crossfade_pos], copy_n = 2 * crossfade((short *)&audiobuffer[crossfade_pos],
(const short *)buf, copy_n/2); (const short *)buf, copy_n/2);
buf += copy_n; buf += copy_n;
length -= copy_n; length -= copy_n;
crossfade_pos += copy_n; crossfade_pos += copy_n;
if (crossfade_pos >= PCMBUF_SIZE) if (crossfade_pos >= PCMBUF_SIZE)
crossfade_pos -= PCMBUF_SIZE; crossfade_pos -= PCMBUF_SIZE;
continue ;
} else {
copy_n = MIN(length, PCMBUF_SIZE - audiobuffer_pos -
audiobuffer_fillpos);
copy_n = MIN(CHUNK_SIZE - audiobuffer_fillpos, copy_n);
memcpy(&audiobuffer[audiobuffer_pos+audiobuffer_fillpos],
buf, copy_n);
buf += copy_n;
audiobuffer_free -= copy_n;
length -= copy_n;
} }
while (length > 0) {
copy_n = MIN(length, PCMBUF_SIZE - audiobuffer_pos);
memcpy(&audiobuffer[audiobuffer_pos], buf, copy_n);
audiobuffer_fillpos = copy_n;
buf += copy_n;
length -= copy_n;
if (length > 0)
pcm_flush_fillpos();
}
}
while (length > 0) {
copy_n = MIN(length, PCMBUF_SIZE - audiobuffer_pos -
audiobuffer_fillpos);
copy_n = MIN(CHUNK_SIZE - audiobuffer_fillpos, 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 */ /* Pre-buffer to meet CHUNK_SIZE requirement */
if (copy_n + audiobuffer_fillpos < CHUNK_SIZE && length == 0) { if (copy_n + audiobuffer_fillpos < CHUNK_SIZE && length == 0) {
audiobuffer_fillpos += copy_n; audiobuffer_fillpos += copy_n;