diff options
-rw-r--r-- | firmware/id3.c | 16 |
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; |