12#include <condition_variable>
20#include <boost/endian/arithmetic.hpp>
22#include <fmt/format.h>
24#include <llnetio/ipv4.hpp>
25#include <llnetio/mudpi/io.hpp>
26#include <llnetio/rtms/io.hpp>
27#include <llnetio/rtms/rtms.hpp>
28#include <llnetio/udpSocket.hpp>
29#include <llnetio/mockSocket.hpp>
75 const std::string& interface_name,
77 const ifw::fnd::datatype::DataType data_type,
94 std::vector<uint8_t>& sample_payload,
95 std::chrono::nanoseconds timeout);
101 std::vector<uint8_t>& sample_payload) = 0;
113 void EnsureInitialised();
116 std::string m_receiver_ip;
117 std::string m_interface_name;
119 ifw::fnd::datatype::DataType m_data_type;
121 std::once_flag m_init_once;
124 uint16_t m_leader_extinfo_capacity{
128 int64_t m_samples_received{0};
129 int64_t m_sample_failures{0};
130 int64_t m_sample_timeouts{0};
131 std::chrono::steady_clock::time_point m_last_status_log{};
133 std::unique_ptr<llnetio::rtms::Receiver> m_rtms_receiver;
134 std::string m_last_receive_error;
135 std::chrono::steady_clock::time_point m_last_loss_log{};
136 std::chrono::steady_clock::time_point m_last_sample_log{};
137 std::chrono::steady_clock::time_point m_last_extinfo_log{};
139 int64_t m_lost_frames{0};
140 unsigned int m_sample_id{0};
141 int64_t m_extinfo_mismatches{0};
142 int m_consecutive_leader_timeouts{0};
144 llnetio::UdpRxSocket* m_udp_sock;
145 std::unique_ptr<llnetio::mudpi::Receiver> m_mudpi;
147 std::atomic<bool> m_ongoing_recording;
148 std::mutex m_recording_mutex;
149 std::condition_variable m_recording_cv;
150 bool m_dynamic_sample_bytes_logged{
false};
151 bool m_missing_bpp_logged{
false};
153 void ResetTransport();
154 void LogStatus(
bool force =
false);
155 bool UpdateGeometryFromExtInfo(
const SampleExtInfo& ext_info);
156 std::size_t ComputeSampleBytesHint()
const;
SampleFailureKind
Definition rtmsReceiver.hpp:37
virtual void StopReceiver()
Signal to RTMS receiver to stop execution.
Definition rtmsReceiver.cpp:56
void ReceiveLoop()
Receiver loop running until RtmsReceiver::StopReceiver() is invoked.
Definition rtmsReceiver.cpp:87
bool ReceiveSample(SampleExtInfo &ext_info, std::vector< uint8_t > &sample_payload, std::chrono::nanoseconds timeout)
Receives one sample. Returns true if a sample received within the timeout.
Definition rtmsReceiver.cpp:318
ReceiverConfig GetConfig() const
Definition rtmsReceiver.cpp:607
ifw::fnd::datatype::DataType GetDataType() const
Definition rtmsReceiver.cpp:603
virtual void HandleSampleUser(SampleExtInfo &ext_info, std::vector< uint8_t > &sample_payload)=0
User provided method to handle an RTMS Sample received.
void RequestStop()
Definition rtmsReceiver.cpp:52
virtual ~RtmsReceiver()
Definition rtmsReceiver.cpp:83
static std::atomic< bool > s_execute
Definition rtmsReceiver.hpp:65
int64_t GetSampleId() const
Definition rtmsReceiver.cpp:599
int64_t GetLostFramesCount() const
Definition rtmsReceiver.cpp:595
RtmsReceiver(const std::string &receiver_ip, const std::string &interface_name, const int port, const ifw::fnd::datatype::DataType data_type, const ReceiverConfig &rcv_cfg=ReceiverConfig())
RTMS Receiver class.
Definition rtmsReceiver.cpp:63
Definition sampleExtInfo.hpp:33
Common utilities for RTMS Lib.
Definition common.cpp:21
SampleFailureKind
Definition rtmsReceiver.hpp:37
@ None
Definition rtmsReceiver.hpp:38
@ SampleError
Definition rtmsReceiver.hpp:40
@ Timeout
Definition rtmsReceiver.hpp:39
constexpr std::size_t SIZE_SAMPLE_EXT_INFO
Definition sampleExtInfo.hpp:22
ExtendedInfoMode
Definition common.hpp:29
@ None
Leader packets carry no extended info.
Definition common.hpp:30
void IfwRtmsLibStopExecution(int signum)
Definition rtmsReceiver.hpp:161
Definition rtmsReceiver.hpp:43
bool checksum_force_ignore
Definition rtmsReceiver.hpp:49
int32_t width
Definition rtmsReceiver.hpp:47
int32_t height
Definition rtmsReceiver.hpp:48
uint16_t mtu_size
Definition rtmsReceiver.hpp:46
std::size_t rxbuf_size
Definition rtmsReceiver.hpp:44
ExtendedInfoMode ext_info_mode
Expected leader extended-info layout; must match the sender configuration.
Definition rtmsReceiver.hpp:51
int32_t topic_id
Definition rtmsReceiver.hpp:45