Support detecting AIFF format

This commit is contained in:
Martchus 2022-08-17 23:06:09 +02:00
parent 49c6b61e0c
commit bfe6ce8c1e
2 changed files with 17 additions and 0 deletions

View File

@ -38,6 +38,13 @@ enum Sig48 : std::uint64_t {
Xz = 0xFD377A585A00ul, Xz = 0xFD377A585A00ul,
}; };
/*!
* \brief Holds 40-bit signatures.
*/
enum Sig40 : std::uint64_t {
Aiff = 0x464F524D00ul,
};
/*! /*!
* \brief Holds 32-bit signatures. * \brief Holds 32-bit signatures.
*/ */
@ -156,6 +163,11 @@ ContainerFormat parseSignature(std::string_view buffer)
return ContainerFormat::Xz; return ContainerFormat::Xz;
default:; default:;
} }
switch (sig >> 24) { // check 40-bit signatures
case Aiff:
return ContainerFormat::Aiff;
default:;
}
switch (sig >> 32) { // check 32-bit signatures switch (sig >> 32) { // check 32-bit signatures
case Dirac: case Dirac:
return ContainerFormat::Dirac; return ContainerFormat::Dirac;
@ -360,6 +372,8 @@ std::string_view containerFormatAbbreviation(ContainerFormat containerFormat, Me
return "ape"; return "ape";
case ContainerFormat::Midi: case ContainerFormat::Midi:
return "mid"; return "mid";
case ContainerFormat::Aiff:
return "aiff";
default: default:
return ""; return "";
} }
@ -465,6 +479,8 @@ std::string_view containerFormatName(ContainerFormat containerFormat)
return "Monkey's Audio"; return "Monkey's Audio";
case ContainerFormat::Midi: case ContainerFormat::Midi:
return "MIDI"; return "MIDI";
case ContainerFormat::Aiff:
return "Audio Interchange File Format";
default: default:
return "unknown"; return "unknown";
} }

View File

@ -65,6 +65,7 @@ enum class ContainerFormat : unsigned int {
Xz, /**< xz compressed file */ Xz, /**< xz compressed file */
YUV4Mpeg2, /**< YUV4MPEG2 */ YUV4Mpeg2, /**< YUV4MPEG2 */
Zip, /**< ZIP archive */ Zip, /**< ZIP archive */
Aiff, /**< Audio Interchange File Format */
}; };
TAG_PARSER_EXPORT ContainerFormat parseSignature(const char *buffer, std::size_t bufferSize); TAG_PARSER_EXPORT ContainerFormat parseSignature(const char *buffer, std::size_t bufferSize);