diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2019-09-18 11:49:38 +0200 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2019-09-18 11:49:38 +0200 |
commit | 4e207da0b1d2faa5fa38888ea824e0430ecd2f33 (patch) | |
tree | c998c1924843bd2d9eca30ce3db849a73f4a78fe /contrib/edi | |
parent | eab95c0e7a7fad7d8fc5dd9b00b9ddb565d15925 (diff) | |
download | ODR-AudioEnc-4e207da0b1d2faa5fa38888ea824e0430ecd2f33.tar.gz ODR-AudioEnc-4e207da0b1d2faa5fa38888ea824e0430ecd2f33.tar.bz2 ODR-AudioEnc-4e207da0b1d2faa5fa38888ea824e0430ecd2f33.zip |
EDI: add audio levels and program version TAGs
Diffstat (limited to 'contrib/edi')
-rw-r--r-- | contrib/edi/TagItems.cpp | 66 | ||||
-rw-r--r-- | contrib/edi/TagItems.h | 24 |
2 files changed, 90 insertions, 0 deletions
diff --git a/contrib/edi/TagItems.cpp b/contrib/edi/TagItems.cpp index 35a6852..9746469 100644 --- a/contrib/edi/TagItems.cpp +++ b/contrib/edi/TagItems.cpp @@ -379,5 +379,71 @@ std::vector<uint8_t> TagStarDMY::Assemble() return packet; } +TagODRVersion::TagODRVersion(const std::string& version, uint32_t uptime_s) : + m_version(version), + m_uptime(uptime_s) +{ +} + +std::vector<uint8_t> TagODRVersion::Assemble() +{ + std::string pack_data("ODRv"); + std::vector<uint8_t> packet(pack_data.begin(), pack_data.end()); + + const size_t length = m_version.size() + sizeof(uint32_t); + + packet.resize(4 + 4 + length); + + const uint32_t length_bits = length * 8; + + size_t i = 4; + packet[i++] = (length_bits >> 24) & 0xFF; + packet[i++] = (length_bits >> 16) & 0xFF; + packet[i++] = (length_bits >> 8) & 0xFF; + packet[i++] = length_bits & 0xFF; + + copy(m_version.cbegin(), m_version.cend(), packet.begin() + i); + i += m_version.size(); + + packet[i++] = (m_uptime >> 24) & 0xFF; + packet[i++] = (m_uptime >> 16) & 0xFF; + packet[i++] = (m_uptime >> 8) & 0xFF; + packet[i++] = m_uptime & 0xFF; + + return packet; +} + +TagODRAudioLevels::TagODRAudioLevels(int16_t audiolevel_left, int16_t audiolevel_right) : + m_audio_left(audiolevel_left), + m_audio_right(audiolevel_right) +{ +} + +std::vector<uint8_t> TagODRAudioLevels::Assemble() +{ + std::string pack_data("ODRa"); + std::vector<uint8_t> packet(pack_data.begin(), pack_data.end()); + + constexpr size_t length = 2*sizeof(int16_t); + + packet.resize(4 + 4 + length); + + const uint32_t length_bits = length * 8; + + size_t i = 4; + packet[i++] = (length_bits >> 24) & 0xFF; + packet[i++] = (length_bits >> 16) & 0xFF; + packet[i++] = (length_bits >> 8) & 0xFF; + packet[i++] = length_bits & 0xFF; + + packet[i++] = (m_audio_left >> 8) & 0xFF; + packet[i++] = m_audio_left & 0xFF; + + packet[i++] = (m_audio_right >> 8) & 0xFF; + packet[i++] = m_audio_right & 0xFF; + + return packet; +} + } diff --git a/contrib/edi/TagItems.h b/contrib/edi/TagItems.h index 25daa14..5c81b01 100644 --- a/contrib/edi/TagItems.h +++ b/contrib/edi/TagItems.h @@ -225,5 +225,29 @@ class TagStarDMY : public TagItem uint32_t length_; }; +// Custom TAG that carries version information of the EDI source +class TagODRVersion : public TagItem +{ + public: + TagODRVersion(const std::string& version, uint32_t uptime_s); + std::vector<uint8_t> Assemble(); + + private: + std::string m_version; + uint32_t m_uptime; +}; + +// Custom TAG that carries audio level metadata +class TagODRAudioLevels : public TagItem +{ + public: + TagODRAudioLevels(int16_t audiolevel_left, int16_t audiolevel_right); + std::vector<uint8_t> Assemble(); + + private: + int16_t m_audio_left; + int16_t m_audio_right; +}; + } |