@@ -72,19 +72,23 @@ using std::string;
7272
7373h264_sdp_video_rxtx::h264_sdp_video_rxtx (const struct vrxtx_params *params,
7474 const struct common_opts *common)
75- : rtp_video_rxtx(params, common),
76- m_parent(common->parent)
75+ : m_parent(common->parent)
7776{
7877 auto opts = params->protocol_opts ;
7978 LOG (LOG_LEVEL_WARNING) << " Warning: SDP support is experimental only. Things may be broken - feel free to report them but the support may be limited.\n " ;
80- m_saved_addr = m_requested_receiver;
8179 m_saved_tx_port = params->tx_port ;
8280
8381 sdp_set_properties (common->receiver , params->send_video , params->send_audio );
8482
8583 if (int ret = sdp_set_options (opts)) {
8684 throw ret == 1 ? 0 : 1 ;
8785 }
86+ m_rtp_common = rtp_rxtx_common_init (params, common);
87+ m_saved_addr = m_rtp_common->requested_receiver ;
88+ }
89+
90+ h264_sdp_video_rxtx::~h264_sdp_video_rxtx () {
91+ rtp_rxtx_common_done (m_rtp_common);
8892}
8993
9094void h264_sdp_video_rxtx::change_address_callback (void *udata, const char *address)
@@ -104,7 +108,7 @@ void h264_sdp_video_rxtx::change_address_callback(void *udata, const char *addre
104108void h264_sdp_video_rxtx::sdp_add_video (codec_t codec)
105109{
106110 const int rc = ::sdp_add_video (
107- rtp_is_ipv6 (m_network_device ), m_saved_tx_port, codec,
111+ rtp_is_ipv6 (m_rtp_common-> network_device ), m_saved_tx_port, codec,
108112 h264_sdp_video_rxtx::change_address_callback, this );
109113 if (rc == -2 ) {
110114 throw ug_runtime_error (" [SDP] Unsupported video codec for SDP (allowed H.264 and JPEG)!\n " );
@@ -123,7 +127,7 @@ void h264_sdp_video_rxtx::sdp_add_video(codec_t codec)
123127void
124128h264_sdp_video_rxtx::send_frame (shared_ptr<video_frame> tx_frame) noexcept
125129{
126- rtp_process_sender_messages ();
130+ rtp_process_sender_messages (m_rtp_common );
127131 if (!is_codec_opaque (tx_frame->color_spec )) {
128132 if (m_sent_compress_change) {
129133 return ;
@@ -149,22 +153,24 @@ h264_sdp_video_rxtx::send_frame(shared_ptr<video_frame> tx_frame) noexcept
149153 }
150154
151155 if (m_sdp_configured_codec == H264) {
152- tx_send_h264 (m_tx, tx_frame.get (), m_network_device);
156+ tx_send_h264 (m_rtp_common->tx , tx_frame.get (),
157+ m_rtp_common->network_device );
153158 } else {
154- tx_send_jpeg (m_tx, tx_frame.get (), m_network_device);
159+ tx_send_jpeg (m_rtp_common->tx , tx_frame.get (),
160+ m_rtp_common->network_device );
155161 }
156- if ((m_rxtx_mode & MODE_RECEIVER) ==
157- 0 ) { // send RTCP (receiver thread would otherwise do this)
162+ if (m_rtp_common-> rxtx_mode & MODE_RECEIVER) {
163+ // send RTCP (receiver thread would otherwise do this)
158164 uint32_t ts = get_std_video_local_mediatime ();
159165 time_ns_t curr_time = get_time_in_ns ();
160- rtp_update (m_network_device , curr_time);
161- rtp_send_ctrl (m_network_device , ts, nullptr , curr_time);
166+ rtp_update (m_rtp_common-> network_device , curr_time);
167+ rtp_send_ctrl (m_rtp_common-> network_device , ts, nullptr , curr_time);
162168
163169 // receive RTCP
164170 struct timeval timeout;
165171 timeout.tv_sec = 0 ;
166172 timeout.tv_usec = 0 ;
167- rtp_recv_r (m_network_device , &timeout, ts);
173+ rtp_recv_r (m_rtp_common-> network_device , &timeout, ts);
168174 }
169175}
170176
0 commit comments