Add more field mappings

This commit is contained in:
Martchus 2022-04-09 23:36:39 +02:00
parent bf1eee45ba
commit 4da00f8b75
9 changed files with 85 additions and 4 deletions

View File

@ -9,7 +9,7 @@ set(META_APP_AUTHOR "Martchus")
set(META_APP_URL "https://github.com/${META_APP_AUTHOR}/${META_PROJECT_NAME}") set(META_APP_URL "https://github.com/${META_APP_AUTHOR}/${META_PROJECT_NAME}")
set(META_APP_DESCRIPTION "C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags") set(META_APP_DESCRIPTION "C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags")
set(META_VERSION_MAJOR 11) set(META_VERSION_MAJOR 11)
set(META_VERSION_MINOR 1) set(META_VERSION_MINOR 2)
set(META_VERSION_PATCH 0) set(META_VERSION_PATCH 0)
set(META_REQUIRED_CPP_UNIT_VERSION 1.14.0) set(META_REQUIRED_CPP_UNIT_VERSION 1.14.0)
set(META_ADD_DEFAULT_CPP_UNIT_TEST_APPLICATION ON) set(META_ADD_DEFAULT_CPP_UNIT_TEST_APPLICATION ON)

View File

@ -79,6 +79,8 @@ std::uint32_t convertToShortId(std::uint32_t id)
return sRemixedBy; return sRemixedBy;
case lCopyright: case lCopyright:
return sCopyright; return sCopyright;
case lISRC:
return sISRC;
default: default:
return 0; return 0;
} }
@ -143,6 +145,8 @@ std::uint32_t convertToLongId(std::uint32_t id)
return lRemixedBy; return lRemixedBy;
case sCopyright: case sCopyright:
return lCopyright; return lCopyright;
case sISRC:
return lISRC;
default: default:
return 0; return 0;
} }

View File

@ -45,6 +45,8 @@ enum KnownValue : std::uint32_t {
lRemixedBy = 0x54504534, /**< TPE4 */ lRemixedBy = 0x54504534, /**< TPE4 */
lCopyright = 0x54434F50, /**< TCOP */ lCopyright = 0x54434F50, /**< TCOP */
lEncodingTime = 0x5444454E, /**< TDEN */ lEncodingTime = 0x5444454E, /**< TDEN */
lMood = 0x544D4F4F, /**< TMOO */
lISRC = 0x54535243, /**< TSRC */
lUserDefinedText = 0x54585858, /**< TXXX */ lUserDefinedText = 0x54585858, /**< TXXX */
sAlbum = 0x54414c, /**< ?TAL */ sAlbum = 0x54414c, /**< ?TAL */
@ -76,6 +78,7 @@ enum KnownValue : std::uint32_t {
sRating = 0x504f50, /**< ?POP */ sRating = 0x504f50, /**< ?POP */
sRemixedBy = 0x545034, /**< TP4 */ sRemixedBy = 0x545034, /**< TP4 */
sCopyright = 0x544352, /**< TCR */ sCopyright = 0x544352, /**< TCR */
sISRC = 0x545243, /**< TRC */
sUserDefinedText = 0x545858, /**< ?TXX */ sUserDefinedText = 0x545858, /**< ?TXX */
}; };

View File

@ -190,6 +190,8 @@ Id3v2Tag::IdentifierType Id3v2Tag::internallyGetFieldId(KnownField field) const
return lEncodingTime; return lEncodingTime;
case KnownField::OriginalReleaseDate: case KnownField::OriginalReleaseDate:
return lOriginalReleaseTime; return lOriginalReleaseTime;
case KnownField::Mood:
return lMood;
default:; default:;
} }
} else { } else {
@ -303,6 +305,10 @@ KnownField Id3v2Tag::internallyGetKnownField(const IdentifierType &id) const
return KnownField::EncodingDate; return KnownField::EncodingDate;
case lOriginalReleaseTime: case lOriginalReleaseTime:
return KnownField::OriginalReleaseDate; return KnownField::OriginalReleaseDate;
case lMood:
return KnownField::Mood;
case lISRC:
return KnownField::ISRC;
case sAlbum: case sAlbum:
return KnownField::Album; return KnownField::Album;
case sArtist: case sArtist:
@ -343,6 +349,8 @@ KnownField Id3v2Tag::internallyGetKnownField(const IdentifierType &id) const
return KnownField::RemixedBy; return KnownField::RemixedBy;
case sCopyright: case sCopyright:
return KnownField::Copyright; return KnownField::Copyright;
case sISRC:
return KnownField::ISRC;
default: default:
return KnownField::Invalid; return KnownField::Invalid;
} }

View File

@ -12,7 +12,8 @@ namespace Mp4AtomIds {
/*! /*!
* \brief Encapsulates IDs of MP4 atoms holding tag information. * \brief Encapsulates IDs of MP4 atoms holding tag information.
* \sa See http://atomicparsley.sourceforge.net/mpeg-4files.html for a table of known iTunes metadata atom IDs. * \sa See http://atomicparsley.sourceforge.net/mpeg-4files.html and
* https://exiftool.org/TagNames/QuickTime.html for a table of known iTunes metadata atom IDs.
*/ */
namespace Mp4TagAtomIds { namespace Mp4TagAtomIds {
} }

View File

@ -120,6 +120,19 @@ enum KnownValue : std::uint32_t {
TvSeason = 0x7476736e, /**< tvsn */ TvSeason = 0x7476736e, /**< tvsn */
TvShowName = 0x74767368, /**< tvsh */ TvShowName = 0x74767368, /**< tvsh */
Year = 0xA9646179, /**< ©day */ Year = 0xA9646179, /**< ©day */
Conductor = 0x40636F6E, /** ©con */
Director = 0x40646972, /**< @dir */
Narrator = 0xA96E7274, /** ©nrt */
Publisher = 0xA9707562, /** ©pub */
SortWith = 0x736F6E6D, /** sonm */
Compilation = 0x6370696C, /** cpil (flag, set to 1 if it is a compilation) */
SoundEngineer = 0xA9736E65, /** ©sne */
ExecutiveProducer = 0xA9787064, /** ©xpd */
ArtDirector = 0xA9617264, /** ©ard */
Arranger = 0xA9617267, /** ©arg */
Author = 0xA9617574, /** ©aut */
OriginalArtist = 0xA96F7065, /** ©ope */
Year2 = 0x79727263, /** yrrc (could be mapped to release date but likely not well supported elsewhere (e.g. Kodi uses ©day) */
}; };
} }

View File

@ -162,6 +162,22 @@ Mp4Tag::IdentifierType Mp4Tag::internallyGetFieldId(KnownField field) const
return AlbumArtist; return AlbumArtist;
case KnownField::Copyright: case KnownField::Copyright:
return Copyright; return Copyright;
case KnownField::Conductor:
return Conductor;
case KnownField::Director:
return Director;
case KnownField::Publisher:
return Publisher;
case KnownField::SoundEngineer:
return SoundEngineer;
case KnownField::Producer:
return Producer;
case KnownField::ExecutiveProducer:
return ExecutiveProducer;
case KnownField::ArtDirector:
return ArtDirector;
case KnownField::Arranger:
return Arranger;
default: default:
return 0; return 0;
} }
@ -215,6 +231,22 @@ KnownField Mp4Tag::internallyGetKnownField(const IdentifierType &id) const
return KnownField::AlbumArtist; return KnownField::AlbumArtist;
case Copyright: case Copyright:
return KnownField::Copyright; return KnownField::Copyright;
case Conductor:
return KnownField::Conductor;
case Director:
return KnownField::Director;
case Publisher:
return KnownField::Publisher;
case SoundEngineer:
return KnownField::SoundEngineer;
case Producer:
return KnownField::Producer;
case ExecutiveProducer:
return KnownField::ExecutiveProducer;
case ArtDirector:
return KnownField::ArtDirector;
case Arranger:
return KnownField::Arranger;
default: default:
return KnownField::Invalid; return KnownField::Invalid;
} }

View File

@ -73,6 +73,8 @@ VorbisComment::IdentifierType VorbisComment::internallyGetFieldId(KnownField fie
return std::string(composer()); return std::string(composer());
case KnownField::Encoder: case KnownField::Encoder:
return std::string(encoder()); return std::string(encoder());
case KnownField::EncodedBy:
return std::string(encodedBy());
case KnownField::EncoderSettings: case KnownField::EncoderSettings:
return std::string(encoderSettings()); return std::string(encoderSettings());
case KnownField::Description: case KnownField::Description:
@ -95,6 +97,12 @@ VorbisComment::IdentifierType VorbisComment::internallyGetFieldId(KnownField fie
return std::string(conductor()); return std::string(conductor());
case KnownField::Copyright: case KnownField::Copyright:
return std::string(copyright()); return std::string(copyright());
case KnownField::License:
return std::string(license());
case KnownField::Director:
return std::string(director());
case KnownField::ISRC:
return std::string(isrc());
default: default:
return std::string(); return std::string();
} }
@ -118,6 +126,7 @@ KnownField VorbisComment::internallyGetKnownField(const IdentifierType &id) cons
{ partNumber(), KnownField::PartNumber }, { partNumber(), KnownField::PartNumber },
{ composer(), KnownField::Composer }, { composer(), KnownField::Composer },
{ encoder(), KnownField::Encoder }, { encoder(), KnownField::Encoder },
{ encodedBy(), KnownField::EncodedBy },
{ encoderSettings(), KnownField::EncoderSettings }, { encoderSettings(), KnownField::EncoderSettings },
{ description(), KnownField::Description }, { description(), KnownField::Description },
{ grouping(), KnownField::Grouping }, { grouping(), KnownField::Grouping },
@ -126,8 +135,11 @@ KnownField VorbisComment::internallyGetKnownField(const IdentifierType &id) cons
{ lyricist(), KnownField::Lyricist }, { lyricist(), KnownField::Lyricist },
{ lyrics(), KnownField::Lyrics }, { lyrics(), KnownField::Lyrics },
{ albumArtist(), KnownField::AlbumArtist }, { albumArtist(), KnownField::AlbumArtist },
{ conductor(), KnownField::Conductor }, { conductor(), KnownField::Conductor },
{ copyright(), KnownField::Copyright }, { copyright(), KnownField::Copyright }, { copyright(), KnownField::Copyright },
{ license(), KnownField::License },
{ director(), KnownField::Director },
{ isrc(), KnownField::ISRC },
}); });
// clang-format on // clang-format on
const auto knownField(fieldMap.find(id)); const auto knownField(fieldMap.find(id));

View File

@ -101,6 +101,10 @@ constexpr TAG_PARSER_EXPORT std::string_view encoder()
{ {
return "ENCODER"; return "ENCODER";
} }
constexpr TAG_PARSER_EXPORT std::string_view encodedBy()
{
return "ENCODED_BY";
}
constexpr TAG_PARSER_EXPORT std::string_view encoderSettings() constexpr TAG_PARSER_EXPORT std::string_view encoderSettings()
{ {
return "ENCODER_OPTIONS"; return "ENCODER_OPTIONS";
@ -129,6 +133,10 @@ constexpr TAG_PARSER_EXPORT std::string_view description()
{ {
return "DESCRIPTION"; return "DESCRIPTION";
} }
constexpr TAG_PARSER_EXPORT std::string_view director()
{
return "DIRECTOR";
}
constexpr TAG_PARSER_EXPORT std::string_view isrc() constexpr TAG_PARSER_EXPORT std::string_view isrc()
{ {
return "ISRC"; return "ISRC";