ifw-fgf 1.0.0-pre1
Loading...
Searching...
No Matches
rtmsPublisher.hpp
Go to the documentation of this file.
1
7#ifndef FGF_COM_RTMS_PUBLISHER_HPP_H_
8#define FGF_COM_RTMS_PUBLISHER_HPP_H_
9
10#define BOOST_BIND_NO_PLACEHOLDERS
11
12#include <list>
13
14#include <boost/lockfree/spsc_queue.hpp>
15#include <boost/atomic.hpp>
16
17#include <mudpiif/MudpiSender.hpp>
18
24
25namespace ifw::fgf::common {
26
27 constexpr auto STAT_WINDOW_SIZE = 1000;
28
36 public:
37
38 RtmsPublisher(const std::string address,
39 const int port,
40 const std::string netif = "",
41 const double packet_send_delay = 0);
42
43 virtual ~RtmsPublisher();
44
45 void StartPubThread();
46 void StopPubThread();
47 void StartPublishing();
48 void InitPublisher(size_t raw_image_size, int bytes_per_pixel);
49
51 void Run();
52
53 void ComputeLatency();
54 bool GetComputeLatency() const;
55 void ResetLatency();
56 void GetFirstPacketSentLatency(double& latency, double& stddev, double& variance,
57 int& nb_of_samples);
58 void GetFrameSentLatency(double& latency, double& stddev, double& variance,
59 int& nb_of_samples);
60
61 public:
62 boost::asio::io_context m_ioc;
63 std::string m_address{""};
64 int m_port{0};
65 std::string m_netif{""};
66
67 // Basic MUDPI configuration
68 int m_topicid{10};
69 int m_sampleid{500};
70 std::unique_ptr<ifw::fgf::common::MudpiCreatorParallel> m_mudpi_creator;
71 std::unique_ptr<mudpiif::mudpiSenderJumbo> m_mudpi_sender;
72 static std::atomic<bool> m_stopped; // Flag to stop infinite loop
73
74 // Single-writer/single-reader FIFO queue.
75 static boost::lockfree::spsc_queue<std::shared_ptr<RawImage>,
76 boost::lockfree::capacity<5>> spsc_queue;
77
78 private:
79 double m_packet_send_delay{0};
80 std::chrono::duration<double> m_chrono_sleep_time;
81
83 std::thread m_pub_thread;
85 std::condition_variable m_pub_condvar;
86 std::mutex m_mtx;
87 log4cplus::Logger m_logger;
88
89 // Used to compute the latency.
90 bool m_compute_latency{false};
91 std::mutex m_start_pub_times_mtx;
92 std::list<double> m_start_pub_times;
93
94 std::mutex m_first_packet_sent_latencies_mtx;
95 std::list<double> m_first_packet_sent_latencies;
96
97 std::mutex m_frame_sent_latencies_mtx;
98 std::list<double> m_frame_sent_latencies;
99
100 void ComputeStat(const std::list<double>& samples,
101 double& mean,
102 double& stddev,
103 double& variance,
104 int& nb_of_samples) const;
105
106 };
107}
108
109#endif // FGF_COM_RTMS_PUBLISHER_HPP_H_
RTMS Publisher.
Definition rtmsPublisher.hpp:35
int m_port
Definition rtmsPublisher.hpp:64
virtual ~RtmsPublisher()
Definition rtmsPublisher.cpp:43
int m_sampleid
Definition rtmsPublisher.hpp:69
void StopPubThread()
Definition rtmsPublisher.cpp:210
boost::asio::io_context m_ioc
Definition rtmsPublisher.hpp:62
void GetFirstPacketSentLatency(double &latency, double &stddev, double &variance, int &nb_of_samples)
Definition rtmsPublisher.cpp:256
std::string m_address
Definition rtmsPublisher.hpp:63
void ComputeLatency()
Definition rtmsPublisher.cpp:233
static std::atomic< bool > m_stopped
Definition rtmsPublisher.hpp:72
void StartPublishing()
Definition rtmsPublisher.cpp:222
void ResetLatency()
Definition rtmsPublisher.cpp:241
std::string m_netif
Definition rtmsPublisher.hpp:65
std::unique_ptr< mudpiif::mudpiSenderJumbo > m_mudpi_sender
Definition rtmsPublisher.hpp:71
bool GetComputeLatency() const
Definition rtmsPublisher.cpp:237
void StartPubThread()
Definition rtmsPublisher.cpp:204
void InitPublisher(size_t raw_image_size, int bytes_per_pixel)
Definition rtmsPublisher.cpp:47
std::unique_ptr< ifw::fgf::common::MudpiCreatorParallel > m_mudpi_creator
Definition rtmsPublisher.hpp:70
RtmsPublisher(const std::string address, const int port, const std::string netif="", const double packet_send_delay=0)
Definition rtmsPublisher.cpp:29
void GetFrameSentLatency(double &latency, double &stddev, double &variance, int &nb_of_samples)
Definition rtmsPublisher.cpp:264
static boost::lockfree::spsc_queue< std::shared_ptr< RawImage >, boost::lockfree::capacity< 5 > > spsc_queue
Definition rtmsPublisher.hpp:76
void Run()
Implements infinite loop waiting for new images.
Definition rtmsPublisher.cpp:69
int m_topicid
Definition rtmsPublisher.hpp:68
Frame Grabber Camera Base Class definitions.
Definition binarySemaphore.hpp:43
constexpr auto STAT_WINDOW_SIZE
Definition rtmsPublisher.hpp:27