From bfe6ce8c1e135d209a69185fa76b458f3b10badb Mon Sep 17 00:00:00 2001 From: Martchus Date: Wed, 17 Aug 2022 23:06:09 +0200 Subject: [PATCH] Support detecting AIFF format --- signature.cpp | 16 ++++++++++++++++ signature.h | 1 + 2 files changed, 17 insertions(+) diff --git a/signature.cpp b/signature.cpp index 557947b..43b6515 100644 --- a/signature.cpp +++ b/signature.cpp @@ -38,6 +38,13 @@ enum Sig48 : std::uint64_t { Xz = 0xFD377A585A00ul, }; +/*! + * \brief Holds 40-bit signatures. + */ +enum Sig40 : std::uint64_t { + Aiff = 0x464F524D00ul, +}; + /*! * \brief Holds 32-bit signatures. */ @@ -156,6 +163,11 @@ ContainerFormat parseSignature(std::string_view buffer) return ContainerFormat::Xz; default:; } + switch (sig >> 24) { // check 40-bit signatures + case Aiff: + return ContainerFormat::Aiff; + default:; + } switch (sig >> 32) { // check 32-bit signatures case Dirac: return ContainerFormat::Dirac; @@ -360,6 +372,8 @@ std::string_view containerFormatAbbreviation(ContainerFormat containerFormat, Me return "ape"; case ContainerFormat::Midi: return "mid"; + case ContainerFormat::Aiff: + return "aiff"; default: return ""; } @@ -465,6 +479,8 @@ std::string_view containerFormatName(ContainerFormat containerFormat) return "Monkey's Audio"; case ContainerFormat::Midi: return "MIDI"; + case ContainerFormat::Aiff: + return "Audio Interchange File Format"; default: return "unknown"; } diff --git a/signature.h b/signature.h index 846e247..f0f2d3c 100644 --- a/signature.h +++ b/signature.h @@ -65,6 +65,7 @@ enum class ContainerFormat : unsigned int { Xz, /**< xz compressed file */ YUV4Mpeg2, /**< YUV4MPEG2 */ Zip, /**< ZIP archive */ + Aiff, /**< Audio Interchange File Format */ }; TAG_PARSER_EXPORT ContainerFormat parseSignature(const char *buffer, std::size_t bufferSize);