diff options
| author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2020-03-25 15:25:55 +0100 | 
|---|---|---|
| committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2020-03-25 15:25:55 +0100 | 
| commit | e9e1b673a111366ad9071933f3469891a735243a (patch) | |
| tree | 0c82a2031a82b7d56537ff23f8084c42382ecbd7 | |
| parent | 7ad4a211a9bcba9c78e6a41e0ad1f20460e8896e (diff) | |
| download | ODR-SourceCompanion-e9e1b673a111366ad9071933f3469891a735243a.tar.gz ODR-SourceCompanion-e9e1b673a111366ad9071933f3469891a735243a.tar.bz2 ODR-SourceCompanion-e9e1b673a111366ad9071933f3469891a735243a.zip | |
Add --identifier option to specify content of EDI ODRv TAG
| -rw-r--r-- | src/Outputs.cpp | 23 | ||||
| -rw-r--r-- | src/Outputs.h | 6 | ||||
| -rw-r--r-- | src/odr-sourcecompanion.cpp | 28 | 
3 files changed, 42 insertions, 15 deletions
| diff --git a/src/Outputs.cpp b/src/Outputs.cpp index 3b4de65..90fe62a 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. @@ -142,7 +142,12 @@ EDI::EDI() :  EDI::~EDI() { } -void EDI::add_udp_destination(const string& host, unsigned int port) +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>();      dest->dest_addr = host; @@ -155,7 +160,7 @@ void EDI::add_udp_destination(const string& host, unsigned int port)      // TODO make FEC configurable  } -void EDI::add_tcp_destination(const string& host, unsigned int port) +void EDI::add_tcp_destination(const std::string& host, unsigned int port)  {      auto dest = make_shared<edi::tcp_client_t>();      dest->dest_addr = host; @@ -165,7 +170,7 @@ void EDI::add_tcp_destination(const string& host, unsigned int port)      dest->dest_port = port;      m_edi_conf.destinations.push_back(dest); -    m_edi_conf.dump = true; +    m_edi_conf.dump = false;  }  bool EDI::enabled() const @@ -215,17 +220,9 @@ 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 -      // We always send in 24ms interval      const size_t num_seconds_sent = m_num_frames_sent * 1000 / 24; -    edi::TagODRVersion edi_tagVersion(ss.str(), num_seconds_sent); +    edi::TagODRVersion edi_tagVersion(m_odr_version_tag, 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 1f17491..53ee2ec 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-sourcecompanion.cpp b/src/odr-sourcecompanion.cpp index b8c5547..b233e2c 100644 --- a/src/odr-sourcecompanion.cpp +++ b/src/odr-sourcecompanion.cpp @@ -1,5 +1,5 @@  /* ------------------------------------------------------------------ - * Copyright (C) 2019 Matthias P. Braendli + * Copyright (C) 2020 Matthias P. Braendli   * Copyright (C) 2017 AVT GmbH - Fabien Vercasson   * Copyright (C) 2011 Martin Storsjo   * @@ -89,6 +89,7 @@ void usage(const char* name) {      "         --sbr                            Force the usage of SBR\n"      "         --ps                             Force the usage of PS\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"      "                                          If more than one ZMQ output is given, the socket\n"      "                                          will be connected to all listed endpoints.\n" @@ -151,6 +152,7 @@ int main(int argc, char *argv[])          {"rate",                   required_argument,  0, 'r'},          {"stats",                  required_argument,  0, 'S'},          {"secret-key",             required_argument,  0, 'k'}, +        {"identifier",             required_argument,  0,  3 },          {"input-uri",              required_argument,  0, 'I'},          {"control-uri",            required_argument,  0,  6 },          {"timeout",                required_argument,  0,  7 }, @@ -185,6 +187,8 @@ int main(int argc, char *argv[])      bool allowSBR = false;      bool allowPS  = false; +    string identifier; +      vector<string> edi_output_uris;      bool tist_enabled = false;      uint32_t tist_delay_ms = 0; @@ -209,6 +213,16 @@ int main(int argc, char *argv[])              allowPS = true;              allowSBR = true;              break; +        case 3: // Identifier for in-band version information +            identifier = optarg; +            /* The 32 character length restriction is arbitrary, but guarantees +             * that the EDI packet will not grow too large */ +            if (identifier.size() > 32) { +                fprintf(stderr, "Output Identifier too long!\n"); +                usage(argv[0]); +                return 1; +            } +            break;          case 'b':              bitrate = stoi(optarg);              break; @@ -323,6 +337,18 @@ int main(int argc, char *argv[])          }      } +    if (not edi_output_uris.empty()) { +        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) {          int flags;          if (mkfifo(pad_fifo, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH) != 0) { | 
