diff options
author | Björn Stenberg <bjorn@haxx.se> | 2002-07-10 13:17:31 +0000 |
---|---|---|
committer | Björn Stenberg <bjorn@haxx.se> | 2002-07-10 13:17:31 +0000 |
commit | 5e2898f3d4d1bdd832334225a2ffbd9f121dabca (patch) | |
tree | cb732013f1fc89aec407602c884b46c53d6e8795 /firmware | |
parent | 7c342b8d332c69f377a2af3081e03c2418ea8532 (diff) | |
download | rockbox-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')
-rw-r--r-- | firmware/id3.c | 20 |
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) |