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:
parent
7d6d122441
commit
bc9a378c4f
1 changed files with 29 additions and 17 deletions
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue