Add more field mappings
This commit is contained in:
parent
bf1eee45ba
commit
4da00f8b75
|
@ -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)
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
}
|
}
|
||||||
|
|
13
mp4/mp4ids.h
13
mp4/mp4ids.h
|
@ -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) */
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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";
|
||||||
|
|
Loading…
Reference in New Issue