From 8df764af13e71062f24f60c08a1dc3e3c0d2e371 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Wed, 25 Mar 2020 15:13:43 +0100 Subject: Add --identifer option to specify content of EDI ODRv TAG --- src/Outputs.cpp | 17 +++++++---------- src/Outputs.h | 6 +++++- src/odr-audioenc.cpp | 25 ++++++++++++++++++++++++- 3 files changed, 36 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/Outputs.cpp b/src/Outputs.cpp index 97caaee..01156ce 100644 --- a/src/Outputs.cpp +++ b/src/Outputs.cpp @@ -1,6 +1,6 @@ /* ------------------------------------------------------------------ * Copyright (C) 2011 Martin Storsjo - * Copyright (C) 2019 Matthias P. Braendli + * Copyright (C) 2020 Matthias P. Braendli * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -141,6 +141,11 @@ EDI::EDI() : EDI::~EDI() { } +void EDI::set_odr_version_tag(const std::string& odr_version_tag) +{ + m_odr_version_tag = odr_version_tag; +} + void EDI::add_udp_destination(const std::string& host, unsigned int port) { auto dest = make_shared(); @@ -224,15 +229,7 @@ bool EDI::write_frame(const uint8_t *buf, size_t len) edi::TagODRAudioLevels edi_tagAudioLevels(m_audio_left, m_audio_right); - stringstream ss; - ss << PACKAGE_NAME << " " << -#if defined(GITVERSION) - GITVERSION; -#else - PACKAGE_VERSION; -#endif - edi::TagODRVersion edi_tagVersion(ss.str(), m_num_seconds_sent); - + edi::TagODRVersion edi_tagVersion(m_odr_version_tag, m_num_seconds_sent); // The above Tag Items will be assembled into a TAG Packet edi::TagPacket edi_tagpacket(m_edi_conf.tagpacket_alignment); diff --git a/src/Outputs.h b/src/Outputs.h index 0f1f34f..3a302b1 100644 --- a/src/Outputs.h +++ b/src/Outputs.h @@ -1,6 +1,6 @@ /* ------------------------------------------------------------------ * Copyright (C) 2011 Martin Storsjo - * Copyright (C) 2019 Matthias P. Braendli + * Copyright (C) 2020 Matthias P. Braendli * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -133,6 +133,8 @@ class EDI: public Base { EDI& operator=(const EDI&) = delete; virtual ~EDI() override; + void set_odr_version_tag(const std::string& odr_version_tag); + void add_udp_destination(const std::string& host, unsigned int port); void add_tcp_destination(const std::string& host, unsigned int port); @@ -143,6 +145,8 @@ class EDI: public Base { virtual bool write_frame(const uint8_t *buf, size_t len) override; private: + std::string m_odr_version_tag; + edi::configuration_t m_edi_conf; std::shared_ptr m_edi_sender; diff --git a/src/odr-audioenc.cpp b/src/odr-audioenc.cpp index 61317e5..e0b38f5 100644 --- a/src/odr-audioenc.cpp +++ b/src/odr-audioenc.cpp @@ -1,6 +1,6 @@ /* ------------------------------------------------------------------ * Copyright (C) 2011 Martin Storsjo - * Copyright (C) 2019 Matthias P. Braendli + * Copyright (C) 2020 Matthias P. Braendli * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -182,6 +182,7 @@ void usage(const char* name) " -B, --bandwidth=VALUE Set the AAC encoder bandwidth to VALUE [Hz].\n" " --decode=FILE Decode the AAC back to a wav file (loopback test).\n" " Output and PAD parameters:\n" + " --identifier=ID An identifier string that is sent in the ODRv EDI TAG. Max 32 characters length.\n" " -o, --output=URI Output ZMQ uri. (e.g. 'tcp://localhost:9000')\n" " -or- Output file uri. (e.g. 'file.dabp')\n" " -or- a single dash '-' to denote stdout\n" @@ -433,6 +434,7 @@ public: shared_ptr file_output; shared_ptr zmq_output; Output::EDI edi_output; + string identifier; bool tist_enabled = false; uint32_t tist_delay_ms = 0; @@ -611,6 +613,16 @@ int AudioEnc::run() if (not edi_output_uris.empty()) { edi_output.set_tist(tist_enabled, tist_delay_ms); + + stringstream ss; + ss << PACKAGE_NAME << " " << +#if defined(GITVERSION) + GITVERSION << +#else + PACKAGE_VERSION << +#endif + " " << identifier; + edi_output.set_odr_version_tag(ss.str()); } if (padlen != 0) { @@ -1322,6 +1334,7 @@ int main(int argc, char *argv[]) {"timestamp-delay", required_argument, 0, 'T'}, {"decode", required_argument, 0, 6 }, {"format", required_argument, 0, 'f'}, + {"identifier", required_argument, 0, 7 }, {"input", required_argument, 0, 'i'}, {"jack", required_argument, 0, 'j'}, {"output", required_argument, 0, 'o'}, @@ -1405,6 +1418,16 @@ int main(int argc, char *argv[]) case 6: // Enable loopback decoder for AAC audio_enc.decode_wavfilename = optarg; break; + case 7: // Identifier for in-band version information + audio_enc.identifier = optarg; + /* The 32 character length restriction is arbitrary, but guarantees + * that the EDI packet will not grow too large */ + if (audio_enc.identifier.size() > 32) { + fprintf(stderr, "Output Identifier too long!\n"); + usage(argv[0]); + return 1; + } + break; case 'a': audio_enc.selected_encoder = encoder_selection_t::toolame_dab; break; -- cgit v1.2.3