diff options
author | Miika Pekkarinen <miipekk@ihme.org> | 2005-06-30 16:28:40 +0000 |
---|---|---|
committer | Miika Pekkarinen <miipekk@ihme.org> | 2005-06-30 16:28:40 +0000 |
commit | 3b90707fdd85a4b21258f6e11f10e15e0f668e3d (patch) | |
tree | 88a28be98ee3872e2a7ee473c11b1975394e5197 /firmware/pcm_playback.c | |
parent | 8764bbc275c4b299f22a706d67c1b20240af94fb (diff) | |
download | rockbox-3b90707fdd85a4b21258f6e11f10e15e0f668e3d.tar.gz rockbox-3b90707fdd85a4b21258f6e11f10e15e0f668e3d.zip |
Fixed a bug where a few seconds from end of a song was cut out.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6951 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/pcm_playback.c')
-rw-r--r-- | firmware/pcm_playback.c | 23 |
1 files changed, 4 insertions, 19 deletions
diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c index a7ee5cecde..04630f100f 100644 --- a/firmware/pcm_playback.c +++ b/firmware/pcm_playback.c | |||
@@ -415,7 +415,7 @@ bool pcm_crossfade_init(void) | |||
415 | */ | 415 | */ |
416 | void pcm_flush_audio(void) | 416 | void pcm_flush_audio(void) |
417 | { | 417 | { |
418 | if (crossfade_init || crossfade_active) | 418 | if (crossfade_init || crossfade_active || !pcm_playing) |
419 | return ; | 419 | return ; |
420 | 420 | ||
421 | crossfade_mode = CFM_FLUSH; | 421 | crossfade_mode = CFM_FLUSH; |
@@ -640,30 +640,15 @@ bool pcm_insert_buffer(char *buf, long length) | |||
640 | memcpy(&audiobuffer[audiobuffer_pos+audiobuffer_fillpos], | 640 | memcpy(&audiobuffer[audiobuffer_pos+audiobuffer_fillpos], |
641 | buf, copy_n); | 641 | buf, copy_n); |
642 | buf += copy_n; | 642 | buf += copy_n; |
643 | audiobuffer_free -= copy_n; | 643 | audiobuffer_fillpos += copy_n; |
644 | length -= copy_n; | 644 | length -= copy_n; |
645 | 645 | ||
646 | /* Pre-buffer to meet CHUNK_SIZE requirement */ | 646 | /* Pre-buffer to meet CHUNK_SIZE requirement */ |
647 | if (copy_n + audiobuffer_fillpos < CHUNK_SIZE && length == 0) { | 647 | if (copy_n + audiobuffer_fillpos < CHUNK_SIZE && length == 0) { |
648 | audiobuffer_fillpos += copy_n; | ||
649 | return true; | 648 | return true; |
650 | } | 649 | } |
651 | 650 | ||
652 | copy_n += audiobuffer_fillpos; | 651 | pcm_flush_fillpos(); |
653 | |||
654 | while (!pcm_play_add_chunk(&audiobuffer[audiobuffer_pos], | ||
655 | copy_n, pcm_event_handler)) { | ||
656 | pcm_boost(false); | ||
657 | yield(); | ||
658 | } | ||
659 | pcm_event_handler = NULL; | ||
660 | |||
661 | audiobuffer_pos += copy_n; | ||
662 | audiobuffer_fillpos = 0; | ||
663 | |||
664 | if (audiobuffer_pos >= PCMBUF_SIZE) { | ||
665 | audiobuffer_pos = 0; | ||
666 | } | ||
667 | } | 652 | } |
668 | 653 | ||
669 | return true; | 654 | return true; |