diff --git a/src/tools/roc_send/cmdline.ggo b/src/tools/roc_send/cmdline.ggo index 90e48d170..94fbde67e 100644 --- a/src/tools/roc_send/cmdline.ggo +++ b/src/tools/roc_send/cmdline.ggo @@ -50,6 +50,9 @@ section "Options" option "rate" - "Override input sample rate, Hz" int optional + option "packet-encoding" - "Register custom packet encoding (e.g. \"96:s16/48000/stereo\")" + typestr="ENCODING" string optional + option "latency-backend" - "Which latency to use in latency tuner" values="niq" default="niq" enum optional diff --git a/src/tools/roc_send/main.cpp b/src/tools/roc_send/main.cpp index ca3af5dd0..551c3ce96 100644 --- a/src/tools/roc_send/main.cpp +++ b/src/tools/roc_send/main.cpp @@ -20,6 +20,7 @@ #include "roc_node/context.h" #include "roc_node/sender.h" #include "roc_pipeline/sender_sink.h" +#include "roc_rtp/encoding.h" #include "roc_sndio/backend_dispatcher.h" #include "roc_sndio/backend_map.h" #include "roc_sndio/print_supported.h" @@ -268,6 +269,22 @@ int main(int argc, char** argv) { return 1; } + if (args.packet_encoding_given) { + rtp::Encoding enc; + if (!rtp::parse_encoding(args.packet_encoding_arg, enc)) { + roc_log(LogError, + "invalid --packet-encoding: bad format," + " expected \"://\"," + " e.g. \"96:s16/48000/stereo\""); + return 1; + } + if (!context.encoding_map().add_encoding(enc)) { + roc_log(LogError, "invalid --packet-encoding: failed to register encoding"); + return 1; + } + sender_config.payload_type = enc.payload_type; + } + sndio::BackendDispatcher backend_dispatcher(context.arena()); if (args.list_supported_given) { if (!address::print_supported(context.arena())) {