From 9361e0bc13f02f12e767a4e2a180561491127a59 Mon Sep 17 00:00:00 2001 From: Martchus Date: Tue, 10 Jul 2018 14:11:11 +0200 Subject: [PATCH] Use constexpr where possible --- adts/adtsframe.h | 53 +++---- avc/avcinfo.h | 36 ++--- diagnostics.h | 2 +- flac/flacmetadata.h | 56 +++---- flac/flactooggmappingheader.h | 20 +-- id3/id3genres.h | 2 +- id3/id3v2frameids.h | 6 +- matroska/matroskacues.h | 20 +-- matroska/matroskatagid.h | 228 ++++++++++++++-------------- mediaformat.h | 20 +-- mp4/mp4atom.h | 4 +- mp4/mp4track.cpp | 5 +- mpegaudio/mpegaudioframe.h | 69 ++++----- ogg/oggcontainer.h | 4 +- opus/opusidentificationheader.h | 29 ++-- vorbis/vorbiscommentids.h | 72 ++++----- vorbis/vorbisidentificationheader.h | 36 ++--- wav/waveaudiostream.cpp | 13 -- wav/waveaudiostream.h | 19 ++- 19 files changed, 349 insertions(+), 345 deletions(-) diff --git a/adts/adtsframe.h b/adts/adtsframe.h index ef83668..1b59f6c 100644 --- a/adts/adtsframe.h +++ b/adts/adtsframe.h @@ -13,22 +13,22 @@ namespace TagParser { class TAG_PARSER_EXPORT AdtsFrame { public: - AdtsFrame(); + constexpr AdtsFrame(); void parseHeader(IoUtilities::BinaryReader &reader); - bool isValid() const; - bool isMpeg4() const; - bool hasCrc() const; - byte mpeg4AudioObjectId() const; - byte mpeg4SamplingFrequencyIndex() const; - byte mpeg4ChannelConfig() const; - uint16 totalSize() const; - byte headerSize() const; - uint16 dataSize() const; - uint16 bufferFullness() const; - byte frameCount() const; - uint16 crc() const; + constexpr bool isValid() const; + constexpr bool isMpeg4() const; + constexpr bool hasCrc() const; + constexpr byte mpeg4AudioObjectId() const; + constexpr byte mpeg4SamplingFrequencyIndex() const; + constexpr byte mpeg4ChannelConfig() const; + constexpr uint16 totalSize() const; + constexpr byte headerSize() const; + constexpr uint16 dataSize() const; + constexpr uint16 bufferFullness() const; + constexpr byte frameCount() const; + constexpr uint16 crc() const; private: uint16 m_header1; @@ -38,15 +38,16 @@ private: /*! * \brief Constructs a new frame. */ -inline AdtsFrame::AdtsFrame() +constexpr AdtsFrame::AdtsFrame() : m_header1(0) + , m_header2(0) { } /*! * \brief Returns an indication whether the frame is valid. */ -inline bool AdtsFrame::isValid() const +constexpr bool AdtsFrame::isValid() const { return ((m_header1 & 0xFFF6u) == 0xFFF0u) && (totalSize() >= headerSize()); } @@ -54,7 +55,7 @@ inline bool AdtsFrame::isValid() const /*! * \brief Returns whether the MPEG version is MPEG-4; otherwise the MPEG version is MPEG-2. */ -inline bool AdtsFrame::isMpeg4() const +constexpr bool AdtsFrame::isMpeg4() const { return m_header1 & 0x8u; } @@ -62,7 +63,7 @@ inline bool AdtsFrame::isMpeg4() const /*! * \brief Returns whether a CRC-16 checksum is present ("protection absent" bit is NOT set). */ -inline bool AdtsFrame::hasCrc() const +constexpr bool AdtsFrame::hasCrc() const { return (m_header1 & 0x1u) == 0; } @@ -72,7 +73,7 @@ inline bool AdtsFrame::hasCrc() const * \sa TagParser::Mpeg4AudioObjectIds * \sa Mpeg4AudioObjectIds::idToMediaFormat() */ -inline byte AdtsFrame::mpeg4AudioObjectId() const +constexpr byte AdtsFrame::mpeg4AudioObjectId() const { return (m_header2 >> 0x36) + 0x1u; } @@ -81,7 +82,7 @@ inline byte AdtsFrame::mpeg4AudioObjectId() const * \brief Returns the MPEG-4 sample rate index. * \sa TagParser::mpeg4SampleRateTable */ -inline byte AdtsFrame::mpeg4SamplingFrequencyIndex() const +constexpr byte AdtsFrame::mpeg4SamplingFrequencyIndex() const { return (m_header2 >> 0x32) & 0xFu; } @@ -91,7 +92,7 @@ inline byte AdtsFrame::mpeg4SamplingFrequencyIndex() const * \sa TagParser::Mpeg4ChannelConfigs * \sa TagParser::mpeg4SampleRateTable::channelConfigString() */ -inline byte AdtsFrame::mpeg4ChannelConfig() const +constexpr byte AdtsFrame::mpeg4ChannelConfig() const { return (m_header2 >> 0x2E) & 0x7u; } @@ -99,7 +100,7 @@ inline byte AdtsFrame::mpeg4ChannelConfig() const /*! * \brief Returns the size of the frame (including the header) in bytes. */ -inline uint16 AdtsFrame::totalSize() const +constexpr uint16 AdtsFrame::totalSize() const { return (m_header2 >> 0x1D) & 0x1FFFu; } @@ -107,7 +108,7 @@ inline uint16 AdtsFrame::totalSize() const /*! * \brief Retruns the header size in bytes (9 if CRC is present; otherwise 7). */ -inline byte AdtsFrame::headerSize() const +constexpr byte AdtsFrame::headerSize() const { return hasCrc() ? 9 : 7; } @@ -115,7 +116,7 @@ inline byte AdtsFrame::headerSize() const /*! * \brief Returns the data size (total size minus header size) in bytes. */ -inline uint16 AdtsFrame::dataSize() const +constexpr uint16 AdtsFrame::dataSize() const { return totalSize() - headerSize(); } @@ -123,7 +124,7 @@ inline uint16 AdtsFrame::dataSize() const /*! * \brief Returns the buffer fullness. */ -inline uint16 AdtsFrame::bufferFullness() const +constexpr uint16 AdtsFrame::bufferFullness() const { return (m_header2 >> 0x12) & 0x7FFu; } @@ -131,7 +132,7 @@ inline uint16 AdtsFrame::bufferFullness() const /*! * \brief Returns the number of AAC frames (RDBs) in the ADTS frame. */ -inline byte AdtsFrame::frameCount() const +constexpr byte AdtsFrame::frameCount() const { return ((m_header2 >> 0x10) & 0x3u) + 0x1u; } @@ -140,7 +141,7 @@ inline byte AdtsFrame::frameCount() const * \brief Returns the CRC-16 checksum of the frame. * \sa hasCrc() */ -inline uint16 AdtsFrame::crc() const +constexpr uint16 AdtsFrame::crc() const { return m_header2 & 0xFFFFu; } diff --git a/avc/avcinfo.h b/avc/avcinfo.h index 9564560..f8543d6 100644 --- a/avc/avcinfo.h +++ b/avc/avcinfo.h @@ -23,15 +23,15 @@ typedef uint32 ugolomb; typedef int32 sgolomb; struct TAG_PARSER_EXPORT TimingInfo { - TimingInfo(); + constexpr TimingInfo(); uint32 unitsInTick; uint32 timeScale; byte isPresent; byte fixedFrameRate; - int64 defaultDuration() const; + constexpr int64 defaultDuration() const; }; -inline TimingInfo::TimingInfo() +constexpr TimingInfo::TimingInfo() : unitsInTick(0) , timeScale(0) , isPresent(0) @@ -39,13 +39,13 @@ inline TimingInfo::TimingInfo() { } -inline int64 TimingInfo::defaultDuration() const +constexpr int64 TimingInfo::defaultDuration() const { return 1000000000ll * unitsInTick / timeScale; } struct TAG_PARSER_EXPORT HrdParameters { - HrdParameters(); + constexpr HrdParameters(); ugolomb cpbCount; byte bitRateScale; byte cpbSizeScale; @@ -57,7 +57,7 @@ struct TAG_PARSER_EXPORT HrdParameters { void parse(IoUtilities::BitReader &reader); }; -inline HrdParameters::HrdParameters() +constexpr HrdParameters::HrdParameters() : cpbCount(0) , bitRateScale(0) , cpbSizeScale(0) @@ -69,7 +69,7 @@ inline HrdParameters::HrdParameters() } struct TAG_PARSER_EXPORT SpsInfo { - SpsInfo(); + constexpr SpsInfo(); ugolomb id; byte profileIndication; byte profileConstraints; @@ -97,7 +97,7 @@ struct TAG_PARSER_EXPORT SpsInfo { void parse(IoUtilities::BinaryReader &reader, uint32 maxSize); }; -inline SpsInfo::SpsInfo() +constexpr SpsInfo::SpsInfo() : id(0) , profileIndication(0) , profileConstraints(0) @@ -119,7 +119,7 @@ inline SpsInfo::SpsInfo() } struct TAG_PARSER_EXPORT PpsInfo { - PpsInfo(); + constexpr PpsInfo(); ugolomb id; ugolomb spsId; byte picOrderPresent; @@ -128,7 +128,7 @@ struct TAG_PARSER_EXPORT PpsInfo { void parse(IoUtilities::BinaryReader &reader, uint32 maxSize); }; -inline PpsInfo::PpsInfo() +constexpr PpsInfo::PpsInfo() : id(0) , spsId(0) , picOrderPresent(false) @@ -137,7 +137,7 @@ inline PpsInfo::PpsInfo() } struct TAG_PARSER_EXPORT SliceInfo { - SliceInfo(); + constexpr SliceInfo(); byte naluType; byte naluRefIdc; byte type; @@ -154,7 +154,7 @@ struct TAG_PARSER_EXPORT SliceInfo { uint32 pps; }; -inline SliceInfo::SliceInfo() +constexpr SliceInfo::SliceInfo() : naluType(0) , naluRefIdc(0) , type(0) @@ -173,27 +173,27 @@ inline SliceInfo::SliceInfo() } struct TAG_PARSER_EXPORT AvcFrame { - AvcFrame(); + constexpr AvcFrame(); uint64 start; uint64 end; uint64 ref1; uint64 ref2; - bool keyframe; - bool hasProvidedTimecode; SliceInfo sliceInfo; uint32 presentationOrder; uint32 decodeOrder; + bool keyframe; + bool hasProvidedTimecode; }; -inline AvcFrame::AvcFrame() +constexpr AvcFrame::AvcFrame() : start(0) , end(0) , ref1(0) , ref2(0) - , keyframe(false) - , hasProvidedTimecode(false) , presentationOrder(0) , decodeOrder(0) + , keyframe(false) + , hasProvidedTimecode(false) { } diff --git a/diagnostics.h b/diagnostics.h index b34f4a4..911d4fe 100644 --- a/diagnostics.h +++ b/diagnostics.h @@ -30,7 +30,7 @@ TAG_PARSER_EXPORT const char *diagLevelName(DiagLevel diagLevel); /*! * \brief Sets \a lhs to \a rhs if \a rhs is more critical than \a lhs and returns \a lhs. */ -inline DiagLevel &operator|=(DiagLevel &lhs, const DiagLevel &rhs) +constexpr DiagLevel &operator|=(DiagLevel &lhs, const DiagLevel &rhs) { if (lhs < rhs) { lhs = rhs; diff --git a/flac/flacmetadata.h b/flac/flacmetadata.h index 67f31ad..8276f16 100644 --- a/flac/flacmetadata.h +++ b/flac/flacmetadata.h @@ -28,16 +28,16 @@ constexpr bool operator!=(byte lhs, FlacMetaDataBlockType type) class TAG_PARSER_EXPORT FlacMetaDataBlockHeader { public: - FlacMetaDataBlockHeader(); + constexpr FlacMetaDataBlockHeader(); void parseHeader(const char *buffer); void makeHeader(std::ostream &outputStream); - byte isLast() const; + constexpr byte isLast() const; void setLast(byte last); - byte type() const; + constexpr byte type() const; void setType(FlacMetaDataBlockType type); - uint32 dataSize() const; + constexpr uint32 dataSize() const; void setDataSize(uint32 dataSize); private: @@ -49,7 +49,7 @@ private: /*! * \brief Constructs a new FLAC "METADATA_BLOCK_HEADER". */ -inline FlacMetaDataBlockHeader::FlacMetaDataBlockHeader() +constexpr FlacMetaDataBlockHeader::FlacMetaDataBlockHeader() : m_last(0) , m_type(0) , m_dataSize(0) @@ -60,7 +60,7 @@ inline FlacMetaDataBlockHeader::FlacMetaDataBlockHeader() * \brief Returns whether this is the last metadata block before the audio blocks. * \remarks The default value is 0/false. */ -inline byte FlacMetaDataBlockHeader::isLast() const +constexpr byte FlacMetaDataBlockHeader::isLast() const { return m_last; } @@ -77,7 +77,7 @@ inline void FlacMetaDataBlockHeader::setLast(byte last) * \brief Returns the block type. * \sa FlacMetaDataBlockType */ -inline byte FlacMetaDataBlockHeader::type() const +constexpr byte FlacMetaDataBlockHeader::type() const { return m_type; } @@ -93,7 +93,7 @@ inline void FlacMetaDataBlockHeader::setType(FlacMetaDataBlockType type) /*! * \brief Returns the length in bytes of the meta data (excluding the size of the header itself). */ -inline uint32 FlacMetaDataBlockHeader::dataSize() const +constexpr uint32 FlacMetaDataBlockHeader::dataSize() const { return m_dataSize; } @@ -109,19 +109,19 @@ inline void FlacMetaDataBlockHeader::setDataSize(uint32 dataSize) class TAG_PARSER_EXPORT FlacMetaDataBlockStreamInfo { public: - FlacMetaDataBlockStreamInfo(); + constexpr FlacMetaDataBlockStreamInfo(); void parse(const char *buffer); - uint16 minBlockSize() const; - uint16 maxBlockSize() const; - uint32 minFrameSize() const; - uint32 maxFrameSize() const; - uint32 samplingFrequency() const; - byte channelCount() const; - byte bitsPerSample() const; - uint64 totalSampleCount() const; - const char *md5Sum() const; + constexpr uint16 minBlockSize() const; + constexpr uint16 maxBlockSize() const; + constexpr uint32 minFrameSize() const; + constexpr uint32 maxFrameSize() const; + constexpr uint32 samplingFrequency() const; + constexpr byte channelCount() const; + constexpr byte bitsPerSample() const; + constexpr uint64 totalSampleCount() const; + constexpr const char *md5Sum() const; private: uint16 m_minBlockSize; @@ -138,7 +138,7 @@ private: /*! * \brief Constructs a new FLAC "METADATA_BLOCK_STREAMINFO". */ -inline FlacMetaDataBlockStreamInfo::FlacMetaDataBlockStreamInfo() +constexpr FlacMetaDataBlockStreamInfo::FlacMetaDataBlockStreamInfo() : m_minBlockSize(0) , m_maxBlockSize(0) , m_minFrameSize(0) @@ -154,7 +154,7 @@ inline FlacMetaDataBlockStreamInfo::FlacMetaDataBlockStreamInfo() /*! * \brief Returns the minimum block size (in samples) used in the stream. */ -inline uint16 FlacMetaDataBlockStreamInfo::minBlockSize() const +constexpr uint16 FlacMetaDataBlockStreamInfo::minBlockSize() const { return m_minBlockSize; } @@ -164,7 +164,7 @@ inline uint16 FlacMetaDataBlockStreamInfo::minBlockSize() const * * (Minimum blocksize == maximum blocksize) implies a fixed-blocksize stream. */ -inline uint16 FlacMetaDataBlockStreamInfo::maxBlockSize() const +constexpr uint16 FlacMetaDataBlockStreamInfo::maxBlockSize() const { return m_maxBlockSize; } @@ -174,7 +174,7 @@ inline uint16 FlacMetaDataBlockStreamInfo::maxBlockSize() const * * May be 0 to imply the value is not known. */ -inline uint32 FlacMetaDataBlockStreamInfo::minFrameSize() const +constexpr uint32 FlacMetaDataBlockStreamInfo::minFrameSize() const { return m_minFrameSize; } @@ -184,7 +184,7 @@ inline uint32 FlacMetaDataBlockStreamInfo::minFrameSize() const * * May be 0 to imply the value is not known. */ -inline uint32 FlacMetaDataBlockStreamInfo::maxFrameSize() const +constexpr uint32 FlacMetaDataBlockStreamInfo::maxFrameSize() const { return m_maxFrameSize; } @@ -195,7 +195,7 @@ inline uint32 FlacMetaDataBlockStreamInfo::maxFrameSize() const * Though 20 bits are available, the maximum sample rate is limited by the * structure of frame headers to 655350Hz. Also, a value of 0 is invalid. */ -inline uint32 FlacMetaDataBlockStreamInfo::samplingFrequency() const +constexpr uint32 FlacMetaDataBlockStreamInfo::samplingFrequency() const { return m_samplingFrequency; } @@ -205,7 +205,7 @@ inline uint32 FlacMetaDataBlockStreamInfo::samplingFrequency() const * * FLAC supports from 1 to 8 channels . */ -inline byte FlacMetaDataBlockStreamInfo::channelCount() const +constexpr byte FlacMetaDataBlockStreamInfo::channelCount() const { return m_channelCount; } @@ -217,7 +217,7 @@ inline byte FlacMetaDataBlockStreamInfo::channelCount() const * Currently the reference encoder and decoders only support up * to 24 bits per sample. */ -inline byte FlacMetaDataBlockStreamInfo::bitsPerSample() const +constexpr byte FlacMetaDataBlockStreamInfo::bitsPerSample() const { return m_bitsPerSample; } @@ -230,7 +230,7 @@ inline byte FlacMetaDataBlockStreamInfo::bitsPerSample() const * * A value of zero here means the number of total samples is unknown. */ -inline uint64 FlacMetaDataBlockStreamInfo::totalSampleCount() const +constexpr uint64 FlacMetaDataBlockStreamInfo::totalSampleCount() const { return m_totalSampleCount; } @@ -241,7 +241,7 @@ inline uint64 FlacMetaDataBlockStreamInfo::totalSampleCount() const * This allows the decoder to determine if an error exists in the * audio data even when the error does not result in an invalid bitstream. */ -inline const char *FlacMetaDataBlockStreamInfo::md5Sum() const +constexpr const char *FlacMetaDataBlockStreamInfo::md5Sum() const { return m_md5Sum; } diff --git a/flac/flactooggmappingheader.h b/flac/flactooggmappingheader.h index 8982939..671836d 100644 --- a/flac/flactooggmappingheader.h +++ b/flac/flactooggmappingheader.h @@ -9,14 +9,14 @@ class OggIterator; class TAG_PARSER_EXPORT FlacToOggMappingHeader { public: - FlacToOggMappingHeader(); + constexpr FlacToOggMappingHeader(); void parseHeader(OggIterator &iterator); - byte majorVersion() const; - byte minorVersion() const; - uint16 headerCount() const; - const FlacMetaDataBlockStreamInfo &streamInfo() const; + constexpr byte majorVersion() const; + constexpr byte minorVersion() const; + constexpr uint16 headerCount() const; + constexpr const FlacMetaDataBlockStreamInfo &streamInfo() const; private: byte m_majorVersion; @@ -28,7 +28,7 @@ private: /*! * \brief Constructs a new FLAC identification header. */ -inline FlacToOggMappingHeader::FlacToOggMappingHeader() +constexpr FlacToOggMappingHeader::FlacToOggMappingHeader() : m_majorVersion(0) , m_minorVersion(0) , m_headerCount(0) @@ -38,7 +38,7 @@ inline FlacToOggMappingHeader::FlacToOggMappingHeader() /*! * \brief Returns the major version for the mapping (which should be 1 currently). */ -inline byte FlacToOggMappingHeader::majorVersion() const +constexpr byte FlacToOggMappingHeader::majorVersion() const { return m_majorVersion; } @@ -46,7 +46,7 @@ inline byte FlacToOggMappingHeader::majorVersion() const /*! * \brief Returns the version for the mapping (which should be 0 currently). */ -inline byte FlacToOggMappingHeader::minorVersion() const +constexpr byte FlacToOggMappingHeader::minorVersion() const { return m_minorVersion; } @@ -54,7 +54,7 @@ inline byte FlacToOggMappingHeader::minorVersion() const /*! * \brief Returns the number of header (non-audio) packets, not including this one. */ -inline uint16 FlacToOggMappingHeader::headerCount() const +constexpr uint16 FlacToOggMappingHeader::headerCount() const { return m_headerCount; } @@ -62,7 +62,7 @@ inline uint16 FlacToOggMappingHeader::headerCount() const /*! * \brief Returns the stream info. */ -inline const FlacMetaDataBlockStreamInfo &FlacToOggMappingHeader::streamInfo() const +constexpr const FlacMetaDataBlockStreamInfo &FlacToOggMappingHeader::streamInfo() const { return m_streamInfo; } diff --git a/id3/id3genres.h b/id3/id3genres.h index d7698a3..22f1e95 100644 --- a/id3/id3genres.h +++ b/id3/id3genres.h @@ -11,7 +11,7 @@ namespace TagParser { class TAG_PARSER_EXPORT Id3Genres { public: - static const char *stringFromIndex(int index); + static inline const char *stringFromIndex(int index); static int indexFromString(const std::string &genre); static constexpr int genreCount(); static constexpr bool isIndexSupported(int index); diff --git a/id3/id3v2frameids.h b/id3/id3v2frameids.h index ab376b4..9c5dd50 100644 --- a/id3/id3v2frameids.h +++ b/id3/id3v2frameids.h @@ -66,7 +66,7 @@ uint32 convertToLongId(uint32 id); /*! * \brief Returns an indication whether the specified \a id is a long frame id. */ -inline bool isLongId(uint32 id) +constexpr bool isLongId(uint32 id) { return (id & 0x00ffffff) != id; } @@ -74,7 +74,7 @@ inline bool isLongId(uint32 id) /*! * \brief Returns an indication whether the specified \a id is a short frame id. */ -inline bool isShortId(uint32 id) +constexpr bool isShortId(uint32 id) { return (id & 0x00ffffff) == id; } @@ -82,7 +82,7 @@ inline bool isShortId(uint32 id) /*! * \brief Returns an indication whether the specified \a id is a text frame id. */ -inline bool isTextFrame(uint32 id) +constexpr bool isTextFrame(uint32 id) { if (isShortId(id)) { return ((id & 0x00FF0000u) == 0x00540000u) && (id != Id3v2FrameIds::sUserDefinedText); diff --git a/matroska/matroskacues.h b/matroska/matroskacues.h index a65b37a..e7e0cf5 100644 --- a/matroska/matroskacues.h +++ b/matroska/matroskacues.h @@ -10,23 +10,23 @@ namespace TagParser { class TAG_PARSER_EXPORT MatroskaOffsetStates { public: - MatroskaOffsetStates(uint64 initialValue); - uint64 currentValue() const; + constexpr MatroskaOffsetStates(uint64 initialValue); + constexpr uint64 currentValue() const; void update(uint64 newValue); - uint64 initialValue() const; + constexpr uint64 initialValue() const; private: uint64 m_initialValue; uint64 m_currentValue; }; -inline MatroskaOffsetStates::MatroskaOffsetStates(uint64 initialValue) +constexpr MatroskaOffsetStates::MatroskaOffsetStates(uint64 initialValue) : m_initialValue(initialValue) , m_currentValue(initialValue) { } -inline uint64 MatroskaOffsetStates::currentValue() const +constexpr uint64 MatroskaOffsetStates::currentValue() const { return m_currentValue; } @@ -36,27 +36,27 @@ inline void MatroskaOffsetStates::update(uint64 newValue) m_currentValue = newValue; } -inline uint64 MatroskaOffsetStates::initialValue() const +constexpr uint64 MatroskaOffsetStates::initialValue() const { return m_initialValue; } class TAG_PARSER_EXPORT MatroskaReferenceOffsetPair : public MatroskaOffsetStates { public: - MatroskaReferenceOffsetPair(uint64 referenceOffset, uint64 initialValue); - uint64 referenceOffset() const; + constexpr MatroskaReferenceOffsetPair(uint64 referenceOffset, uint64 initialValue); + constexpr uint64 referenceOffset() const; private: uint64 m_referenceOffset; }; -inline MatroskaReferenceOffsetPair::MatroskaReferenceOffsetPair(uint64 referenceOffset, uint64 initialValue) +constexpr MatroskaReferenceOffsetPair::MatroskaReferenceOffsetPair(uint64 referenceOffset, uint64 initialValue) : MatroskaOffsetStates(initialValue) , m_referenceOffset(referenceOffset) { } -inline uint64 MatroskaReferenceOffsetPair::referenceOffset() const +constexpr uint64 MatroskaReferenceOffsetPair::referenceOffset() const { return m_referenceOffset; } diff --git a/matroska/matroskatagid.h b/matroska/matroskatagid.h index 98ef1ab..47718b0 100644 --- a/matroska/matroskatagid.h +++ b/matroska/matroskatagid.h @@ -10,434 +10,434 @@ namespace TagParser { */ namespace MatroskaTagIds { -inline TAG_PARSER_EXPORT const char *original() +constexpr TAG_PARSER_EXPORT const char *original() { return "ORIGINAL"; } -inline TAG_PARSER_EXPORT const char *sample() +constexpr TAG_PARSER_EXPORT const char *sample() { return "SAMPLE"; } -inline TAG_PARSER_EXPORT const char *country() +constexpr TAG_PARSER_EXPORT const char *country() { return "COUNTRY"; } -inline TAG_PARSER_EXPORT const char *totalParts() +constexpr TAG_PARSER_EXPORT const char *totalParts() { return "TOTAL_PARTS"; } -inline TAG_PARSER_EXPORT const char *partNumber() +constexpr TAG_PARSER_EXPORT const char *partNumber() { return "PART_NUMBER"; } -inline TAG_PARSER_EXPORT const char *partOffset() +constexpr TAG_PARSER_EXPORT const char *partOffset() { return "PART_OFFSET"; } -inline TAG_PARSER_EXPORT const char *title() +constexpr TAG_PARSER_EXPORT const char *title() { return "TITLE"; } -inline TAG_PARSER_EXPORT const char *subtitle() +constexpr TAG_PARSER_EXPORT const char *subtitle() { return "SUBTITLE"; } -inline TAG_PARSER_EXPORT const char *url() +constexpr TAG_PARSER_EXPORT const char *url() { return "URL"; } -inline TAG_PARSER_EXPORT const char *sortWith() +constexpr TAG_PARSER_EXPORT const char *sortWith() { return "SORT_WITH"; } -inline TAG_PARSER_EXPORT const char *instruments() +constexpr TAG_PARSER_EXPORT const char *instruments() { return "INSTRUMENTS"; } -inline TAG_PARSER_EXPORT const char *email() +constexpr TAG_PARSER_EXPORT const char *email() { return "EMAIL"; } -inline TAG_PARSER_EXPORT const char *address() +constexpr TAG_PARSER_EXPORT const char *address() { return "ADDRESS"; } -inline TAG_PARSER_EXPORT const char *fax() +constexpr TAG_PARSER_EXPORT const char *fax() { return "FAX"; } -inline TAG_PARSER_EXPORT const char *phone() +constexpr TAG_PARSER_EXPORT const char *phone() { return "PHONE"; } -inline TAG_PARSER_EXPORT const char *artist() +constexpr TAG_PARSER_EXPORT const char *artist() { return "ARTIST"; } -inline TAG_PARSER_EXPORT const char *album() +constexpr TAG_PARSER_EXPORT const char *album() { return "ALBUM"; } -inline TAG_PARSER_EXPORT const char *leadPerformer() +constexpr TAG_PARSER_EXPORT const char *leadPerformer() { return "LEAD_PERFORMER"; } -inline TAG_PARSER_EXPORT const char *accompaniment() +constexpr TAG_PARSER_EXPORT const char *accompaniment() { return "ACCOMPANIMENT"; } -inline TAG_PARSER_EXPORT const char *composer() +constexpr TAG_PARSER_EXPORT const char *composer() { return "COMPOSER"; } -inline TAG_PARSER_EXPORT const char *arranger() +constexpr TAG_PARSER_EXPORT const char *arranger() { return "ARRANGER"; } -inline TAG_PARSER_EXPORT const char *lyrics() +constexpr TAG_PARSER_EXPORT const char *lyrics() { return "LYRICS"; } -inline TAG_PARSER_EXPORT const char *lyricist() +constexpr TAG_PARSER_EXPORT const char *lyricist() { return "LYRICIST"; } -inline TAG_PARSER_EXPORT const char *conductor() +constexpr TAG_PARSER_EXPORT const char *conductor() { return "CONDUCTOR"; } -inline TAG_PARSER_EXPORT const char *director() +constexpr TAG_PARSER_EXPORT const char *director() { return "DIRECTOR"; } -inline TAG_PARSER_EXPORT const char *assistantDirector() +constexpr TAG_PARSER_EXPORT const char *assistantDirector() { return "ASSISTANT_DIRECTOR"; } -inline TAG_PARSER_EXPORT const char *directorOfPhotography() +constexpr TAG_PARSER_EXPORT const char *directorOfPhotography() { return "DIRECTOR_OF_PHOTOGRAPHY"; } -inline TAG_PARSER_EXPORT const char *soundEngineer() +constexpr TAG_PARSER_EXPORT const char *soundEngineer() { return "SOUND_ENGINEER"; } -inline TAG_PARSER_EXPORT const char *artDirector() +constexpr TAG_PARSER_EXPORT const char *artDirector() { return "ART_DIRECTOR"; } -inline TAG_PARSER_EXPORT const char *productionDesigner() +constexpr TAG_PARSER_EXPORT const char *productionDesigner() { return "PRODUCTION_DESIGNER"; } -inline TAG_PARSER_EXPORT const char *choregrapher() +constexpr TAG_PARSER_EXPORT const char *choregrapher() { return "CHOREGRAPHER"; } -inline TAG_PARSER_EXPORT const char *costumeDesigner() +constexpr TAG_PARSER_EXPORT const char *costumeDesigner() { return "COSTUME_DESIGNER"; } -inline TAG_PARSER_EXPORT const char *actor() +constexpr TAG_PARSER_EXPORT const char *actor() { return "ACTOR"; } -inline TAG_PARSER_EXPORT const char *character() +constexpr TAG_PARSER_EXPORT const char *character() { return "CHARACTER"; } -inline TAG_PARSER_EXPORT const char *writtenBy() +constexpr TAG_PARSER_EXPORT const char *writtenBy() { return "WRITTEN_BY"; } -inline TAG_PARSER_EXPORT const char *screenplayBy() +constexpr TAG_PARSER_EXPORT const char *screenplayBy() { return "SCREENPLAY_BY"; } -inline TAG_PARSER_EXPORT const char *editedBy() +constexpr TAG_PARSER_EXPORT const char *editedBy() { return "EDITED_BY"; } -inline TAG_PARSER_EXPORT const char *producer() +constexpr TAG_PARSER_EXPORT const char *producer() { return "PRODUCER"; } -inline TAG_PARSER_EXPORT const char *coproducer() +constexpr TAG_PARSER_EXPORT const char *coproducer() { return "COPRODUCER"; } -inline TAG_PARSER_EXPORT const char *executiveProducer() +constexpr TAG_PARSER_EXPORT const char *executiveProducer() { return "EXECUTIVE_PRODUCER"; } -inline TAG_PARSER_EXPORT const char *distributedBy() +constexpr TAG_PARSER_EXPORT const char *distributedBy() { return "DISTRIBUTED_BY"; } -inline TAG_PARSER_EXPORT const char *masteredBy() +constexpr TAG_PARSER_EXPORT const char *masteredBy() { return "MASTERED_BY"; } -inline TAG_PARSER_EXPORT const char *encodedBy() +constexpr TAG_PARSER_EXPORT const char *encodedBy() { return "ENCODED_BY"; } -inline TAG_PARSER_EXPORT const char *mixedBy() +constexpr TAG_PARSER_EXPORT const char *mixedBy() { return "MIXED_BY"; } -inline TAG_PARSER_EXPORT const char *remixedBy() +constexpr TAG_PARSER_EXPORT const char *remixedBy() { return "REMIXED_BY"; } -inline TAG_PARSER_EXPORT const char *productionStudio() +constexpr TAG_PARSER_EXPORT const char *productionStudio() { return "PRODUCTION_STUDIO"; } -inline TAG_PARSER_EXPORT const char *thanksTo() +constexpr TAG_PARSER_EXPORT const char *thanksTo() { return "THANKS_TO"; } -inline TAG_PARSER_EXPORT const char *publisher() +constexpr TAG_PARSER_EXPORT const char *publisher() { return "PUBLISHER"; } -inline TAG_PARSER_EXPORT const char *label() +constexpr TAG_PARSER_EXPORT const char *label() { return "LABEL"; } -inline TAG_PARSER_EXPORT const char *genre() +constexpr TAG_PARSER_EXPORT const char *genre() { return "GENRE"; } -inline TAG_PARSER_EXPORT const char *mood() +constexpr TAG_PARSER_EXPORT const char *mood() { return "MOOD"; } -inline TAG_PARSER_EXPORT const char *originalMediaType() +constexpr TAG_PARSER_EXPORT const char *originalMediaType() { return "ORIGINAL_TAG_PARSER_TYPE"; } -inline TAG_PARSER_EXPORT const char *contentType() +constexpr TAG_PARSER_EXPORT const char *contentType() { return "CONTENT_TYPE"; } -inline TAG_PARSER_EXPORT const char *subject() +constexpr TAG_PARSER_EXPORT const char *subject() { return "SUBJECT"; } -inline TAG_PARSER_EXPORT const char *description() +constexpr TAG_PARSER_EXPORT const char *description() { return "DESCRIPTION"; } -inline TAG_PARSER_EXPORT const char *keywords() +constexpr TAG_PARSER_EXPORT const char *keywords() { return "KEYWORDS"; } -inline TAG_PARSER_EXPORT const char *summary() +constexpr TAG_PARSER_EXPORT const char *summary() { return "SUMMARY"; } -inline TAG_PARSER_EXPORT const char *synopsis() +constexpr TAG_PARSER_EXPORT const char *synopsis() { return "SYNOPSIS"; } -inline TAG_PARSER_EXPORT const char *initialKey() +constexpr TAG_PARSER_EXPORT const char *initialKey() { return "INITIAL_KEY"; } -inline TAG_PARSER_EXPORT const char *period() +constexpr TAG_PARSER_EXPORT const char *period() { return "PERIOD"; } -inline TAG_PARSER_EXPORT const char *lawRating() +constexpr TAG_PARSER_EXPORT const char *lawRating() { return "LAW_RATING"; } -inline TAG_PARSER_EXPORT const char *icra() +constexpr TAG_PARSER_EXPORT const char *icra() { return "ICRA"; } -inline TAG_PARSER_EXPORT const char *dateRelease() +constexpr TAG_PARSER_EXPORT const char *dateRelease() { return "DATE_RELEASED"; } -inline TAG_PARSER_EXPORT const char *dateRecorded() +constexpr TAG_PARSER_EXPORT const char *dateRecorded() { return "DATE_RECORDED"; } -inline TAG_PARSER_EXPORT const char *dateEncoded() +constexpr TAG_PARSER_EXPORT const char *dateEncoded() { return "DATE_ENCODED"; } -inline TAG_PARSER_EXPORT const char *dateTagged() +constexpr TAG_PARSER_EXPORT const char *dateTagged() { return "DATE_TAGGED"; } -inline TAG_PARSER_EXPORT const char *dateDigitized() +constexpr TAG_PARSER_EXPORT const char *dateDigitized() { return "DATE_DIGITIZED"; } -inline TAG_PARSER_EXPORT const char *dateWritten() +constexpr TAG_PARSER_EXPORT const char *dateWritten() { return "DATE_WRITTEN"; } -inline TAG_PARSER_EXPORT const char *datePurchased() +constexpr TAG_PARSER_EXPORT const char *datePurchased() { return "DATE_PURCHASED"; } -inline TAG_PARSER_EXPORT const char *recordingLocation() +constexpr TAG_PARSER_EXPORT const char *recordingLocation() { return "RECORDING_LOCATION"; } -inline TAG_PARSER_EXPORT const char *compositionLocation() +constexpr TAG_PARSER_EXPORT const char *compositionLocation() { return "COMPOSITION_LOCATION"; } -inline TAG_PARSER_EXPORT const char *composerNationality() +constexpr TAG_PARSER_EXPORT const char *composerNationality() { return "COMPOSER_NATIONALITY"; } -inline TAG_PARSER_EXPORT const char *comment() +constexpr TAG_PARSER_EXPORT const char *comment() { return "COMMENT"; } -inline TAG_PARSER_EXPORT const char *playCounter() +constexpr TAG_PARSER_EXPORT const char *playCounter() { return "PLAY_COUNTER"; } -inline TAG_PARSER_EXPORT const char *rating() +constexpr TAG_PARSER_EXPORT const char *rating() { return "RATING"; } -inline TAG_PARSER_EXPORT const char *encoder() +constexpr TAG_PARSER_EXPORT const char *encoder() { return "ENCODER"; } -inline TAG_PARSER_EXPORT const char *encoderSettings() +constexpr TAG_PARSER_EXPORT const char *encoderSettings() { return "ENCODER_SETTINGS"; } -inline TAG_PARSER_EXPORT const char *bps() +constexpr TAG_PARSER_EXPORT const char *bps() { return "BPS"; } -inline TAG_PARSER_EXPORT const char *fps() +constexpr TAG_PARSER_EXPORT const char *fps() { return "FPS"; } -inline TAG_PARSER_EXPORT const char *bpm() +constexpr TAG_PARSER_EXPORT const char *bpm() { return "BPM"; } -inline TAG_PARSER_EXPORT const char *duration() +constexpr TAG_PARSER_EXPORT const char *duration() { return "DURATION"; } -inline TAG_PARSER_EXPORT const char *language() +constexpr TAG_PARSER_EXPORT const char *language() { return "LANGUAGE"; } -inline TAG_PARSER_EXPORT const char *numberOfFrames() +constexpr TAG_PARSER_EXPORT const char *numberOfFrames() { return "NUMBER_OF_FRAMES"; } -inline TAG_PARSER_EXPORT const char *numberOfBytes() +constexpr TAG_PARSER_EXPORT const char *numberOfBytes() { return "NUMBER_OF_BYTES"; } -inline TAG_PARSER_EXPORT const char *measure() +constexpr TAG_PARSER_EXPORT const char *measure() { return "MEASURE"; } -inline TAG_PARSER_EXPORT const char *tuning() +constexpr TAG_PARSER_EXPORT const char *tuning() { return "TUNING"; } -inline TAG_PARSER_EXPORT const char *replaygainGain() +constexpr TAG_PARSER_EXPORT const char *replaygainGain() { return "REPLAYGAIN_GAIN"; } -inline TAG_PARSER_EXPORT const char *replaygainPeak() +constexpr TAG_PARSER_EXPORT const char *replaygainPeak() { return "REPLAYGAIN_PEAK"; } -inline TAG_PARSER_EXPORT const char *identifiers() +constexpr TAG_PARSER_EXPORT const char *identifiers() { return "Identifiers"; } -inline TAG_PARSER_EXPORT const char *isrc() +constexpr TAG_PARSER_EXPORT const char *isrc() { return "ISRC"; } -inline TAG_PARSER_EXPORT const char *mcdi() +constexpr TAG_PARSER_EXPORT const char *mcdi() { return "MCDI"; } -inline TAG_PARSER_EXPORT const char *isbn() +constexpr TAG_PARSER_EXPORT const char *isbn() { return "ISBN"; } -inline TAG_PARSER_EXPORT const char *barcode() +constexpr TAG_PARSER_EXPORT const char *barcode() { return "BARCODE"; } -inline TAG_PARSER_EXPORT const char *catalogNumber() +constexpr TAG_PARSER_EXPORT const char *catalogNumber() { return "CATALOG_NUMBER"; } -inline TAG_PARSER_EXPORT const char *labelCode() +constexpr TAG_PARSER_EXPORT const char *labelCode() { return "LABEL_CODE"; } -inline TAG_PARSER_EXPORT const char *lccn() +constexpr TAG_PARSER_EXPORT const char *lccn() { return "LCCN"; } -inline TAG_PARSER_EXPORT const char *purchaseItem() +constexpr TAG_PARSER_EXPORT const char *purchaseItem() { return "PURCHASE_ITEM"; } -inline TAG_PARSER_EXPORT const char *purchaseInfo() +constexpr TAG_PARSER_EXPORT const char *purchaseInfo() { return "PURCHASE_INFO"; } -inline TAG_PARSER_EXPORT const char *purchaseOwner() +constexpr TAG_PARSER_EXPORT const char *purchaseOwner() { return "PURCHASE_OWNER"; } -inline TAG_PARSER_EXPORT const char *purchasePrice() +constexpr TAG_PARSER_EXPORT const char *purchasePrice() { return "PURCHASE_PRICE"; } -inline TAG_PARSER_EXPORT const char *purchaseCurrency() +constexpr TAG_PARSER_EXPORT const char *purchaseCurrency() { return "PURCHASE_CURRENCY"; } -inline TAG_PARSER_EXPORT const char *copyright() +constexpr TAG_PARSER_EXPORT const char *copyright() { return "COPYRIGHT"; } -inline TAG_PARSER_EXPORT const char *productionCopyright() +constexpr TAG_PARSER_EXPORT const char *productionCopyright() { return "PRODUCTION_COPYRIGHT"; } -inline TAG_PARSER_EXPORT const char *license() +constexpr TAG_PARSER_EXPORT const char *license() { return "LICENSE"; } -inline TAG_PARSER_EXPORT const char *termsOfUse() +constexpr TAG_PARSER_EXPORT const char *termsOfUse() { return "TERMS_OF_USE"; } @@ -447,32 +447,32 @@ inline TAG_PARSER_EXPORT const char *termsOfUse() * \sa https://github.com/mbunkus/mkvtoolnix/wiki/Automatic-tag-generation */ namespace TrackSpecific { -inline TAG_PARSER_EXPORT const char *numberOfBytes() +constexpr TAG_PARSER_EXPORT const char *numberOfBytes() { return "NUMBER_OF_BYTES"; } -inline TAG_PARSER_EXPORT const char *numberOfFrames() +constexpr TAG_PARSER_EXPORT const char *numberOfFrames() { return "NUMBER_OF_FRAMES"; } -inline TAG_PARSER_EXPORT const char *duration() +constexpr TAG_PARSER_EXPORT const char *duration() { return "DURATION"; } /// \brief The track's bit rate in bits per second. -inline TAG_PARSER_EXPORT const char *bitrate() +constexpr TAG_PARSER_EXPORT const char *bitrate() { return "BPS"; } -inline TAG_PARSER_EXPORT const char *writingApp() +constexpr TAG_PARSER_EXPORT const char *writingApp() { return "_STATISTICS_WRITING_APP"; } -inline TAG_PARSER_EXPORT const char *writingDate() +constexpr TAG_PARSER_EXPORT const char *writingDate() { return "_STATISTICS_WRITING_DATE_UTC"; } -inline TAG_PARSER_EXPORT const char *statisticsTags() +constexpr TAG_PARSER_EXPORT const char *statisticsTags() { return "_STATISTICS_TAGS"; } @@ -483,7 +483,7 @@ inline TAG_PARSER_EXPORT const char *statisticsTags() /*! * \brief Returns the general TagTargetLevel for the Matroska specific \a targetLevelValue. */ -inline TAG_PARSER_EXPORT TagTargetLevel matroskaTagTargetLevel(uint64 targetLevelValue) +constexpr TAG_PARSER_EXPORT TagTargetLevel matroskaTagTargetLevel(uint64 targetLevelValue) { return targetLevelValue > 70 ? TagTargetLevel::Collection : static_cast(targetLevelValue / 10); } @@ -491,7 +491,7 @@ inline TAG_PARSER_EXPORT TagTargetLevel matroskaTagTargetLevel(uint64 targetLeve /*! * \brief Returns the Matroska specific target level value for the specified general \a targetLevel. */ -inline TAG_PARSER_EXPORT uint64 matroskaTagTargetLevelValue(TagTargetLevel targetLevel) +constexpr TAG_PARSER_EXPORT uint64 matroskaTagTargetLevelValue(TagTargetLevel targetLevel) { return static_cast(targetLevel) * 10; } diff --git a/mediaformat.h b/mediaformat.h index 41def7e..87c05e7 100644 --- a/mediaformat.h +++ b/mediaformat.h @@ -242,16 +242,16 @@ enum AudioFormatExtensions : unsigned char { SpectralBandReplication = 1, Parame class TAG_PARSER_EXPORT MediaFormat { public: - MediaFormat(GeneralMediaFormat general = GeneralMediaFormat::Unknown, unsigned char sub = 0, unsigned char extension = 0); + constexpr MediaFormat(GeneralMediaFormat general = GeneralMediaFormat::Unknown, unsigned char sub = 0, unsigned char extension = 0); const char *name() const; const char *abbreviation() const; const char *shortAbbreviation() const; const char *extensionName() const; - operator bool() const; - MediaFormat &operator+=(const MediaFormat &other); - bool operator==(GeneralMediaFormat general) const; - bool operator!=(GeneralMediaFormat general) const; + constexpr operator bool() const; + constexpr MediaFormat &operator+=(const MediaFormat &other); + constexpr bool operator==(GeneralMediaFormat general) const; + constexpr bool operator!=(GeneralMediaFormat general) const; GeneralMediaFormat general; unsigned char sub; @@ -261,7 +261,7 @@ public: /*! * \brief Constructs a new media format. */ -inline MediaFormat::MediaFormat(GeneralMediaFormat general, unsigned char sub, unsigned char extension) +constexpr MediaFormat::MediaFormat(GeneralMediaFormat general, unsigned char sub, unsigned char extension) : general(general) , sub(sub) , extension(extension) @@ -271,7 +271,7 @@ inline MediaFormat::MediaFormat(GeneralMediaFormat general, unsigned char sub, u /*! * \brief "Adds" information from another instance to the object. */ -inline MediaFormat &MediaFormat::operator+=(const MediaFormat &other) +constexpr MediaFormat &MediaFormat::operator+=(const MediaFormat &other) { if (other) { general = other.general; @@ -288,7 +288,7 @@ inline MediaFormat &MediaFormat::operator+=(const MediaFormat &other) /*! * \brief Returns whether the media format is the specified general media format. */ -inline bool MediaFormat::operator==(GeneralMediaFormat general) const +constexpr bool MediaFormat::operator==(GeneralMediaFormat general) const { return this->general == general; } @@ -296,7 +296,7 @@ inline bool MediaFormat::operator==(GeneralMediaFormat general) const /*! * \brief Returns whether the media format is not the specified general media format. */ -inline bool MediaFormat::operator!=(GeneralMediaFormat general) const +constexpr bool MediaFormat::operator!=(GeneralMediaFormat general) const { return this->general != general; } @@ -304,7 +304,7 @@ inline bool MediaFormat::operator!=(GeneralMediaFormat general) const /*! * \brief Returns whether the media format is known. */ -inline MediaFormat::operator bool() const +constexpr MediaFormat::operator bool() const { return general != GeneralMediaFormat::Unknown; } diff --git a/mp4/mp4atom.h b/mp4/mp4atom.h index 91acfa0..5a393fa 100644 --- a/mp4/mp4atom.h +++ b/mp4/mp4atom.h @@ -48,7 +48,7 @@ public: static void seekBackAndWriteAtomSize(std::ostream &stream, const std::ostream::pos_type &startOffset); static void seekBackAndWriteAtomSize64(std::ostream &stream, const std::ostream::pos_type &startOffset); - static void addHeaderSize(uint64 &dataSize); + static constexpr void addHeaderSize(uint64 &dataSize); static void makeHeader(uint64 size, uint32 id, IoUtilities::BinaryWriter &writer); protected: @@ -78,7 +78,7 @@ inline std::string Mp4Atom::idToString() const /*! * \brief Adds the header size to the specified \a data size. */ -inline void Mp4Atom::addHeaderSize(uint64 &dataSize) +constexpr void Mp4Atom::addHeaderSize(uint64 &dataSize) { dataSize += (dataSize < 0xFFFFFFF7 ? 8 : 16); } diff --git a/mp4/mp4track.cpp b/mp4/mp4track.cpp index 7463a42..ffb0017 100644 --- a/mp4/mp4track.cpp +++ b/mp4/mp4track.cpp @@ -38,7 +38,7 @@ struct TrackHeaderInfo { friend class Mp4Track; private: - TrackHeaderInfo(); + constexpr TrackHeaderInfo(); /// \brief Specifies the size which is required for making a new track header based one the existing one. uint64 requiredSize; @@ -56,12 +56,13 @@ private: bool discardBuffer; }; -inline TrackHeaderInfo::TrackHeaderInfo() +constexpr TrackHeaderInfo::TrackHeaderInfo() : requiredSize(100) , canUseExisting(false) , truncated(false) , version(0) , versionUnknown(false) + , additionalDataOffset(0) , discardBuffer(false) { } diff --git a/mpegaudio/mpegaudioframe.h b/mpegaudio/mpegaudioframe.h index 083c139..b310d4a 100644 --- a/mpegaudio/mpegaudioframe.h +++ b/mpegaudio/mpegaudioframe.h @@ -36,31 +36,31 @@ enum class XingHeaderFlags { class TAG_PARSER_EXPORT MpegAudioFrame { public: - MpegAudioFrame(); + constexpr MpegAudioFrame(); void parseHeader(IoUtilities::BinaryReader &reader); - bool isValid() const; + constexpr bool isValid() const; double mpegVersion() const; int layer() const; - bool isProtectedByCrc() const; + constexpr bool isProtectedByCrc() const; uint32 bitrate() const; uint32 samplingFrequency() const; - uint32 paddingSize() const; + constexpr uint32 paddingSize() const; MpegChannelMode channelMode() const; - bool hasCopyright() const; - bool isOriginal() const; + constexpr bool hasCopyright() const; + constexpr bool isOriginal() const; uint32 sampleCount() const; uint32 size() const; - bool isXingHeaderAvailable() const; - XingHeaderFlags xingHeaderFlags() const; - bool isXingFramefieldPresent() const; - bool isXingBytesfieldPresent() const; - bool isXingTocFieldPresent() const; - bool isXingQualityIndicatorFieldPresent() const; - uint32 xingFrameCount() const; - uint32 xingBytesfield() const; - uint32 xingQualityIndicator() const; + constexpr bool isXingHeaderAvailable() const; + constexpr XingHeaderFlags xingHeaderFlags() const; + constexpr bool isXingFramefieldPresent() const; + constexpr bool isXingBytesfieldPresent() const; + constexpr bool isXingTocFieldPresent() const; + constexpr bool isXingQualityIndicatorFieldPresent() const; + constexpr uint32 xingFrameCount() const; + constexpr uint32 xingBytesfield() const; + constexpr uint32 xingQualityIndicator() const; private: static const uint64 m_xingHeaderOffset; @@ -77,7 +77,7 @@ private: /*! * \brief Constructs a new frame. */ -inline MpegAudioFrame::MpegAudioFrame() +constexpr MpegAudioFrame::MpegAudioFrame() : m_header(0) , m_xingHeader(0) , m_xingHeaderFlags(XingHeaderFlags::None) @@ -90,7 +90,7 @@ inline MpegAudioFrame::MpegAudioFrame() /*! * \brief Returns an indication whether the frame is valid. */ -inline bool MpegAudioFrame::isValid() const +constexpr bool MpegAudioFrame::isValid() const { return (m_header & m_sync) == m_sync; } @@ -98,7 +98,7 @@ inline bool MpegAudioFrame::isValid() const /*! * \brief Returns an indication whether the frame is protected by CRC. */ -inline bool MpegAudioFrame::isProtectedByCrc() const +constexpr bool MpegAudioFrame::isProtectedByCrc() const { return (m_header & 0x10000u) != 0x10000u; } @@ -108,16 +108,17 @@ inline bool MpegAudioFrame::isProtectedByCrc() const */ inline uint32 MpegAudioFrame::bitrate() const { - if (mpegVersion() > 0.0 && layer() > 0) + if (mpegVersion() > 0.0 && layer() > 0) { return m_bitrateTable[mpegVersion() == 1.0 ? 0 : 1][layer() - 1][(m_header & 0xf000u) >> 12]; - else + } else { return 0; + } } /*! * \brief Returns the padding size if known; otherwise returns 0. */ -inline uint32 MpegAudioFrame::paddingSize() const +constexpr uint32 MpegAudioFrame::paddingSize() const { if (isValid()) { return (m_header & 0x60000u) == 0x60000u ? 4u : 1u * (m_header & 0x200u); @@ -129,7 +130,7 @@ inline uint32 MpegAudioFrame::paddingSize() const /*! * \brief Returns an indication whether the frame is copyrighted. */ -inline bool MpegAudioFrame::hasCopyright() const +constexpr bool MpegAudioFrame::hasCopyright() const { return (m_header & 0x8u) == 0x8u; } @@ -137,17 +138,17 @@ inline bool MpegAudioFrame::hasCopyright() const /*! * \brief Returns an indication whether the frame labeled as original. */ -inline bool MpegAudioFrame::isOriginal() const +constexpr bool MpegAudioFrame::isOriginal() const { return (m_header & 0x4u) == 0x4u; } -inline XingHeaderFlags operator|(XingHeaderFlags lhs, XingHeaderFlags rhs) +constexpr XingHeaderFlags operator|(XingHeaderFlags lhs, XingHeaderFlags rhs) { return static_cast(static_cast(lhs) | static_cast(rhs)); } -inline XingHeaderFlags operator&(XingHeaderFlags lhs, XingHeaderFlags rhs) +constexpr XingHeaderFlags operator&(XingHeaderFlags lhs, XingHeaderFlags rhs) { return static_cast(static_cast(lhs) & static_cast(rhs)); } @@ -155,7 +156,7 @@ inline XingHeaderFlags operator&(XingHeaderFlags lhs, XingHeaderFlags rhs) /*! * \brief Returns an indication whether a Xing header is present. */ -inline bool MpegAudioFrame::isXingHeaderAvailable() const +constexpr bool MpegAudioFrame::isXingHeaderAvailable() const { return ((m_xingHeader & 0x58696e6700000000uL) == 0x58696e6700000000uL) || ((m_xingHeader & 0x496e666f00000000uL) == 0x496e666f00000000uL); } @@ -163,7 +164,7 @@ inline bool MpegAudioFrame::isXingHeaderAvailable() const /*! * \brief Returns the Xing header flags. */ -inline XingHeaderFlags MpegAudioFrame::xingHeaderFlags() const +constexpr XingHeaderFlags MpegAudioFrame::xingHeaderFlags() const { return m_xingHeaderFlags; } @@ -171,7 +172,7 @@ inline XingHeaderFlags MpegAudioFrame::xingHeaderFlags() const /*! * \brief Returns an indication whether the Xing frame field is present. */ -inline bool MpegAudioFrame::isXingFramefieldPresent() const +constexpr bool MpegAudioFrame::isXingFramefieldPresent() const { return (isXingHeaderAvailable()) ? ((m_xingHeaderFlags & XingHeaderFlags::HasFramesField) == XingHeaderFlags::HasFramesField) : false; } @@ -179,7 +180,7 @@ inline bool MpegAudioFrame::isXingFramefieldPresent() const /*! * \brief Returns an indication whether the Xing bytes field is present. */ -inline bool MpegAudioFrame::isXingBytesfieldPresent() const +constexpr bool MpegAudioFrame::isXingBytesfieldPresent() const { return (isXingHeaderAvailable()) ? ((m_xingHeaderFlags & XingHeaderFlags::HasFramesField) == XingHeaderFlags::HasFramesField) : false; } @@ -187,7 +188,7 @@ inline bool MpegAudioFrame::isXingBytesfieldPresent() const /*! * \brief Returns an indication whether the Xing TOC is present. */ -inline bool MpegAudioFrame::isXingTocFieldPresent() const +constexpr bool MpegAudioFrame::isXingTocFieldPresent() const { return (isXingHeaderAvailable()) ? ((m_xingHeaderFlags & XingHeaderFlags::HasTocField) == XingHeaderFlags::HasTocField) : false; } @@ -195,7 +196,7 @@ inline bool MpegAudioFrame::isXingTocFieldPresent() const /*! * \brief Returns an indication whether the Xing quality indicator field is present. */ -inline bool MpegAudioFrame::isXingQualityIndicatorFieldPresent() const +constexpr bool MpegAudioFrame::isXingQualityIndicatorFieldPresent() const { return (isXingHeaderAvailable()) ? ((m_xingHeaderFlags & XingHeaderFlags::HasQualityIndicator) == XingHeaderFlags::HasQualityIndicator) : false; } @@ -203,7 +204,7 @@ inline bool MpegAudioFrame::isXingQualityIndicatorFieldPresent() const /*! * \brief Returns an indication whether the Xing frame count is present. */ -inline uint32 MpegAudioFrame::xingFrameCount() const +constexpr uint32 MpegAudioFrame::xingFrameCount() const { return m_xingFramefield; } @@ -211,7 +212,7 @@ inline uint32 MpegAudioFrame::xingFrameCount() const /*! * \brief Returns the Xing bytes field if known; otherwise returns 0. */ -inline uint32 MpegAudioFrame::xingBytesfield() const +constexpr uint32 MpegAudioFrame::xingBytesfield() const { return m_xingBytesfield; } @@ -219,7 +220,7 @@ inline uint32 MpegAudioFrame::xingBytesfield() const /*! * \brief Returns the Xing quality indicator if known; otherwise returns 0. */ -inline uint32 MpegAudioFrame::xingQualityIndicator() const +constexpr uint32 MpegAudioFrame::xingQualityIndicator() const { return m_xingQualityIndicator; } diff --git a/ogg/oggcontainer.h b/ogg/oggcontainer.h index 5c46c96..8cd5a0c 100644 --- a/ogg/oggcontainer.h +++ b/ogg/oggcontainer.h @@ -25,7 +25,7 @@ class OggContainer; * \brief The OggParameter struct holds the OGG parameter for a VorbisComment. */ struct TAG_PARSER_EXPORT OggParameter { - OggParameter(); + constexpr OggParameter(); void set(std::size_t pageIndex, std::size_t segmentIndex, bool lastMetaDataBlock, GeneralMediaFormat streamFormat = GeneralMediaFormat::Vorbis); std::size_t firstPageIndex; @@ -41,7 +41,7 @@ struct TAG_PARSER_EXPORT OggParameter { * \brief Creates new parameters. * \remarks The OggContainer class is responsible for assigning sane values. */ -inline OggParameter::OggParameter() +constexpr OggParameter::OggParameter() : firstPageIndex(0) , firstSegmentIndex(0) , lastPageIndex(0) diff --git a/opus/opusidentificationheader.h b/opus/opusidentificationheader.h index 7b0a671..b0913cb 100644 --- a/opus/opusidentificationheader.h +++ b/opus/opusidentificationheader.h @@ -11,16 +11,16 @@ class OggIterator; class TAG_PARSER_EXPORT OpusIdentificationHeader { public: - OpusIdentificationHeader(); + constexpr OpusIdentificationHeader(); void parseHeader(OggIterator &iterator); - byte version() const; - byte channels() const; - uint16 preSkip() const; - uint32 sampleRate() const; - uint16 outputGain() const; - byte channelMap() const; + constexpr byte version() const; + constexpr byte channels() const; + constexpr uint16 preSkip() const; + constexpr uint32 sampleRate() const; + constexpr uint16 outputGain() const; + constexpr byte channelMap() const; private: byte m_version; @@ -34,9 +34,10 @@ private: /*! * \brief Constructs a new Opus identification header. */ -inline OpusIdentificationHeader::OpusIdentificationHeader() +constexpr OpusIdentificationHeader::OpusIdentificationHeader() : m_version(0) , m_channels(0) + , m_preSkip(0) , m_sampleRate(0) , m_outputGain(0) , m_channelMap(0) @@ -46,7 +47,7 @@ inline OpusIdentificationHeader::OpusIdentificationHeader() /*! * \brief Returns the version (which should be 1 currently). */ -inline byte OpusIdentificationHeader::version() const +constexpr byte OpusIdentificationHeader::version() const { return m_version; } @@ -54,7 +55,7 @@ inline byte OpusIdentificationHeader::version() const /*! * \brief Returns the number of channels for the Opus stream. */ -inline byte OpusIdentificationHeader::channels() const +constexpr byte OpusIdentificationHeader::channels() const { return m_channels; } @@ -66,7 +67,7 @@ inline byte OpusIdentificationHeader::channels() const * output when starting playback, and also the number to subtract from a * page's granule position to calculate its PCM sample position. */ -inline uint16 OpusIdentificationHeader::preSkip() const +constexpr uint16 OpusIdentificationHeader::preSkip() const { return m_preSkip; } @@ -76,7 +77,7 @@ inline uint16 OpusIdentificationHeader::preSkip() const * \remarks This is not the sample rate to use for playback of the encoded data. * \sa https://wiki.xiph.org/OggOpus */ -inline uint32 OpusIdentificationHeader::sampleRate() const +constexpr uint32 OpusIdentificationHeader::sampleRate() const { return m_sampleRate; } @@ -87,7 +88,7 @@ inline uint32 OpusIdentificationHeader::sampleRate() const * This is a gain to be applied by the decoder. Virtually all players and media frameworks * should apply it by default. */ -inline uint16 OpusIdentificationHeader::outputGain() const +constexpr uint16 OpusIdentificationHeader::outputGain() const { return m_outputGain; } @@ -99,7 +100,7 @@ inline uint16 OpusIdentificationHeader::outputGain() const * encoded in each Opus packet. * \sa https://wiki.xiph.org/OggOpus */ -inline byte OpusIdentificationHeader::channelMap() const +constexpr byte OpusIdentificationHeader::channelMap() const { return m_channelMap; } diff --git a/vorbis/vorbiscommentids.h b/vorbis/vorbiscommentids.h index ecf5a04..46e8883 100644 --- a/vorbis/vorbiscommentids.h +++ b/vorbis/vorbiscommentids.h @@ -10,147 +10,147 @@ namespace TagParser { */ namespace VorbisCommentIds { -inline TAG_PARSER_EXPORT const char *trackNumber() +constexpr TAG_PARSER_EXPORT const char *trackNumber() { return "TRACKNUMBER"; } -inline TAG_PARSER_EXPORT const char *diskNumber() +constexpr TAG_PARSER_EXPORT const char *diskNumber() { return "DISCNUMBER"; } -inline TAG_PARSER_EXPORT const char *part() +constexpr TAG_PARSER_EXPORT const char *part() { return "PART"; } -inline TAG_PARSER_EXPORT const char *partNumber() +constexpr TAG_PARSER_EXPORT const char *partNumber() { return "PARTNUMBER"; } -inline TAG_PARSER_EXPORT const char *title() +constexpr TAG_PARSER_EXPORT const char *title() { return "TITLE"; } -inline TAG_PARSER_EXPORT const char *version() +constexpr TAG_PARSER_EXPORT const char *version() { return "VERSION"; } -inline TAG_PARSER_EXPORT const char *artist() +constexpr TAG_PARSER_EXPORT const char *artist() { return "ARTIST"; } -inline TAG_PARSER_EXPORT const char *album() +constexpr TAG_PARSER_EXPORT const char *album() { return "ALBUM"; } -inline TAG_PARSER_EXPORT const char *label() +constexpr TAG_PARSER_EXPORT const char *label() { return "LABEL"; } -inline TAG_PARSER_EXPORT const char *labelNo() +constexpr TAG_PARSER_EXPORT const char *labelNo() { return "LABELNO"; } -inline TAG_PARSER_EXPORT const char *language() +constexpr TAG_PARSER_EXPORT const char *language() { return "LANGUAGE"; } -inline TAG_PARSER_EXPORT const char *performer() +constexpr TAG_PARSER_EXPORT const char *performer() { return "PERFORMER"; } -inline TAG_PARSER_EXPORT const char *composer() +constexpr TAG_PARSER_EXPORT const char *composer() { return "COMPOSER"; } -inline TAG_PARSER_EXPORT const char *ensemble() +constexpr TAG_PARSER_EXPORT const char *ensemble() { return "ENSEMBLE"; } -inline TAG_PARSER_EXPORT const char *arranger() +constexpr TAG_PARSER_EXPORT const char *arranger() { return "ARRANGER"; } -inline TAG_PARSER_EXPORT const char *lyricist() +constexpr TAG_PARSER_EXPORT const char *lyricist() { return "LYRICIST"; } -inline TAG_PARSER_EXPORT const char *author() +constexpr TAG_PARSER_EXPORT const char *author() { return "AUTHOR"; } -inline TAG_PARSER_EXPORT const char *conductor() +constexpr TAG_PARSER_EXPORT const char *conductor() { return "CONDUCTOR"; } -inline TAG_PARSER_EXPORT const char *encoder() +constexpr TAG_PARSER_EXPORT const char *encoder() { return "ENCODER"; } -inline TAG_PARSER_EXPORT const char *publisher() +constexpr TAG_PARSER_EXPORT const char *publisher() { return "PUBLISHER"; } -inline TAG_PARSER_EXPORT const char *genre() +constexpr TAG_PARSER_EXPORT const char *genre() { return "GENRE"; } -inline TAG_PARSER_EXPORT const char *originalMediaType() +constexpr TAG_PARSER_EXPORT const char *originalMediaType() { return "ORIGINAL_TAG_PARSER_TYPE"; } -inline TAG_PARSER_EXPORT const char *contentType() +constexpr TAG_PARSER_EXPORT const char *contentType() { return "CONTENT_TYPE"; } -inline TAG_PARSER_EXPORT const char *subject() +constexpr TAG_PARSER_EXPORT const char *subject() { return "SUBJECT"; } -inline TAG_PARSER_EXPORT const char *description() +constexpr TAG_PARSER_EXPORT const char *description() { return "DESCRIPTION"; } -inline TAG_PARSER_EXPORT const char *isrc() +constexpr TAG_PARSER_EXPORT const char *isrc() { return "ISRC"; } -inline TAG_PARSER_EXPORT const char *eanupn() +constexpr TAG_PARSER_EXPORT const char *eanupn() { return "EAN/UPN"; } -inline TAG_PARSER_EXPORT const char *comment() +constexpr TAG_PARSER_EXPORT const char *comment() { return "COMMENT"; } -inline TAG_PARSER_EXPORT const char *encoderSettings() +constexpr TAG_PARSER_EXPORT const char *encoderSettings() { return "ENCODING"; } -inline TAG_PARSER_EXPORT const char *date() +constexpr TAG_PARSER_EXPORT const char *date() { return "DATE"; } -inline TAG_PARSER_EXPORT const char *location() +constexpr TAG_PARSER_EXPORT const char *location() { return "LOCATION"; } -inline TAG_PARSER_EXPORT const char *license() +constexpr TAG_PARSER_EXPORT const char *license() { return "LICENSE"; } -inline TAG_PARSER_EXPORT const char *copyright() +constexpr TAG_PARSER_EXPORT const char *copyright() { return "COPYRIGHT"; } -inline TAG_PARSER_EXPORT const char *opus() +constexpr TAG_PARSER_EXPORT const char *opus() { return "OPUS"; } -inline TAG_PARSER_EXPORT const char *sourceMedia() +constexpr TAG_PARSER_EXPORT const char *sourceMedia() { return "SOURCEMEDIA"; } -inline TAG_PARSER_EXPORT const char *cover() +constexpr TAG_PARSER_EXPORT const char *cover() { return "METADATA_BLOCK_PICTURE"; } diff --git a/vorbis/vorbisidentificationheader.h b/vorbis/vorbisidentificationheader.h index 721a397..b3d0e67 100644 --- a/vorbis/vorbisidentificationheader.h +++ b/vorbis/vorbisidentificationheader.h @@ -11,18 +11,18 @@ class OggIterator; class TAG_PARSER_EXPORT VorbisIdentificationHeader { public: - VorbisIdentificationHeader(); + constexpr VorbisIdentificationHeader(); void parseHeader(OggIterator &iterator); - uint32 version() const; - byte channels() const; - uint32 sampleRate() const; - uint32 maxBitrate() const; - uint32 nominalBitrate() const; - uint32 minBitrate() const; - byte blockSize() const; - byte framingFlag() const; + constexpr uint32 version() const; + constexpr byte channels() const; + constexpr uint32 sampleRate() const; + constexpr uint32 maxBitrate() const; + constexpr uint32 nominalBitrate() const; + constexpr uint32 minBitrate() const; + constexpr byte blockSize() const; + constexpr byte framingFlag() const; private: uint32 m_version; @@ -38,7 +38,7 @@ private: /*! * \brief Constructs a new Vorbis identification header. */ -inline VorbisIdentificationHeader::VorbisIdentificationHeader() +constexpr VorbisIdentificationHeader::VorbisIdentificationHeader() : m_version(0) , m_channels(0) , m_sampleRate(0) @@ -50,42 +50,42 @@ inline VorbisIdentificationHeader::VorbisIdentificationHeader() { } -inline uint32 VorbisIdentificationHeader::version() const +constexpr uint32 VorbisIdentificationHeader::version() const { return m_version; } -inline byte VorbisIdentificationHeader::channels() const +constexpr byte VorbisIdentificationHeader::channels() const { return m_channels; } -inline uint32 VorbisIdentificationHeader::sampleRate() const +constexpr uint32 VorbisIdentificationHeader::sampleRate() const { return m_sampleRate; } -inline uint32 VorbisIdentificationHeader::maxBitrate() const +constexpr uint32 VorbisIdentificationHeader::maxBitrate() const { return m_maxBitrate; } -inline uint32 VorbisIdentificationHeader::nominalBitrate() const +constexpr uint32 VorbisIdentificationHeader::nominalBitrate() const { return m_nominalBitrate; } -inline uint32 VorbisIdentificationHeader::minBitrate() const +constexpr uint32 VorbisIdentificationHeader::minBitrate() const { return m_minBitrate; } -inline byte VorbisIdentificationHeader::blockSize() const +constexpr byte VorbisIdentificationHeader::blockSize() const { return m_blockSize; } -inline byte VorbisIdentificationHeader::framingFlag() const +constexpr byte VorbisIdentificationHeader::framingFlag() const { return m_framingFlag; } diff --git a/wav/waveaudiostream.cpp b/wav/waveaudiostream.cpp index 9dfa0a7..8ef59eb 100644 --- a/wav/waveaudiostream.cpp +++ b/wav/waveaudiostream.cpp @@ -18,19 +18,6 @@ namespace TagParser { * \brief The WaveFormatHeader class parses the WAVEFORMATEX structure defined by MS. */ -/*! - * \brief Constructs a new WaveFormatHeader. - */ -WaveFormatHeader::WaveFormatHeader() - : formatTag(0) - , channelCount(0) - , sampleRate(0) - , bytesPerSecond(0) - , chunkSize(0) - , bitsPerSample(0) -{ -} - /*! * \brief Parses the WAVE "fmt " header segment using the specified \a reader. * \remarks Reads 16 bytes from the associated stream. diff --git a/wav/waveaudiostream.h b/wav/waveaudiostream.h index 0daf305..cc65b3d 100644 --- a/wav/waveaudiostream.h +++ b/wav/waveaudiostream.h @@ -7,11 +7,11 @@ namespace TagParser { class TAG_PARSER_EXPORT WaveFormatHeader { public: - WaveFormatHeader(); + constexpr WaveFormatHeader(); void parse(IoUtilities::BinaryReader &reader); MediaFormat format() const; - uint32 bitrate() const; + constexpr uint32 bitrate() const; uint16 formatTag; uint16 channelCount; @@ -21,10 +21,23 @@ public: uint16 bitsPerSample; }; +/*! + * \brief Constructs a new WaveFormatHeader. + */ +constexpr WaveFormatHeader::WaveFormatHeader() + : formatTag(0) + , channelCount(0) + , sampleRate(0) + , bytesPerSecond(0) + , chunkSize(0) + , bitsPerSample(0) +{ +} + /*! * \brief Calculates the bitrate from the header data. */ -inline uint32 WaveFormatHeader::bitrate() const +constexpr uint32 WaveFormatHeader::bitrate() const { return bitsPerSample * sampleRate * channelCount; }