diff options
author | Jens Arnold <amiconn@rockbox.org> | 2005-09-10 12:28:16 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2005-09-10 12:28:16 +0000 |
commit | ec9b202a921996945ebd42a7edba1326754d7737 (patch) | |
tree | f88c7d9ee1ff94c3a5cefdba0d30c78b84e72d62 /firmware/mpeg.c | |
parent | 1996dca15a495c09986cefc02086e03a53244f3a (diff) | |
download | rockbox-ec9b202a921996945ebd42a7edba1326754d7737.tar.gz rockbox-ec9b202a921996945ebd42a7edba1326754d7737.zip |
Reworked handling of MPEG audio frame & file info: * Fixed frame size calculation for layer 1 (all versions) and layer 2 (V2/V2.5). * Exact frame time (expressed as a fraction) for way more precise playtime calculation at 44100/22050/11025Hz sample frequency. * Exact playtime<->position conversion for CBR also used for resume position. * More compact code, long policy.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7505 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/mpeg.c')
-rw-r--r-- | firmware/mpeg.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c index ff74cf96a8..8d2d13b6ee 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c | |||
@@ -348,7 +348,7 @@ static void set_elapsed(struct mp3entry* id3) | |||
348 | /* find wich percent we're at */ | 348 | /* find wich percent we're at */ |
349 | for (i=0; i<100; i++ ) | 349 | for (i=0; i<100; i++ ) |
350 | { | 350 | { |
351 | if ( id3->offset < (int)(id3->toc[i] * (id3->filesize / 256)) ) | 351 | if ( id3->offset < id3->toc[i] * (id3->filesize / 256) ) |
352 | { | 352 | { |
353 | break; | 353 | break; |
354 | } | 354 | } |
@@ -388,8 +388,8 @@ static void set_elapsed(struct mp3entry* id3) | |||
388 | } | 388 | } |
389 | } | 389 | } |
390 | else | 390 | else |
391 | /* constant bitrate == simple frame calculation */ | 391 | /* constant bitrate, use exact calculation */ |
392 | id3->elapsed = id3->offset / id3->bpf * id3->tpf; | 392 | id3->elapsed = id3->offset / (id3->bitrate / 8); |
393 | } | 393 | } |
394 | 394 | ||
395 | int audio_get_file_pos(void) | 395 | int audio_get_file_pos(void) |
@@ -405,7 +405,7 @@ int audio_get_file_pos(void) | |||
405 | unsigned int percent, remainder; | 405 | unsigned int percent, remainder; |
406 | int curtoc, nexttoc, plen; | 406 | int curtoc, nexttoc, plen; |
407 | 407 | ||
408 | percent = (id3->elapsed*100)/id3->length; | 408 | percent = (id3->elapsed*100)/id3->length; |
409 | if (percent > 99) | 409 | if (percent > 99) |
410 | percent = 99; | 410 | percent = 99; |
411 | 411 | ||
@@ -431,8 +431,8 @@ int audio_get_file_pos(void) | |||
431 | (id3->elapsed / 1000); | 431 | (id3->elapsed / 1000); |
432 | } | 432 | } |
433 | } | 433 | } |
434 | else if (id3->bpf && id3->tpf) | 434 | else if (id3->bitrate) |
435 | pos = (id3->elapsed/id3->tpf)*id3->bpf; | 435 | pos = id3->elapsed * (id3->bitrate / 8); |
436 | else | 436 | else |
437 | { | 437 | { |
438 | return -1; | 438 | return -1; |