From 7ec1127f3e6727eeb631d9480bc4e2fd927f9ee7 Mon Sep 17 00:00:00 2001 From: Urs Fleisch Date: Sat, 12 Dec 2020 10:47:57 +0100 Subject: [PATCH] FLAC: Store comment block before picture block (#954) When the picture block is large and comes before the comment block, Windows will no longer display the tags. This can be fixed by storing the comment block before the picture block instead of appending it at the end. --- taglib/flac/flacfile.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/taglib/flac/flacfile.cpp b/taglib/flac/flacfile.cpp index 7f437194..ada215db 100644 --- a/taglib/flac/flacfile.cpp +++ b/taglib/flac/flacfile.cpp @@ -187,16 +187,24 @@ bool FLAC::File::save() // Replace metadata blocks - for(BlockIterator it = d->blocks.begin(); it != d->blocks.end(); ++it) { + MetadataBlock *commentBlock = + new UnknownMetadataBlock(MetadataBlock::VorbisComment, d->xiphCommentData); + for(BlockIterator it = d->blocks.begin(); it != d->blocks.end();) { if((*it)->code() == MetadataBlock::VorbisComment) { - // Set the new Vorbis Comment block + // Remove the old Vorbis Comment block delete *it; - d->blocks.erase(it); - break; + it = d->blocks.erase(it); + continue; } + if(commentBlock && (*it)->code() == MetadataBlock::Picture) { + // Set the new Vorbis Comment block before the first picture block + d->blocks.insert(it, commentBlock); + commentBlock = 0; + } + ++it; } - - d->blocks.append(new UnknownMetadataBlock(MetadataBlock::VorbisComment, d->xiphCommentData)); + if(commentBlock) + d->blocks.append(commentBlock); // Render data for the metadata blocks