4646#include " video_display.h"
4747#include " video_frame.h"
4848#include " utils/misc.h"
49+ #include " utils/string_view_utils.hpp"
4950
5051#define MOD_NAME " [OMT] "
5152
@@ -69,6 +70,9 @@ struct omt_rxtx_state{
6970 video_desc send_desc{};
7071 video_desc recv_desc{};
7172 display *display_device = nullptr ;
73+
74+ OMTQuality quality = OMTQuality_Default;
75+ std::string sender_address;
7276};
7377
7478void omt_should_exit_callback (void *state){
@@ -87,6 +91,40 @@ void set_omt_sender_info(omt_rxtx_state *s){
8791 omt_send_setsenderinformation (s->omt_send_handle .get (), &info);
8892}
8993
94+ void print_help (){
95+ color_printf (" Open Media Transport\n " );
96+ color_printf (" Usage\n " );
97+ color_printf (TERM_BOLD TERM_FG_RED " \t -x omt" TERM_FG_RESET " [:quality=<qual>]\n " TERM_RESET);
98+ color_printf (" \n " );
99+ }
100+
101+ bool parse_params (omt_rxtx_state *s, std::string_view cfg){
102+ while (!cfg.empty ()){
103+ auto tok = tokenize (cfg, ' :' , ' "' );
104+
105+ auto key = tokenize (tok, ' =' );
106+ auto val = tokenize (tok, ' =' );
107+
108+ if (key == " help" ){
109+ print_help ();
110+ return false ;
111+ } else if (key == " quality" ){
112+ if (val == " low" ){
113+ s->quality = OMTQuality_Low;
114+ } else if (val == " medium" ){
115+ s->quality = OMTQuality_Medium;
116+ } else if (val == " high" ){
117+ s->quality = OMTQuality_High;
118+ } else {
119+ log_msg (LOG_LEVEL_FATAL, MOD_NAME " Invalid quality \" %s\"\n " , std::string (val).c_str ());
120+ return false ;
121+ }
122+ }
123+ }
124+
125+ return true ;
126+ }
127+
90128void init_recv (const vrxtx_params *params, omt_rxtx_state *s){
91129 s->display_device = params->display_device ;
92130 log_msg (LOG_LEVEL_INFO, MOD_NAME " Create omt receive with address %s\n " , params->receiver );
@@ -95,7 +133,7 @@ void init_recv(const vrxtx_params *params, omt_rxtx_state *s){
95133}
96134
97135void init_send (omt_rxtx_state *s){
98- s->omt_send_handle .reset (omt_send_create (" UltraGrid" , OMTQuality_Default ));
136+ s->omt_send_handle .reset (omt_send_create (" UltraGrid" , s-> quality ));
99137 set_omt_sender_info (s);
100138 s->send_video_frame .Type = OMTFrameType_Video;
101139 s->send_video_frame .Timestamp = -1 ;
@@ -105,6 +143,10 @@ void *omt_rxtx_create(const vrxtx_params *params, const common_opts *common){
105143 auto s = std::make_unique<omt_rxtx_state>();
106144 s->parent = common->parent ;
107145
146+ if (!parse_params (s.get (), params->protocol_opts )){
147+ return nullptr ;
148+ }
149+
108150 omt_setloggingcallback (omt_log_callback);
109151
110152 if (params->rxtx_mode & MODE_RECEIVER)
0 commit comments