UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
hd-rum-decompress.cpp File Reference

decompressing part of transcoding reflector More...

#include <condition_variable>
#include <iostream>
#include <map>
#include <memory>
#include <mutex>
#include <queue>
#include <thread>
#include "hd-rum-translator/hd-rum-decompress.h"
#include "hd-rum-translator/hd-rum-recompress.h"
#include "audio/types.h"
#include "capture_filter.h"
#include "debug.h"
#include "host.h"
#include "rtp/rtp.h"
#include "tv.h"
#include "video.h"
#include "video_display.h"
#include "video_display/pipe.hpp"
#include "video_rxtx.hpp"
#include "video_rxtx/ultragrid_rtp.hpp"
#include "utils/profile_timer.hpp"
Include dependency graph for hd-rum-decompress.cpp:

Go to the source code of this file.

Classes

struct  hd_rum_decompress::state_transcoder_decompress
 

Namespaces

namespace  hd_rum_decompress
 

Functions

void hd_rum_decompress_done (void *state)
 
void * hd_rum_decompress_init (struct module *parent, struct hd_rum_output_conf conf, const char *capture_filter, struct state_recompress *recompress)
 
ssize_t hd_rum_decompress_write (void *state, void *buf, size_t count)
 

Variables

static constexpr int MAX_QUEUE_SIZE = 2
 

Detailed Description

decompressing part of transcoding reflector

Author
Martin Pulec pulec.nosp@m.@ces.nosp@m.net.c.nosp@m.z
Martin Piatka piatk.nosp@m.a@ce.nosp@m.snet..nosp@m.cz

Definition in file hd-rum-decompress.cpp.

Function Documentation

◆ hd_rum_decompress_done()

void hd_rum_decompress_done ( void * state)

Definition at line 250 of file hd-rum-decompress.cpp.

250 {
252
253 s->receiver_thread.join();
254
255 {
256 unique_lock<mutex> l(s->lock);
257 s->received_frame.push({});
258 l.unlock();
259 s->have_frame_cv.notify_one();
260 }
261
262 s->worker_thread.join();
263
264 display_put_frame(s->display, NULL, 0);
265 s->video_rxtx->join();
266
267 delete s->video_rxtx;
268
272
273 delete s;
274}
void ** state
void capture_filter_destroy(struct capture_filter *state)
bool display_put_frame(struct display *d, struct video_frame *frame, long long timeout_ns)
Puts filled video frame. After calling this function, video frame cannot be used.
void display_done(struct display *d)
This function performs cleanup after done.
void display_join(struct display *d)
std::queue< std::shared_ptr< video_frame > > received_frame

References capture_filter_destroy(), hd_rum_decompress::state_transcoder_decompress::capture_filter_state, hd_rum_decompress::state_transcoder_decompress::display, display_done(), display_join(), display_put_frame(), hd_rum_decompress::state_transcoder_decompress::have_frame_cv, ultragrid_rtp_video_rxtx::join(), hd_rum_decompress::state_transcoder_decompress::lock, hd_rum_decompress::state_transcoder_decompress::received_frame, hd_rum_decompress::state_transcoder_decompress::receiver_thread, state, hd_rum_decompress::state_transcoder_decompress::video_rxtx, and hd_rum_decompress::state_transcoder_decompress::worker_thread.

Referenced by hd_rum_translator_deinit().

Here is the call graph for this function:

◆ hd_rum_decompress_init()

void * hd_rum_decompress_init ( struct module * parent,
struct hd_rum_output_conf conf,
const char * capture_filter,
struct state_recompress * recompress )

Definition at line 169 of file hd-rum-decompress.cpp.

170{
171 if (conf.mode == CONFERENCE && strcmp(conf.arg, "help") == 0) {
172 struct display *display = nullptr;
173 const int ret = initialize_video_display(
174 parent, "conference", "reflhelp", 0, nullptr, &display);
175 assert(ret == 1);
176 return nullptr;
177 }
178
180 int force_ip_version = 0;
181
183
185 s->common.force_ip_version = force_ip_version;
187
188 char cfg[128] = "";
189 int ret;
190
191 switch(conf.mode){
192 case NORMAL:
193 snprintf(cfg, sizeof cfg, "%p", s);
194 ret = initialize_video_display(parent, "pipe", cfg, 0, NULL, &s->display);
195 break;
196 case BLEND:
197 snprintf(cfg, sizeof cfg, "pipe:%p", s);
198 ret = initialize_video_display(parent, "blend", cfg, 0, NULL, &s->display);
199 break;
200 case CONFERENCE:
201 snprintf(cfg, sizeof cfg, "pipe:%p#%s", s, conf.arg);
202 ret = initialize_video_display(parent, "conference", cfg, 0, NULL, &s->display);
203 break;
204 }
205
206 assert(ret == 0 && "Unable to initialize auxiliary display");
207
208 map<string, param_u> params;
209
210 // common
211 s->common.parent = parent;
212 params["exporter"].ptr = NULL;
213 params["compression"].str = "none";
214 params["rxtx_mode"].i = MODE_RECEIVER;
215
216 //RTP
217 // should be localhost and RX TX ports the same (here dynamic) in order to work like a pipe
218 params["receiver"].str = "localhost";
219 params["rx_port"].i = 0;
220 params["tx_port"].i = 0;
221 params["common"].ptr = &s->common;
222 params["fec"].str = "none";
223 params["bitrate"].ll = 0;
224 params["video_delay"].vptr = 0;
225
226 // UltraGrid RTP
227 params["decoder_mode"].l = VIDEO_NORMAL;
228 params["display_device"].ptr = s->display;
229
230 try {
231 s->video_rxtx = dynamic_cast<ultragrid_rtp_video_rxtx *>(video_rxtx::create("ultragrid_rtp", params));
232 assert (s->video_rxtx);
233
237
239 log_msg(LOG_LEVEL_ERROR, "Unable to initialize capture filter!\n");
240 return nullptr;
241 }
242 } catch (string const &s) {
243 LOG(LOG_LEVEL_ERROR) << s << "\n";
244 return nullptr;
245 }
246
247 return (void *) s;
248}
int capture_filter_init(struct module *parent, const char *cfg, struct capture_filter **state)
void log_msg(int level, const char *format,...)
Definition debug.cpp:130
#define LOG_LEVEL_ERROR
general errors
Definition debug.h:59
#define LOG(level)
Definition debug.h:313
void display_run_new_thread(struct display *d)
int initialize_video_display(struct module *parent, const char *requested_display, const char *fmt, unsigned int flags, const char *postprocess, struct display **out)
Initializes video display.
@ NORMAL
@ BLEND
@ CONFERENCE
static struct @19 params[100]
#define MODE_RECEIVER
Definition host.h:103
const char * parent
Definition settings.cpp:198
struct module * parent
Definition host.h:171
time_ns_t start_time
Definition host.h:178
int force_ip_version
Definition host.h:176
This struct represents initialized video display state.
enum hd_rum_mode_t mode
static video_rxtx * create(std::string const &name, std::map< std::string, param_u > const &)
static void * receiver_thread(void *arg)
static time_ns_t get_time_in_ns()
Definition tv.h:101
@ VIDEO_NORMAL
normal video (one tile)
Definition types.h:356

References hd_rum_output_conf::arg, BLEND, capture_filter_init(), hd_rum_decompress::state_transcoder_decompress::capture_filter_state, hd_rum_decompress::state_transcoder_decompress::common, CONFERENCE, video_rxtx::create(), hd_rum_decompress::state_transcoder_decompress::display, display_run_new_thread(), common_opts::force_ip_version, get_time_in_ns(), initialize_video_display(), LOG, LOG_LEVEL_ERROR, log_msg(), hd_rum_output_conf::mode, MODE_RECEIVER, NORMAL, params, common_opts::parent, parent, hd_rum_decompress::state_transcoder_decompress::receiver_thread, video_rxtx::receiver_thread(), hd_rum_decompress::state_transcoder_decompress::recompress, common_opts::start_time, VIDEO_NORMAL, hd_rum_decompress::state_transcoder_decompress::video_rxtx, hd_rum_decompress::state_transcoder_decompress::worker(), and hd_rum_decompress::state_transcoder_decompress::worker_thread.

Referenced by main().

Here is the call graph for this function:

◆ hd_rum_decompress_write()

ssize_t hd_rum_decompress_write ( void * state,
void * buf,
size_t count )

Definition at line 134 of file hd-rum-decompress.cpp.

135{
137
139 (char *) buf, count);
140}
struct rtp * m_network_device
Definition rtp.hpp:71
int count
Definition hd-rum.c:44
int rtp_send_raw_rtp_data(struct rtp *session, char *buffer, int buffer_len)
Definition rtp.c:1518

Referenced by writer().

Variable Documentation

◆ MAX_QUEUE_SIZE

int MAX_QUEUE_SIZE = 2
staticconstexpr

Definition at line 65 of file hd-rum-decompress.cpp.