From b6ddbc41a51ef066063378ca1101b7f105f7cc6f Mon Sep 17 00:00:00 2001 From: Dominik Riebeling Date: Sat, 15 Jun 2013 20:56:13 +0200 Subject: Fix id3v2 album art if more than one image is present. Rockbox only uses the first album art image (APIC / PIC frame) found in id3v2 tags. When a file contains more than one image the second one is ignored but the parsealbumart() callback overwrites the already set data. This causes the metadata structure to contain an invalid pointer to the image data, resulting in no image shown. Make parsealbumart() aware of this and skip parsing when an albumart image has already been found. Fixes FS#12870. Change-Id: Id8164f319cd5e1ee868b581f8f4ad3ea69c17f77 --- lib/rbcodec/metadata/id3tags.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/rbcodec/metadata/id3tags.c b/lib/rbcodec/metadata/id3tags.c index e7fed7c868..fed99d81a0 100644 --- a/lib/rbcodec/metadata/id3tags.c +++ b/lib/rbcodec/metadata/id3tags.c @@ -299,7 +299,10 @@ static int parsegenre( struct mp3entry* entry, char* tag, int bufferpos ) /* parse embed albumart */ static int parsealbumart( struct mp3entry* entry, char* tag, int bufferpos ) { - entry->has_embedded_albumart = false; + /* don't parse albumart if already one found. This callback function is + * called unconditionally. */ + if(entry->has_embedded_albumart) + return bufferpos; /* we currently don't support unsynchronizing albumart */ if (entry->albumart.type == AA_TYPE_UNSYNC) @@ -735,6 +738,10 @@ void setid3v2title(int fd, struct mp3entry *entry) bool itunes_gapless = false; #endif +#ifdef HAVE_ALBUMART + entry->has_embedded_albumart = false; +#endif + global_ff_found = false; /* Bail out if the tag is shorter than 10 bytes */ -- cgit v1.2.3