UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
loopback_video_rxtx Class Reference

#include <loopback.hpp>

Inheritance diagram for loopback_video_rxtx:
Inheritance graph
Collaboration diagram for loopback_video_rxtx:
Collaboration graph

Classes

struct  m_configure_desc
 

Public Member Functions

 loopback_video_rxtx (std::map< std::string, param_u > const &)
 
virtual ~loopback_video_rxtx ()
 
- Public Member Functions inherited from video_rxtx
virtual ~video_rxtx ()
 
virtual void join ()
 
void send (std::shared_ptr< struct video_frame >)
 
virtual void set_audio_spec (const struct audio_desc *desc, int audio_rx_port, int audio_tx_port, bool ipv6)
 
bool supports_receiving ()
 

Private Member Functions

void * receiver_loop ()
 
virtual void send_frame (std::shared_ptr< video_frame >) noexcept override
 

Static Private Member Functions

static void * receiver_thread (void *arg)
 

Private Attributes

virtual void *(*)(void *arg) get_receiver_thread () noexcept
 
struct display * m_display_device
 
std::condition_variable m_frame_ready
 
std::queue< std::shared_ptr< video_frame > > m_frames
 
std::mutex m_lock
 

Additional Inherited Members

- Static Public Member Functions inherited from video_rxtx
static video_rxtx * create (std::string const &name, std::map< std::string, param_u > const &)
 
static const char * get_long_name (std::string const &short_name)
 
static void list (bool full)
 
static void * receiver_thread (void *arg)
 
- Public Attributes inherited from video_rxtx
std::string m_port_id
 
- Protected Member Functions inherited from video_rxtx
 video_rxtx (std::map< std::string, param_u > const &)
 
void check_sender_messages ()
 
- Protected Attributes inherited from video_rxtx
struct common_opts m_common
 
unsigned long long int m_frames_sent
 
struct module m_receiver_mod
 
int m_rxtx_mode
 
struct module m_sender_mod
 
bool m_should_exit = false
 

Detailed Description

Definition at line 51 of file loopback.hpp.

Constructor & Destructor Documentation

◆ loopback_video_rxtx()

loopback_video_rxtx::loopback_video_rxtx ( std::map< std::string, param_u > const & params)

Definition at line 68 of file loopback.cpp.

70{
71 m_display_device = static_cast<struct display *>(params.at("display_device").ptr);
72}
struct display * m_display_device
Definition loopback.hpp:62
This struct represents initialized video display state.
video_rxtx(std::map< std::string, param_u > const &)

References m_display_device.

◆ ~loopback_video_rxtx()

loopback_video_rxtx::~loopback_video_rxtx ( )
virtual

Definition at line 74 of file loopback.cpp.

75{
76}

Member Function Documentation

◆ receiver_loop()

void * loopback_video_rxtx::receiver_loop ( )
private

Definition at line 97 of file loopback.cpp.

98{
99 set_thread_name(__func__);
100 while (!m_should_exit) {
101 unique_lock<mutex> lk(m_lock);
102 m_frame_ready.wait_for(lk, milliseconds(100), [this]{return m_frames.size() > 0;});
103 if (m_frames.size() == 0) {
104 continue;
105 }
106
107 auto frame = m_frames.front();
108 m_frames.pop();
109 lk.unlock();
110 auto new_desc = video_desc_from_frame(frame.get());
111 if (m_configure_desc != new_desc) {
113 LOG(LOG_LEVEL_ERROR) << "Unable to reconfigure display!\n";
114 continue;
115 }
116 m_configure_desc = new_desc;
117 }
118 auto display_f = display_get_frame(m_display_device);
119 memcpy(display_f->tiles[0].data, frame->tiles[0].data, frame->tiles[0].data_len);
121 }
123 return nullptr;
124}
struct video_frame * frame
struct video_desc video_desc_from_frame(const struct video_frame *frame)
Returns struct video_desc from video frame.
std::queue< std::shared_ptr< video_frame > > m_frames
Definition loopback.hpp:64
std::condition_variable m_frame_ready
Definition loopback.hpp:65
std::mutex m_lock
Definition loopback.hpp:66
#define FALSE
#define LOG_LEVEL_ERROR
general errors
Definition debug.h:59
#define LOG(level)
Definition debug.h:313
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.
#define PUTF_BLOCKING
struct video_frame * display_get_frame(struct display *d)
Returns video framebuffer which will be written to.
char * data
Raw tile data. Pointer must be at least 4B aligned.
Definition types.h:287
unsigned int data_len
length of the data
Definition types.h:288
struct tile tiles[FLEXIBLE_ARRAY_MEMBER]
Definition types.h:345
bool m_should_exit
void set_thread_name(const char *name)
Definition thread.c:72
@ VIDEO_NORMAL
normal video (one tile)
Definition types.h:356
bool display_reconfigure(struct display *d, struct video_desc desc, enum video_mode video_mode)
Reconfigure display to new video format.

References tile::data, tile::data_len, display_get_frame(), display_put_frame(), display_reconfigure(), FALSE, frame, LOG, LOG_LEVEL_ERROR, m_display_device, m_frame_ready, m_frames, m_lock, video_rxtx::m_should_exit, PUTF_BLOCKING, set_thread_name(), video_frame::tiles, video_desc_from_frame(), and VIDEO_NORMAL.

Referenced by receiver_thread().

Here is the call graph for this function:

◆ receiver_thread()

void * loopback_video_rxtx::receiver_thread ( void * arg)
staticprivate

Definition at line 78 of file loopback.cpp.

79{
80 auto s = static_cast<loopback_video_rxtx *>(arg);
81 return s->receiver_loop();
82}
void * receiver_loop()
Definition loopback.cpp:97

References receiver_loop().

Here is the call graph for this function:

◆ send_frame()

void loopback_video_rxtx::send_frame ( std::shared_ptr< video_frame > f)
overrideprivatevirtualnoexcept

Implements video_rxtx.

Definition at line 85 of file loopback.cpp.

86{
87 unique_lock<mutex> lk(m_lock);
88 if (m_frames.size() >= BUFF_MAX_LEN) {
89 LOG(LOG_LEVEL_WARNING) << MODULE_NAME << "Max buffer len " <<
90 BUFF_MAX_LEN << " exceeded.\n";
91 }
92 m_frames.push(f);
93 lk.unlock();
94 m_frame_ready.notify_one();
95}
#define LOG_LEVEL_WARNING
less severe errors
Definition debug.h:60
static const int BUFF_MAX_LEN
Definition loopback.cpp:65
static const char * MODULE_NAME
Definition loopback.cpp:66

References BUFF_MAX_LEN, LOG, LOG_LEVEL_WARNING, and MODULE_NAME.

Member Data Documentation

◆ get_receiver_thread

virtual void *(*)(void *arg) loopback_video_rxtx::get_receiver_thread() noexcept
private

Definition at line 126 of file loopback.hpp.

◆ m_display_device

struct display* loopback_video_rxtx::m_display_device
private

Definition at line 62 of file loopback.hpp.

Referenced by loopback_video_rxtx(), and receiver_loop().

◆ m_frame_ready

std::condition_variable loopback_video_rxtx::m_frame_ready
private

Definition at line 65 of file loopback.hpp.

Referenced by receiver_loop().

◆ m_frames

std::queue<std::shared_ptr<video_frame> > loopback_video_rxtx::m_frames
private

Definition at line 64 of file loopback.hpp.

Referenced by receiver_loop().

◆ m_lock

std::mutex loopback_video_rxtx::m_lock
private

Definition at line 66 of file loopback.hpp.

Referenced by receiver_loop().


The documentation for this class was generated from the following files: