本文整理汇总了C++中taglib::flac::Picture::type方法的典型用法代码示例。如果您正苦于以下问题:C++ Picture::type方法的具体用法?C++ Picture::type怎么用?C++ Picture::type使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类taglib::flac::Picture
的用法示例。
在下文中一共展示了Picture::type方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: mediaFLAC
bool mediaFLAC(Artwork *art, const char *filePath)
{
TagLib::FLAC::File f(filePath);
if (!f.tag()) {
return false;
}
if (!mediaTag(art, &f)) {
return false;
}
art->filetype = FILETYPE_FLAC;
#if 0
const TagLib::List<TagLib::FLAC::Picture*> picturelist = f->pictureList();
for(TagLib::List<TagLib::FLAC::Picture*>::ConstIterator it = picturelist.begin();
it != picturelist.end();
it++) {
TagLib::FLAC::Picture *picture = (*it);
if (picture) {
if (picture->type() == TagLib::FLAC::Picture::FileIcon ||
picture->type() == TagLib::FLAC::Picture::OtherFileIcon ||
picture->type( )== TagLib::FLAC::Picture::ColouredFish) {
// skip!
}
else {
if (!art->hasCover()) {
saveImage(art, (const uchar *) picture->data().data(), picture->data().size());
}
break;
}
}
}
#endif
return art;
}
示例2: ParseTag
bool CTagLoaderTagLib::ParseTag(Ogg::XiphComment *xiph, EmbeddedArt *art, CMusicInfoTag& tag)
{
if (!xiph)
return false;
FLAC::Picture pictures[3];
ReplayGain replayGainInfo;
const Ogg::FieldListMap& fieldListMap = xiph->fieldListMap();
for (Ogg::FieldListMap::ConstIterator it = fieldListMap.begin(); it != fieldListMap.end(); ++it)
{
if (it->first == "ARTIST")
SetArtist(tag, StringListToVectorString(it->second));
else if (it->first == "ARTISTS")
tag.SetMusicBrainzArtistHints(StringListToVectorString(it->second));
else if (it->first == "ALBUMARTIST" || it->first == "ALBUM ARTIST")
SetAlbumArtist(tag, StringListToVectorString(it->second));
else if (it->first == "ALBUMARTISTS" || it->first == "ALBUM ARTISTS")
tag.SetMusicBrainzAlbumArtistHints(StringListToVectorString(it->second));
else if (it->first == "ALBUM")
tag.SetAlbum(it->second.front().to8Bit(true));
else if (it->first == "TITLE")
tag.SetTitle(it->second.front().to8Bit(true));
else if (it->first == "TRACKNUMBER")
tag.SetTrackNumber(it->second.front().toInt());
else if (it->first == "DISCNUMBER")
tag.SetDiscNumber(it->second.front().toInt());
else if (it->first == "YEAR")
tag.SetYear(it->second.front().toInt());
else if (it->first == "DATE")
tag.SetYear(it->second.front().toInt());
else if (it->first == "GENRE")
SetGenre(tag, StringListToVectorString(it->second));
else if (it->first == "COMMENT")
tag.SetComment(it->second.front().to8Bit(true));
else if (it->first == "CUESHEET")
tag.SetCueSheet(it->second.front().to8Bit(true));
else if (it->first == "ENCODEDBY")
{}
else if (it->first == "ENSEMBLE")
{}
else if (it->first == "COMPILATION")
tag.SetCompilation(it->second.front().toInt() == 1);
else if (it->first == "LYRICS")
tag.SetLyrics(it->second.front().to8Bit(true));
else if (it->first == "REPLAYGAIN_TRACK_GAIN")
replayGainInfo.ParseGain(ReplayGain::TRACK, it->second.front().toCString(true));
else if (it->first == "REPLAYGAIN_ALBUM_GAIN")
replayGainInfo.ParseGain(ReplayGain::ALBUM, it->second.front().toCString(true));
else if (it->first == "REPLAYGAIN_TRACK_PEAK")
replayGainInfo.ParsePeak(ReplayGain::TRACK, it->second.front().toCString(true));
else if (it->first == "REPLAYGAIN_ALBUM_PEAK")
replayGainInfo.ParsePeak(ReplayGain::ALBUM, it->second.front().toCString(true));
else if (it->first == "MUSICBRAINZ_ARTISTID")
tag.SetMusicBrainzArtistID(SplitMBID(StringListToVectorString(it->second)));
else if (it->first == "MUSICBRAINZ_ALBUMARTISTID")
tag.SetMusicBrainzAlbumArtistID(SplitMBID(StringListToVectorString(it->second)));
else if (it->first == "MUSICBRAINZ_ALBUMARTIST")
SetAlbumArtist(tag, StringListToVectorString(it->second));
else if (it->first == "MUSICBRAINZ_ALBUMID")
tag.SetMusicBrainzAlbumID(it->second.front().to8Bit(true));
else if (it->first == "MUSICBRAINZ_TRACKID")
tag.SetMusicBrainzTrackID(it->second.front().to8Bit(true));
else if (it->first == "RATING")
{
// Vorbis ratings are a mess because the standard forgot to mention anything about them.
// If you want to see how emotive the issue is and the varying standards, check here:
// http://forums.winamp.com/showthread.php?t=324512
// The most common standard in that thread seems to be a 0-100 scale for 1-5 stars.
// So, that's what we'll support for now.
int iRating = it->second.front().toInt();
if (iRating > 0 && iRating <= 100)
tag.SetUserrating((iRating / 20) + '0');
}
else if (it->first == "METADATA_BLOCK_PICTURE")
{
const char* b64 = it->second.front().toCString();
std::string decoded_block = Base64::Decode(b64, it->second.front().size());
ByteVector bv(decoded_block.data(), decoded_block.size());
TagLib::FLAC::Picture* pictureFrame = new TagLib::FLAC::Picture(bv);
if (pictureFrame->type() == FLAC::Picture::FrontCover) pictures[0].parse(bv);
else if (pictureFrame->type() == FLAC::Picture::Other) pictures[1].parse(bv);
delete pictureFrame;
}
else if (it->first == "COVERART")
{
const char* b64 = it->second.front().toCString();
std::string decoded_block = Base64::Decode(b64, it->second.front().size());
ByteVector bv(decoded_block.data(), decoded_block.size());
pictures[2].setData(bv);
// Assume jpeg
if (pictures[2].mimeType().isEmpty())
pictures[2].setMimeType("image/jpeg");
}
else if (it->first == "COVERARTMIME")
{
pictures[2].setMimeType(it->second.front());
}
//.........这里部分代码省略.........
示例3: additionalMetadata
bool SFB::Audio::AddAPETagToDictionary(CFMutableDictionaryRef dictionary, std::vector<std::shared_ptr<AttachedPicture>>& attachedPictures, const TagLib::APE::Tag *tag)
{
if(nullptr == dictionary || nullptr == tag)
return false;
if(tag->isEmpty())
return true;
SFB::CFMutableDictionary additionalMetadata(0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
for(auto iterator : tag->itemListMap()) {
auto item = iterator.second;
if(item.isEmpty())
continue;
if(TagLib::APE::Item::Text == item.type()) {
SFB::CFString key(item.key().toCString(true), kCFStringEncodingUTF8);
SFB::CFString value(item.toString().toCString(true), kCFStringEncodingUTF8);
if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("ALBUM"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kAlbumTitleKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("ARTIST"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kArtistKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("ALBUMARTIST"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kAlbumArtistKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("COMPOSER"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kComposerKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("GENRE"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kGenreKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("DATE"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kReleaseDateKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("DESCRIPTION"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kCommentKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("TITLE"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kTitleKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("TRACKNUMBER"), kCFCompareCaseInsensitive))
AddIntToDictionary(dictionary, Metadata::kTrackNumberKey, CFStringGetIntValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("TRACKTOTAL"), kCFCompareCaseInsensitive))
AddIntToDictionary(dictionary, Metadata::kTrackTotalKey, CFStringGetIntValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("COMPILATION"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kCompilationKey, CFStringGetIntValue(value) ? kCFBooleanTrue : kCFBooleanFalse);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("DISCNUMBER"), kCFCompareCaseInsensitive))
AddIntToDictionary(dictionary, Metadata::kDiscNumberKey, CFStringGetIntValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("DISCTOTAL"), kCFCompareCaseInsensitive))
AddIntToDictionary(dictionary, Metadata::kDiscTotalKey, CFStringGetIntValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("LYRICS"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kLyricsKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("BPM"), kCFCompareCaseInsensitive))
AddIntToDictionary(dictionary, Metadata::kBPMKey, CFStringGetIntValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("RATING"), kCFCompareCaseInsensitive))
AddIntToDictionary(dictionary, Metadata::kRatingKey, CFStringGetIntValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("ISRC"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kISRCKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("MCN"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kMCNKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("MUSICBRAINZ_ALBUMID"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kMusicBrainzReleaseIDKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("MUSICBRAINZ_TRACKID"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kMusicBrainzRecordingIDKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("TITLESORT"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kTitleSortOrderKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("ALBUMTITLESORT"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kAlbumTitleSortOrderKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("ARTISTSORT"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kArtistSortOrderKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("ALBUMARTISTSORT"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kAlbumArtistSortOrderKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("COMPOSERSORT"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kComposerSortOrderKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("GROUPING"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kGroupingKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("REPLAYGAIN_REFERENCE_LOUDNESS"), kCFCompareCaseInsensitive))
AddDoubleToDictionary(dictionary, Metadata::kReferenceLoudnessKey, CFStringGetDoubleValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("REPLAYGAIN_TRACK_GAIN"), kCFCompareCaseInsensitive))
AddDoubleToDictionary(dictionary, Metadata::kTrackGainKey, CFStringGetDoubleValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("REPLAYGAIN_TRACK_PEAK"), kCFCompareCaseInsensitive))
AddDoubleToDictionary(dictionary, Metadata::kTrackPeakKey, CFStringGetDoubleValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("REPLAYGAIN_ALBUM_GAIN"), kCFCompareCaseInsensitive))
AddDoubleToDictionary(dictionary, Metadata::kAlbumGainKey, CFStringGetDoubleValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("REPLAYGAIN_ALBUM_PEAK"), kCFCompareCaseInsensitive))
AddDoubleToDictionary(dictionary, Metadata::kAlbumPeakKey, CFStringGetDoubleValue(value));
#if 0
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("METADATA_BLOCK_PICTURE"), kCFCompareCaseInsensitive)) {
// Handle embedded pictures
for(auto blockIterator : item.values()) {
auto encodedBlock = blockIterator.data(TagLib::String::UTF8);
// Decode the Base-64 encoded data
auto decodedBlock = TagLib::DecodeBase64(encodedBlock);
// Create the picture
TagLib::FLAC::Picture picture;
picture.parse(decodedBlock);
SFB::CFData data((const UInt8 *)picture.data().data(), picture.data().size());
SFB::CFString description = nullptr;
if(!picture.description().isNull())
description(picture.description().toCString(true), kCFStringEncodingUTF8);
//.........这里部分代码省略.........
示例4: if
bool SFB::Audio::AddXiphCommentToDictionary(CFMutableDictionaryRef dictionary, std::vector<std::shared_ptr<AttachedPicture>>& attachedPictures, const TagLib::Ogg::XiphComment *tag)
{
if(nullptr == dictionary || nullptr == tag)
return false;
SFB::CFMutableDictionary additionalMetadata = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
for(auto it : tag->fieldListMap()) {
// According to the Xiph comment specification keys should only contain a limited subset of ASCII, but UTF-8 is a safer choice
SFB::CFString key = CFStringCreateWithCString(kCFAllocatorDefault, it.first.toCString(true), kCFStringEncodingUTF8);
// Vorbis allows multiple comments with the same key, but this isn't supported by AudioMetadata
SFB::CFString value = CFStringCreateWithCString(kCFAllocatorDefault, it.second.front().toCString(true), kCFStringEncodingUTF8);
if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("ALBUM"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kAlbumTitleKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("ARTIST"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kArtistKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("ALBUMARTIST"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kAlbumArtistKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("COMPOSER"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kComposerKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("GENRE"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kGenreKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("DATE"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kReleaseDateKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("DESCRIPTION"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kCommentKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("TITLE"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kTitleKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("TRACKNUMBER"), kCFCompareCaseInsensitive))
AddIntToDictionary(dictionary, Metadata::kTrackNumberKey, CFStringGetIntValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("TRACKTOTAL"), kCFCompareCaseInsensitive))
AddIntToDictionary(dictionary, Metadata::kTrackTotalKey, CFStringGetIntValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("COMPILATION"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kCompilationKey, CFStringGetIntValue(value) ? kCFBooleanTrue : kCFBooleanFalse);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("DISCNUMBER"), kCFCompareCaseInsensitive))
AddIntToDictionary(dictionary, Metadata::kDiscNumberKey, CFStringGetIntValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("DISCTOTAL"), kCFCompareCaseInsensitive))
AddIntToDictionary(dictionary, Metadata::kDiscTotalKey, CFStringGetIntValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("LYRICS"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kLyricsKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("BPM"), kCFCompareCaseInsensitive))
AddIntToDictionary(dictionary, Metadata::kBPMKey, CFStringGetIntValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("RATING"), kCFCompareCaseInsensitive))
AddIntToDictionary(dictionary, Metadata::kRatingKey, CFStringGetIntValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("ISRC"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kISRCKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("MCN"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kMCNKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("MUSICBRAINZ_ALBUMID"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kMusicBrainzReleaseIDKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("MUSICBRAINZ_TRACKID"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kMusicBrainzRecordingIDKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("TITLESORT"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kTitleSortOrderKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("ALBUMTITLESORT"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kAlbumTitleSortOrderKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("ARTISTSORT"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kArtistSortOrderKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("ALBUMARTISTSORT"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kAlbumArtistSortOrderKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("COMPOSERSORT"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kComposerSortOrderKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("GROUPING"), kCFCompareCaseInsensitive))
CFDictionarySetValue(dictionary, Metadata::kGroupingKey, value);
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("REPLAYGAIN_REFERENCE_LOUDNESS"), kCFCompareCaseInsensitive))
AddDoubleToDictionary(dictionary, Metadata::kReferenceLoudnessKey, CFStringGetDoubleValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("REPLAYGAIN_TRACK_GAIN"), kCFCompareCaseInsensitive))
AddDoubleToDictionary(dictionary, Metadata::kTrackGainKey, CFStringGetDoubleValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("REPLAYGAIN_TRACK_PEAK"), kCFCompareCaseInsensitive))
AddDoubleToDictionary(dictionary, Metadata::kTrackPeakKey, CFStringGetDoubleValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("REPLAYGAIN_ALBUM_GAIN"), kCFCompareCaseInsensitive))
AddDoubleToDictionary(dictionary, Metadata::kAlbumGainKey, CFStringGetDoubleValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("REPLAYGAIN_ALBUM_PEAK"), kCFCompareCaseInsensitive))
AddDoubleToDictionary(dictionary, Metadata::kAlbumPeakKey, CFStringGetDoubleValue(value));
else if(kCFCompareEqualTo == CFStringCompare(key, CFSTR("METADATA_BLOCK_PICTURE"), kCFCompareCaseInsensitive)) {
// Handle embedded pictures
for(auto blockIterator : it.second) {
auto encodedBlock = blockIterator.data(TagLib::String::UTF8);
// Decode the Base-64 encoded data
auto decodedBlock = TagLib::DecodeBase64(encodedBlock);
// Create the picture
TagLib::FLAC::Picture picture;
picture.parse(decodedBlock);
SFB::CFData data = CFDataCreate(kCFAllocatorDefault, (const UInt8 *)picture.data().data(), (CFIndex)picture.data().size());
SFB::CFString description;
if(!picture.description().isEmpty())
description = CFStringCreateWithCString(kCFAllocatorDefault, picture.description().toCString(true), kCFStringEncodingUTF8);
attachedPictures.push_back(std::make_shared<AttachedPicture>(data, (AttachedPicture::Type)picture.type(), description));
}
}
// Put all unknown tags into the additional metadata
else
CFDictionarySetValue(additionalMetadata, key, value);
//.........这里部分代码省略.........