diff options
author | Yoshihisa Uchida <uchida@rockbox.org> | 2010-03-22 10:02:05 +0000 |
---|---|---|
committer | Yoshihisa Uchida <uchida@rockbox.org> | 2010-03-22 10:02:05 +0000 |
commit | 7a3822c8b03a5438a1bcfd6e38c0e6860dda3348 (patch) | |
tree | e50740c7f0ccd6aff1aac0e292a000ac7ef6be14 /apps/codecs/smaf.c | |
parent | 20fccd84897352478c3306e41ca0fab0a5f4c65e (diff) | |
download | rockbox-7a3822c8b03a5438a1bcfd6e38c0e6860dda3348.tar.gz rockbox-7a3822c8b03a5438a1bcfd6e38c0e6860dda3348.zip |
fix bug: WAV file playback does not resume (FS#11077)
Not only WAV but also Sun audio, SMAF, vox and WAV64 can resume.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25289 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/smaf.c')
-rw-r--r-- | apps/codecs/smaf.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/apps/codecs/smaf.c b/apps/codecs/smaf.c index 33a2a4b403..6763e95001 100644 --- a/apps/codecs/smaf.c +++ b/apps/codecs/smaf.c | |||
@@ -409,6 +409,28 @@ next_track: | |||
409 | ci->seek_buffer(firstblockposn); | 409 | ci->seek_buffer(firstblockposn); |
410 | ci->seek_complete(); | 410 | ci->seek_complete(); |
411 | 411 | ||
412 | /* make sure we're at the correct offset */ | ||
413 | if (bytesdone > (uint32_t) firstblockposn) | ||
414 | { | ||
415 | /* Round down to previous block */ | ||
416 | struct pcm_pos *newpos = codec->get_seek_pos(bytesdone - firstblockposn, | ||
417 | PCM_SEEK_POS, &read_buffer); | ||
418 | |||
419 | if (newpos->pos > format.numbytes) | ||
420 | goto done; | ||
421 | if (ci->seek_buffer(firstblockposn + newpos->pos)) | ||
422 | { | ||
423 | bytesdone = newpos->pos; | ||
424 | decodedsamples = newpos->samples; | ||
425 | } | ||
426 | ci->seek_complete(); | ||
427 | } | ||
428 | else | ||
429 | { | ||
430 | /* already where we need to be */ | ||
431 | bytesdone = 0; | ||
432 | } | ||
433 | |||
412 | /* The main decoder loop */ | 434 | /* The main decoder loop */ |
413 | endofstream = 0; | 435 | endofstream = 0; |
414 | 436 | ||
@@ -418,7 +440,8 @@ next_track: | |||
418 | break; | 440 | break; |
419 | 441 | ||
420 | if (ci->seek_time) { | 442 | if (ci->seek_time) { |
421 | struct pcm_pos *newpos = codec->get_seek_pos(ci->seek_time, &read_buffer); | 443 | struct pcm_pos *newpos = codec->get_seek_pos(ci->seek_time, PCM_SEEK_TIME, |
444 | &read_buffer); | ||
422 | 445 | ||
423 | if (newpos->pos > format.numbytes) | 446 | if (newpos->pos > format.numbytes) |
424 | break; | 447 | break; |