summaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2019-09-18 11:49:38 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2019-09-18 11:49:38 +0200
commit4e207da0b1d2faa5fa38888ea824e0430ecd2f33 (patch)
treec998c1924843bd2d9eca30ce3db849a73f4a78fe /contrib
parenteab95c0e7a7fad7d8fc5dd9b00b9ddb565d15925 (diff)
downloadODR-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')
-rw-r--r--contrib/edi/TagItems.cpp66
-rw-r--r--contrib/edi/TagItems.h24
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;
+};
+
}