Fixed m4a covers not detected, consider the first embedded one is the front cover, fixes #718

This commit is contained in:
emeric
2025-07-22 13:48:40 +02:00
parent 345e8228ab
commit 7592f04972
@@ -46,7 +46,7 @@ namespace lms::metadata::taglib
{ {
namespace namespace
{ {
Image::Type imageTypeFromfromIDv2(TagLib::ID3v2::AttachedPictureFrame::Type type) Image::Type imageTypeFromfromID3v2(TagLib::ID3v2::AttachedPictureFrame::Type type)
{ {
switch (type) switch (type)
{ {
@@ -244,7 +244,7 @@ namespace lms::metadata::taglib
std::span<const std::byte> pictureData{ reinterpret_cast<const std::byte*>(picture.data()), picture.size() }; std::span<const std::byte> pictureData{ reinterpret_cast<const std::byte*>(picture.data()), picture.size() };
Image image; Image image;
image.type = imageTypeFromfromIDv2(attachedPictureFrame->type()); image.type = imageTypeFromfromID3v2(attachedPictureFrame->type());
image.description = attachedPictureFrame->description().to8Bit(true); image.description = attachedPictureFrame->description().to8Bit(true);
image.mimeType = attachedPictureFrame->mimeType().to8Bit(true); image.mimeType = attachedPictureFrame->mimeType().to8Bit(true);
image.data = pictureData; image.data = pictureData;
@@ -284,6 +284,8 @@ namespace lms::metadata::taglib
return; return;
#endif #endif
TagLib::MP4::CoverArtList coverArtList{ coverItem.toCoverArtList() }; TagLib::MP4::CoverArtList coverArtList{ coverItem.toCoverArtList() };
bool firstCover{ true };
for (TagLib::MP4::CoverArt& coverArt : coverArtList) for (TagLib::MP4::CoverArt& coverArt : coverArtList)
{ {
TagLib::ByteVector picture{ coverArt.data() }; TagLib::ByteVector picture{ coverArt.data() };
@@ -293,6 +295,10 @@ namespace lms::metadata::taglib
image.mimeType = mp4ImageFormatToMimeType(coverArt.format()); image.mimeType = mp4ImageFormatToMimeType(coverArt.format());
image.data = pictureData; image.data = pictureData;
// By convention, consider the first cover art as the front cover
image.type = firstCover ? Image::Type::FrontCover : Image::Type::Unknown;
firstCover = false;
visitor(image); visitor(image);
} }
} }