summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/id3.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/firmware/id3.c b/firmware/id3.c
index 1d0172c..131eeda 100644
--- a/firmware/id3.c
+++ b/firmware/id3.c
@@ -16,7 +16,6 @@
* KIND, either express or implied.
*
****************************************************************************/
-
/*
* Parts of this code has been stolen from the Ample project and was written
* by David Härdeman. It has since been extended and enhanced pretty much by
@@ -552,9 +551,16 @@ static void setid3v2title(int fd, struct mp3entry *entry)
{
skip = 0;
- if(flags & 0x0040) { /* Grouping identity */
- lseek(fd, 1, SEEK_CUR); /* Skip 1 byte */
- framelen--;
+ if (version >= ID3_VER_2_4) {
+ if(flags & 0x0040) { /* Grouping identity */
+ lseek(fd, 1, SEEK_CUR); /* Skip 1 byte */
+ framelen--;
+ }
+ } else {
+ if(flags & 0x0020) { /* Grouping identity */
+ lseek(fd, 1, SEEK_CUR); /* Skip 1 byte */
+ framelen--;
+ }
}
if(flags & 0x000c) /* Compression or encryption */
@@ -569,12 +575,14 @@ static void setid3v2title(int fd, struct mp3entry *entry)
if(flags & 0x0002) /* Unsynchronization */
unsynch = true;
- if(flags & 0x0001) { /* Data length indicator */
- if(4 != read(fd, tmp, 4))
- return;
+ if (version >= ID3_VER_2_4) {
+ if(flags & 0x0001) { /* Data length indicator */
+ if(4 != read(fd, tmp, 4))
+ return;
- data_length_ind = UNSYNC(tmp[0], tmp[1], tmp[2], tmp[3]);
- framelen -= 4;
+ data_length_ind = UNSYNC(tmp[0], tmp[1], tmp[2], tmp[3]);
+ framelen -= 4;
+ }
}
}