summaryrefslogtreecommitdiff
path: root/firmware/id3.c
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2002-07-10 13:17:31 +0000
committerBjörn Stenberg <bjorn@haxx.se>2002-07-10 13:17:31 +0000
commit5e2898f3d4d1bdd832334225a2ffbd9f121dabca (patch)
treecb732013f1fc89aec407602c884b46c53d6e8795 /firmware/id3.c
parent7c342b8d332c69f377a2af3081e03c2418ea8532 (diff)
downloadrockbox-5e2898f3d4d1bdd832334225a2ffbd9f121dabca.tar.gz
rockbox-5e2898f3d4d1bdd832334225a2ffbd9f121dabca.zip
Added average bitrate for VBR mp3
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1346 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/id3.c')
-rw-r--r--firmware/id3.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/firmware/id3.c b/firmware/id3.c
index b363adc0dd..ebfa1d368f 100644
--- a/firmware/id3.c
+++ b/firmware/id3.c
@@ -364,8 +364,7 @@ static int getsonglength(int fd, struct mp3entry *entry)
364 unsigned int filetime = 0; 364 unsigned int filetime = 0;
365 unsigned long header=0; 365 unsigned long header=0;
366 unsigned char tmp; 366 unsigned char tmp;
367 unsigned char frame[200]; 367 unsigned char frame[64];
368 unsigned int framecount;
369 368
370 int version; 369 int version;
371 int layer; 370 int layer;
@@ -458,7 +457,6 @@ static int getsonglength(int fd, struct mp3entry *entry)
458#endif 457#endif
459 entry->version = version; 458 entry->version = version;
460 entry->layer = layer; 459 entry->layer = layer;
461 entry->bitrate = bitrate;
462 entry->frequency = frequency; 460 entry->frequency = frequency;
463 461
464 /* Calculate bytes per frame, calculation depends on layer */ 462 /* Calculate bytes per frame, calculation depends on layer */
@@ -482,7 +480,7 @@ static int getsonglength(int fd, struct mp3entry *entry)
482 tpf = bs[layer] / freqtab[version-1][freqindex] << (version - 1); 480 tpf = bs[layer] / freqtab[version-1][freqindex] << (version - 1);
483 481
484 /* OK, we have found a frame. Let's see if it has a Xing header */ 482 /* OK, we have found a frame. Let's see if it has a Xing header */
485 if(read(fd, frame, 200) < 0) 483 if(read(fd, frame, sizeof frame) < 0)
486 return -1; 484 return -1;
487 485
488 if(frame[32] == 'X' && 486 if(frame[32] == 'X' &&
@@ -495,15 +493,23 @@ static int getsonglength(int fd, struct mp3entry *entry)
495 493
496 if(frame[39] & 0x01) /* Is the frame count there? */ 494 if(frame[39] & 0x01) /* Is the frame count there? */
497 { 495 {
498 framecount = (frame[40] << 24) | (frame[41] << 16) | 496 int framecount = (frame[40] << 24) | (frame[41] << 16) |
499 (frame[42] << 8) | frame[43]; 497 (frame[42] << 8) | frame[43];
500 498
501 filetime = framecount * tpf; 499 filetime = framecount * tpf;
502 } 500 }
503 /* We don't care about the file size and the TOC just yet. Maybe 501 if (frame[39] & 0x02) /* is byte count there? */
504 another time. */ 502 {
503 int bytecount = (frame[44] << 24) | (frame[45] << 16) |
504 (frame[46] << 8) | frame[47];
505
506 bitrate = bytecount * 8 / filetime;
507 }
508 /* We don't care about the TOC just yet. Maybe another time. */
505 } 509 }
506 510
511 entry->bitrate = bitrate;
512
507 /* If the file time hasn't been established, this may be a fixed 513 /* If the file time hasn't been established, this may be a fixed
508 rate MP3, so just use the default formula */ 514 rate MP3, so just use the default formula */
509 if(filetime == 0) 515 if(filetime == 0)