diff options
author | Björn Stenberg <bjorn@haxx.se> | 2003-10-17 15:11:09 +0000 |
---|---|---|
committer | Björn Stenberg <bjorn@haxx.se> | 2003-10-17 15:11:09 +0000 |
commit | 972f431ef4efbd9860e86baef65196d499735488 (patch) | |
tree | 135767ea3e241295b41b9ab81ddf7aecff03faf9 /firmware | |
parent | 67a8bdce7c48f9cdda6f27b8dd39c29f6d113473 (diff) | |
download | rockbox-972f431ef4efbd9860e86baef65196d499735488.tar.gz rockbox-972f431ef4efbd9860e86baef65196d499735488.zip |
Resume rounding error fixes (patch #783078 by Harold Toler)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3978 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/mpeg.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c index cc514baf8c..9d6718dc42 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c | |||
@@ -337,17 +337,20 @@ static void set_elapsed(struct mp3entry* id3) | |||
337 | 337 | ||
338 | remainder = id3->offset - (relpos * (id3->filesize / 256)); | 338 | remainder = id3->offset - (relpos * (id3->filesize / 256)); |
339 | 339 | ||
340 | /* set time for this percent */ | 340 | /* set time for this percent (divide before multiply to prevent |
341 | id3->elapsed = i * id3->length / 100; | 341 | overflow on long files. loss of precision is negligible on |
342 | short files) */ | ||
343 | id3->elapsed = i * (id3->length / 100); | ||
342 | 344 | ||
343 | /* calculate remainder time */ | 345 | /* calculate remainder time */ |
344 | plen = (nextpos - relpos) * (id3->filesize / 256); | 346 | plen = (nextpos - relpos) * (id3->filesize / 256); |
345 | id3->elapsed += (((remainder * 100) / plen) * id3->length) / 10000; | 347 | id3->elapsed += (((remainder * 100) / plen) * |
348 | (id3->length / 10000)); | ||
346 | } | 349 | } |
347 | else { | 350 | else { |
348 | /* no TOC exists. set a rough estimate using average bitrate */ | 351 | /* no TOC exists. set a rough estimate using average bitrate */ |
349 | int tpk = id3->length / (id3->filesize / 1024); | 352 | int tpk = id3->length / (id3->filesize / 1024); |
350 | id3->elapsed = id3->offset * tpk / 1024; | 353 | id3->elapsed = id3->offset / 1024 * tpk; |
351 | } | 354 | } |
352 | } | 355 | } |
353 | else | 356 | else |