summaryrefslogtreecommitdiff
path: root/firmware/id3.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/id3.c')
-rw-r--r--firmware/id3.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/firmware/id3.c b/firmware/id3.c
index 0e7a5f227b..4da0224641 100644
--- a/firmware/id3.c
+++ b/firmware/id3.c
@@ -49,6 +49,11 @@
49 ((b3 & 0x7F) << (1*7)) | \ 49 ((b3 & 0x7F) << (1*7)) | \
50 ((b4 & 0x7F) << (0*7))) 50 ((b4 & 0x7F) << (0*7)))
51 51
52#define BYTES_TO_INT(b1,b2,b3,b4) (((b1 & 0xFF) << (3*8)) | \
53 ((b2 & 0xFF) << (2*8)) | \
54 ((b3 & 0xFF) << (1*8)) | \
55 ((b4 & 0xFF) << (0*8)))
56
52/* Table of bitrates for MP3 files, all values in kilo. 57/* Table of bitrates for MP3 files, all values in kilo.
53 * Indexed by version, layer and value of bit 15-12 in header. 58 * Indexed by version, layer and value of bit 15-12 in header.
54 */ 59 */
@@ -215,8 +220,15 @@ static void setid3v2title(int fd, struct mp3entry *entry)
215 if(version > 2) { 220 if(version > 2) {
216 memcpy(header, (buffer + readsize), 10); 221 memcpy(header, (buffer + readsize), 10);
217 readsize += 10; 222 readsize += 10;
218 headerlen = UNSYNC(header[4], header[5], 223 if (version > 3) {
219 header[6], header[7]); 224 headerlen = UNSYNC(header[4], header[5],
225 header[6], header[7]);
226 } else {
227 /* version .3 files don't use synchsafe ints for
228 * size */
229 headerlen = BYTES_TO_INT(header[4], header[5],
230 header[6], header[7]);
231 }
220 } else { 232 } else {
221 memcpy(header, (buffer + readsize), 6); 233 memcpy(header, (buffer + readsize), 6);
222 readsize += 6; 234 readsize += 6;