ifw-fgf 2.0.0
 
Loading...
Searching...
No Matches
rtmsPublisher.hpp
Go to the documentation of this file.
1
8
9#ifndef FGF_COM_RTMS_PUBLISHER_HPP_H_
10#define FGF_COM_RTMS_PUBLISHER_HPP_H_
11
12#define BOOST_BIND_NO_PLACEHOLDERS
13
14#include <list>
15
16#include <boost/asio.hpp>
17#include <boost/atomic.hpp>
18#include <boost/lockfree/spsc_queue.hpp>
19
20
21#include <mudpiif/MudpiSender.hpp>
22
28
29namespace ifw::fgf::common {
30
31 constexpr auto STAT_WINDOW_SIZE = 1000;
32
40 public:
41
42 RtmsPublisher(const std::string address,
43 const int port,
44 const std::string netif = "",
45 const double packet_send_delay = 0);
46
47 virtual ~RtmsPublisher();
48
49 void StartPubThread();
50 void StopPubThread();
51 void StartPublishing();
52 void InitPublisher(size_t raw_image_size, int bytes_per_pixel);
53
55 void Run();
56
57 void ComputeLatency();
58 bool GetComputeLatency() const;
59 void ResetLatency();
60 void GetFirstPacketSentLatency(double& latency, double& stddev, double& variance,
61 int& nb_of_samples);
62 void GetFrameSentLatency(double& latency, double& stddev, double& variance,
63 int& nb_of_samples);
64
65 public:
66 boost::asio::io_context m_ioc;
67 std::string m_address{""};
68 int m_port{0};
69 std::string m_netif{""};
70
71 // Basic MUDPI configuration
72 int m_topicid{10};
73 int m_sampleid{500};
74 std::unique_ptr<ifw::fgf::common::MudpiCreatorParallel> m_mudpi_creator;
75 std::unique_ptr<mudpiif::mudpiSenderJumbo> m_mudpi_sender;
76 static std::atomic<bool> m_stopped; // Flag to stop infinite loop
77
78 // Single-writer/single-reader FIFO queue.
79 static boost::lockfree::spsc_queue<std::shared_ptr<RawImage>,
80 boost::lockfree::capacity<5>> spsc_queue;
81
82 private:
83 double m_packet_send_delay{0};
84 std::chrono::duration<double> m_chrono_sleep_time;
85
87 std::thread m_pub_thread;
89 std::condition_variable m_pub_condvar;
90 std::mutex m_mtx;
91 log4cplus::Logger m_logger;
92
93 // Used to compute the latency.
94 bool m_compute_latency{false};
95 std::mutex m_start_pub_times_mtx;
96 std::list<double> m_start_pub_times;
97
98 std::mutex m_first_packet_sent_latencies_mtx;
99 std::list<double> m_first_packet_sent_latencies;
100
101 std::mutex m_frame_sent_latencies_mtx;
102 std::list<double> m_frame_sent_latencies;
103
104 void ComputeStat(const std::list<double>& samples,
105 double& mean,
106 double& stddev,
107 double& variance,
108 int& nb_of_samples) const;
109
110 };
111}
112
113#endif // FGF_COM_RTMS_PUBLISHER_HPP_H_
Binary semaphore class.
int m_port
Definition rtmsPublisher.hpp:68
virtual ~RtmsPublisher()
Definition rtmsPublisher.cpp:44
int m_sampleid
Definition rtmsPublisher.hpp:73
void StopPubThread()
Definition rtmsPublisher.cpp:211
boost::asio::io_context m_ioc
Definition rtmsPublisher.hpp:66
void GetFirstPacketSentLatency(double &latency, double &stddev, double &variance, int &nb_of_samples)
Definition rtmsPublisher.cpp:257
std::string m_address
Definition rtmsPublisher.hpp:67
void ComputeLatency()
Definition rtmsPublisher.cpp:234
static std::atomic< bool > m_stopped
Definition rtmsPublisher.hpp:76
void StartPublishing()
Definition rtmsPublisher.cpp:223
void ResetLatency()
Definition rtmsPublisher.cpp:242
std::string m_netif
Definition rtmsPublisher.hpp:69
std::unique_ptr< mudpiif::mudpiSenderJumbo > m_mudpi_sender
Definition rtmsPublisher.hpp:75
bool GetComputeLatency() const
Definition rtmsPublisher.cpp:238
void StartPubThread()
Definition rtmsPublisher.cpp:205
void InitPublisher(size_t raw_image_size, int bytes_per_pixel)
Definition rtmsPublisher.cpp:48
std::unique_ptr< ifw::fgf::common::MudpiCreatorParallel > m_mudpi_creator
Definition rtmsPublisher.hpp:74
RtmsPublisher(const std::string address, const int port, const std::string netif="", const double packet_send_delay=0)
Definition rtmsPublisher.cpp:30
void GetFrameSentLatency(double &latency, double &stddev, double &variance, int &nb_of_samples)
Definition rtmsPublisher.cpp:265
static boost::lockfree::spsc_queue< std::shared_ptr< RawImage >, boost::lockfree::capacity< 5 > > spsc_queue
Definition rtmsPublisher.hpp:80
void Run()
Implements infinite loop waiting for new images.
Definition rtmsPublisher.cpp:70
int m_topicid
Definition rtmsPublisher.hpp:72
MUDPI Creator public header file.
Definition binarySemaphore.hpp:45
constexpr auto STAT_WINDOW_SIZE
Definition rtmsPublisher.hpp:31
Logging definitions.
Image class for handling images from the camera.