summaryrefslogtreecommitdiff
path: root/firmware/mpeg.c
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2005-09-10 12:28:16 +0000
committerJens Arnold <amiconn@rockbox.org>2005-09-10 12:28:16 +0000
commitec9b202a921996945ebd42a7edba1326754d7737 (patch)
treef88c7d9ee1ff94c3a5cefdba0d30c78b84e72d62 /firmware/mpeg.c
parent1996dca15a495c09986cefc02086e03a53244f3a (diff)
downloadrockbox-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.c12
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
395int audio_get_file_pos(void) 395int 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;