Skip to content

Commit 9a0f042

Browse files
committed
video_rxtx/omt: Set quality as a param
1 parent 47fb4c0 commit 9a0f042

1 file changed

Lines changed: 43 additions & 1 deletion

File tree

src/video_rxtx/omt.cpp

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
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

7478
void 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+
90128
void 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

97135
void 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

Comments
 (0)