summaryrefslogtreecommitdiffstats
path: root/apps/playback.c
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2005-07-07 07:15:05 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2005-07-07 07:15:05 +0000
commit3eb962d13bd4ca8c29ab33c41428a44e644e59ec (patch)
tree6ad56c24745868d9c56a56dc1278cfde4f5573ff /apps/playback.c
parent8d3855eb536d4b8f1459c9b2da3beb5a0ac328b4 (diff)
downloadrockbox-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.c49
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);