Skip to content

Commit 9c3fc10

Browse files
committed
vrxtx: rm process_sender_message from API
Since the vrxtx modules are no longer subclass of video_rxtx, we can split the handling of the messages by video_rxtx itself (query format) and vrxtx module (RTP specific stuff). As a consequence, the message workaround from previous commit can be dismissed. Single message dispatch is processed in rtp_video_rxtx constructor (also moved from video_rxtx).
1 parent 6d05147 commit 9c3fc10

File tree

11 files changed

+49
-37
lines changed

11 files changed

+49
-37
lines changed

src/control_socket.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -518,10 +518,12 @@ static int process_msg(struct control_state *s, fd_t client_fd, char *message, s
518518
msg_audio->tx_port = msg->tx_port + 2;
519519
}
520520

521-
enum module_class path_sender[] = { MODULE_CLASS_SENDER, MODULE_CLASS_NONE };
521+
enum module_class path_sender_video[] = { MODULE_CLASS_SENDER,
522+
MODULE_CLASS_DATA,
523+
MODULE_CLASS_NONE };
522524
enum module_class path_sender_audio[] = { MODULE_CLASS_AUDIO, MODULE_CLASS_SENDER, MODULE_CLASS_NONE };
523525
memcpy(path_audio, path, sizeof(path_audio));
524-
append_message_path(path, sizeof(path), path_sender);
526+
append_message_path(path, sizeof(path), path_sender_video);
525527
append_message_path(path_audio, sizeof(path_audio), path_sender_audio);
526528

527529
resp =
@@ -546,10 +548,12 @@ static int process_msg(struct control_state *s, fd_t client_fd, char *message, s
546548
struct msg_sender *msg_audio = (struct msg_sender *) malloc(sizeof(struct msg_sender));
547549
memcpy(msg_audio, msg, sizeof(struct msg_sender));
548550

549-
enum module_class path_sender[] = { MODULE_CLASS_SENDER, MODULE_CLASS_NONE };
551+
enum module_class path_sender_video[] = { MODULE_CLASS_SENDER,
552+
MODULE_CLASS_DATA,
553+
MODULE_CLASS_NONE };
550554
enum module_class path_sender_audio[] = { MODULE_CLASS_AUDIO, MODULE_CLASS_SENDER, MODULE_CLASS_NONE };
551555
memcpy(path_audio, path, sizeof(path_audio));
552-
append_message_path(path, sizeof(path), path_sender);
556+
append_message_path(path, sizeof(path), path_sender_video);
553557
append_message_path(path_audio, sizeof(path_audio), path_sender_audio);
554558

555559
resp =

src/video_rxtx.cpp

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,6 @@ video_rxtx::video_rxtx(const char *protocol_name,
117117
pthread_mutex_init(&m_lock, nullptr);
118118
}
119119

120-
static void flush_messages(struct module *mod) {
121-
struct message *m = nullptr;
122-
while ((m = check_message(mod)) != nullptr) {
123-
free_message(m, nullptr);
124-
}
125-
}
126-
127120
video_rxtx::~video_rxtx() noexcept
128121
{
129122
join();
@@ -134,7 +127,6 @@ video_rxtx::~video_rxtx() noexcept
134127
m_impl_funcs->done(m_impl_state);
135128
compress_done(m_compression);
136129
module_done(&m_receiver_mod);
137-
flush_messages(&m_sender_mod);
138130
module_done(&m_sender_mod);
139131

140132
pthread_mutex_destroy(&m_lock);
@@ -202,11 +194,12 @@ void video_rxtx::check_sender_messages() {
202194
r = new_response(RESPONSE_OK,
203195
oss.str().c_str());
204196
}
205-
} else { // delegate to implementations
206-
if (m_impl_funcs->process_sender_message != nullptr) {
207-
r = m_impl_funcs->process_sender_message(
208-
m_impl_state, msg);
209-
}
197+
} else {
198+
char buf[200];
199+
snprintf_ch(buf, "Unexpected sender message type %d",
200+
msg->type);
201+
MSG(WARNING, "%s\n", buf);
202+
r = new_response(RESPONSE_BAD_REQUEST, buf);
210203
}
211204

212205
free_message(msg_external, r);
@@ -264,10 +257,6 @@ video_rxtx::create(string const &proto, const struct vrxtx_params *params,
264257
return nullptr;
265258
}
266259

267-
// The idea of doing that is to display help on '-f ldgm:help' even if UG would exit
268-
// immediately. The encoder is actually created by a message.
269-
ret->check_sender_messages();
270-
271260
int rc = pthread_create(&ret->m_thread_id, nullptr, video_rxtx::sender_thread,
272261
(void *) ret);
273262
assert(rc == 0);

src/video_rxtx.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,6 @@ struct video_rxtx_info {
110110
const struct audio_desc *desc,
111111
int audio_rx_port, int audio_tx_port,
112112
bool ipv6);
113-
struct response *(*process_sender_message)(void *state,
114-
struct msg_sender *);
115113
void *(*receiver_routine)(void *state);
116114
};
117115

src/video_rxtx/h264_rtp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ h264_rtp_video_rxtx::configure_rtsp_server_video()
128128
void
129129
h264_rtp_video_rxtx::send_frame(shared_ptr<video_frame> tx_frame) noexcept
130130
{
131+
rtp_process_sender_messages();
131132
// requestt compress reconfiguration if receivng raw data
132133
if (!is_codec_opaque(tx_frame->color_spec)) {
133134
if (!m_sent_compress_change) {
@@ -276,7 +277,6 @@ static const struct video_rxtx_info h264_video_rxtx_info = {
276277
.send_frame = send_frame,
277278
.join_sender = join,
278279
.set_sender_audio_spec = set_audio_spec,
279-
.process_sender_message = rtp_process_sender_message,
280280
.receiver_routine = nullptr,
281281
};
282282

src/video_rxtx/h264_sdp.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ void h264_sdp_video_rxtx::sdp_add_video(codec_t codec)
123123
void
124124
h264_sdp_video_rxtx::send_frame(shared_ptr<video_frame> tx_frame) noexcept
125125
{
126+
rtp_process_sender_messages();
126127
if (!is_codec_opaque(tx_frame->color_spec)) {
127128
if (m_sent_compress_change) {
128129
return;
@@ -223,7 +224,6 @@ static const struct video_rxtx_info h264_sdp_video_rxtx_info = {
223224
.send_frame = send_frame,
224225
.join_sender = nullptr,
225226
.set_sender_audio_spec = set_audio_spec,
226-
.process_sender_message = rtp_process_sender_message,
227227
.receiver_routine = nullptr,
228228
};
229229

src/video_rxtx/ihdtv.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,6 @@ static const struct video_rxtx_info ihdtv_video_rxtx_info = {
217217
.send_frame = send_frame,
218218
.join_sender = nullptr,
219219
.set_sender_audio_spec = nullptr,
220-
.process_sender_message = nullptr,
221220
.receiver_routine = ihdtv_video_rxtx::receiver_thread,
222221
};
223222

src/video_rxtx/loopback.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,6 @@ static const struct video_rxtx_info loopback_video_rxtx_info = {
176176
.send_frame = send_frame,
177177
.join_sender = nullptr,
178178
.set_sender_audio_spec = nullptr,
179-
.process_sender_message = nullptr,
180179
.receiver_routine = loopback_video_rxtx::receiver_thread,
181180
};
182181

src/video_rxtx/omt.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,6 @@ constexpr video_rxtx_info omt_video_rxtx_info = {
241241
omt_rxtx_send_frame,
242242
nullptr,
243243
nullptr,
244-
nullptr,
245244
omt_rxtx_recv_worker
246245
};
247246

src/video_rxtx/rtp.cpp

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,19 @@ rtp_video_rxtx::process_sender_message(struct msg_sender *msg)
186186
return new_response(RESPONSE_OK, nullptr);
187187
}
188188

189+
void
190+
rtp_video_rxtx::rtp_process_sender_messages()
191+
{
192+
struct message *msg_external = nullptr;
193+
while((msg_external = check_message(&m_rtp_sender_mod))) {
194+
struct response *r = nullptr;
195+
auto *msg = (struct msg_sender *) msg_external;
196+
process_sender_message(msg);
197+
198+
free_message(msg_external, r);
199+
}
200+
}
201+
189202
rtp_video_rxtx::rtp_video_rxtx(const struct vrxtx_params *params,
190203
const struct common_opts *common) :
191204
m_force_ip_version(common->force_ip_version),
@@ -208,11 +221,21 @@ rtp_video_rxtx::rtp_video_rxtx(const struct vrxtx_params *params,
208221
EXIT_FAIL_NETWORK);
209222
}
210223

211-
m_tx = tx_init(params->sender_mod, common->mtu, TX_MEDIA_VIDEO,
224+
module_init_default(&m_rtp_sender_mod);
225+
m_rtp_sender_mod.cls = MODULE_CLASS_DATA;
226+
module_register(&m_rtp_sender_mod, params->sender_mod);
227+
228+
m_tx = tx_init(&m_rtp_sender_mod, common->mtu, TX_MEDIA_VIDEO,
212229
params->fec, common->encryption, params->bitrate_limit);
213230
if (m_tx == nullptr) {
214231
throw ug_runtime_error("Unable to initialize transmitter", EXIT_FAIL_TRANSMIT);
215232
}
233+
234+
// The idea of doing that is to display help on '-f ldgm:help' even if UG would exit
235+
// immediately. The encoder is actually created by a message.
236+
// Also for `-x sdp:help` the message will get discarded and the warning that message quie
237+
rtp_process_sender_messages();
238+
216239
}
217240

218241
rtp_video_rxtx::~rtp_video_rxtx()
@@ -230,6 +253,7 @@ rtp_video_rxtx::~rtp_video_rxtx()
230253
}
231254

232255
delete m_fec_state;
256+
module_done(&m_rtp_sender_mod);
233257
}
234258

235259
void rtp_video_rxtx::display_buf_increase_warning(int size)
@@ -313,7 +337,3 @@ void rtp_video_rxtx::destroy_rtp_device(struct rtp *network_device)
313337
rtp_done(network_device);
314338
}
315339

316-
struct response *rtp_process_sender_message(void *state, struct msg_sender *msg) {
317-
auto *s = static_cast<rtp_video_rxtx*>(state);
318-
return s->process_sender_message(msg);
319-
}

src/video_rxtx/rtp.hpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ class rtp_video_rxtx {
6969
const char *mcast_if, int ttl);
7070
static void destroy_rtp_device(struct rtp * network_devices);
7171
static void display_buf_increase_warning(int size);
72-
struct response *process_sender_message(struct msg_sender *msg);
72+
void rtp_process_sender_messages();
7373

7474
protected:
7575
struct rtp *m_network_device; // ULTRAGRID_RTP
@@ -86,9 +86,13 @@ class rtp_video_rxtx {
8686
int m_rxtx_mode;
8787
bool m_used = false; ///< at least one frame was sent
8888
private:
89+
struct response *process_sender_message(struct msg_sender *msg);
90+
/// This is child of vrxtx sender module to process specific messages.
91+
/// The receiver module is used directly (vrxtx doesn't process any
92+
/// message and also the send/receive handling is not entirely
93+
/// symetric).
94+
struct module m_rtp_sender_mod;
8995
};
9096

91-
struct response *rtp_process_sender_message(void *state, struct msg_sender *);
92-
9397
#endif // VIDEO_RXTX_RTP_H_
9498

0 commit comments

Comments
 (0)