From 8a3b6dad94a471f82ae39ed6507074f3c83caf7c Mon Sep 17 00:00:00 2001 From: Magnus Holmgren Date: Wed, 23 Aug 2006 08:19:29 +0000 Subject: Fix broken resume for wav files. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10710 a1c6a512-1295-4272-9138-f99709370657 --- apps/codecs/wav.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'apps/codecs/wav.c') diff --git a/apps/codecs/wav.c b/apps/codecs/wav.c index 6bf2cb5864..3c86e3f0c5 100644 --- a/apps/codecs/wav.c +++ b/apps/codecs/wav.c @@ -232,6 +232,7 @@ enum codec_status codec_start(struct codec_api *api) uint16_t blockalign = 0; uint32_t avgbytespersec = 0; off_t firstblockposn; /* position of the first block in file */ + /* Generic codec initialisation */ rb = api; @@ -253,9 +254,12 @@ next_track: goto exit; } - while (!*ci->taginfo_ready) - ci->yield(); + while (!*ci->taginfo_ready && !ci->stop_codec) + ci->sleep(1); + /* Need to save offset for later use (cleared indirectly by advance_buffer) */ + bytesdone = ci->id3->offset; + /* get RIFF chunk header */ buf = ci->request_buffer(&n, 12); if (n < 12) { @@ -420,9 +424,9 @@ next_track: } /* make sure we're at the correct offset */ - if (ci->id3->offset > (uint32_t) firstblockposn) { + if (bytesdone > (uint32_t) firstblockposn) { /* Round down to previous block */ - uint32_t offset = ci->id3->offset - ci->id3->offset % blockalign; + uint32_t offset = bytesdone - bytesdone % blockalign; ci->advance_buffer(offset-firstblockposn); bytesdone = offset - firstblockposn; -- cgit v1.2.3