diff options
| -rw-r--r-- | src/Outputs.cpp | 17 | ||||
| -rw-r--r-- | src/Outputs.h | 6 | ||||
| -rw-r--r-- | src/odr-audioenc.cpp | 25 | 
3 files changed, 36 insertions, 12 deletions
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<edi::udp_destination_t>(); @@ -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<edi::Sender> 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<Output::File> file_output;      shared_ptr<Output::ZMQ> 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;  | 
