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 | |
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
-rw-r--r-- | apps/wps.c | 6 | ||||
-rw-r--r-- | firmware/id3.c | 20 |
2 files changed, 16 insertions, 10 deletions
diff --git a/apps/wps.c b/apps/wps.c index 6b76e751b6..3e72d4ba49 100644 --- a/apps/wps.c +++ b/apps/wps.c | |||
@@ -96,10 +96,10 @@ static void draw_screen(struct mp3entry* id3) | |||
96 | lcd_puts(0, l++, id3->artist?id3->artist:""); | 96 | lcd_puts(0, l++, id3->artist?id3->artist:""); |
97 | 97 | ||
98 | if(id3->vbr) | 98 | if(id3->vbr) |
99 | snprintf(buffer, sizeof(buffer), "Variable Bit Rate"); | 99 | snprintf(buffer, sizeof(buffer), "%d kbit (avg)", |
100 | id3->bitrate); | ||
100 | else | 101 | else |
101 | snprintf(buffer, sizeof(buffer), "%d kbits", id3->bitrate); | 102 | snprintf(buffer, sizeof(buffer), "%d kbit", id3->bitrate); |
102 | |||
103 | 103 | ||
104 | lcd_puts(0, l++, buffer); | 104 | lcd_puts(0, l++, buffer); |
105 | 105 | ||
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) |