diff options
author | Miika Pekkarinen <miipekk@ihme.org> | 2005-07-07 07:15:05 +0000 |
---|---|---|
committer | Miika Pekkarinen <miipekk@ihme.org> | 2005-07-07 07:15:05 +0000 |
commit | 3eb962d13bd4ca8c29ab33c41428a44e644e59ec (patch) | |
tree | 6ad56c24745868d9c56a56dc1278cfde4f5573ff /apps/playback.c | |
parent | 8d3855eb536d4b8f1459c9b2da3beb5a0ac328b4 (diff) | |
download | rockbox-3eb962d13bd4ca8c29ab33c41428a44e644e59ec.tar.gz rockbox-3eb962d13bd4ca8c29ab33c41428a44e644e59ec.zip |
PCM buffering fixes. Made a temporary workaround for playback glitch
bug (see the patch).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7049 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/playback.c')
-rw-r--r-- | apps/playback.c | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/apps/playback.c b/apps/playback.c index 13c66a43b5..f9caff1c4f 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -659,12 +659,12 @@ void audio_fill_file_buffer(void) buf_widx -= codecbuflen; i += rc; tracks[track_widx].available += rc; + tracks[track_widx].filerem -= rc; + tracks[track_widx].filepos += rc; codecbufused += rc; fill_bytesleft -= rc; } - tracks[track_widx].filerem -= i; - tracks[track_widx].filepos += i; /*logf("Filled:%d/%d", tracks[track_widx].available, tracks[track_widx].filerem);*/ } @@ -890,26 +890,29 @@ bool audio_load_track(int offset, bool start_play, int peek_offset) /* Starting playback from an offset is only support in MPA at the moment */ if (offset > 0) { - if ((tracks[track_widx].id3.codectype==AFMT_MPA_L2) || - (tracks[track_widx].id3.codectype==AFMT_MPA_L3)) { - lseek(fd, offset, SEEK_SET); - tracks[track_widx].id3.offset = offset; - mp3_set_elapsed(&tracks[track_widx].id3); - tracks[track_widx].filepos = offset; - tracks[track_widx].filerem = tracks[track_widx].filesize - offset; - ci.curpos = offset; - tracks[track_widx].start_pos = offset; - } - else if (tracks[track_widx].id3.codectype==AFMT_WAVPACK) { - lseek(fd, offset, SEEK_SET); - tracks[track_widx].id3.offset = offset; - tracks[track_widx].id3.elapsed = tracks[track_widx].id3.length / 2; - tracks[track_widx].filepos = offset; - tracks[track_widx].filerem = tracks[track_widx].filesize - offset; - ci.curpos = offset; - tracks[track_widx].start_pos = offset; - } - } + switch (tracks[track_widx].id3.codectype) { + case AFMT_MPA_L2: + case AFMT_MPA_L3: + lseek(fd, offset, SEEK_SET); + tracks[track_widx].id3.offset = offset; + mp3_set_elapsed(&tracks[track_widx].id3); + tracks[track_widx].filepos = offset; + tracks[track_widx].filerem = tracks[track_widx].filesize - offset; + ci.curpos = offset; + tracks[track_widx].start_pos = offset; + break; + + case AFMT_WAVPACK: + lseek(fd, offset, SEEK_SET); + tracks[track_widx].id3.offset = offset; + tracks[track_widx].id3.elapsed = tracks[track_widx].id3.length / 2; + tracks[track_widx].filepos = offset; + tracks[track_widx].filerem = tracks[track_widx].filesize - offset; + ci.curpos = offset; + tracks[track_widx].start_pos = offset; + break; + } + } if (start_play) { track_count++; @@ -1795,6 +1798,8 @@ void audio_init(void) track_buffer_callback = NULL; track_unbuffer_callback = NULL; track_changed_callback = NULL; + /* Just to prevent cur_ti never be anything random. */ + cur_ti = &tracks[0]; logf("abuf:%0x", PCMBUF_SIZE); logf("fbuf:%0x", codecbuflen); |