ifw-rtmstools 4.0.0
 
Loading...
Searching...
No Matches
rtms2DdtGateway.hpp
Go to the documentation of this file.
1
7
8#pragma once
9
10#include <chrono>
11#include <cstddef>
12#include <cstdint>
13#include <limits>
14
15#include <ifw/fnd/defs/dataType.hpp>
16
19#include <ifw/rtmslib_llnetio/rtmsReceiver.hpp>
20#include <ifw/rtmslib_llnetio/sampleExtInfo.hpp>
21#include <ifw/rtmslib_llnetio/logger.hpp>
22
24
25 constexpr auto RTMSTOOLS_DDT_NB_SAMPLE = 5;
26
27 inline uint32_t GetDdtDataType(ifw::fnd::datatype::DataType data_type) {
28 switch (data_type) {
29 case ifw::fnd::datatype::DataType::INT16:
30 case ifw::fnd::datatype::DataType::UINT16:
31 return ddt::SINT16;
32 case ifw::fnd::datatype::DataType::INT32:
33 break;
34 case ifw::fnd::datatype::DataType::FLOAT:
35 break;
36 case ifw::fnd::datatype::DataType::INT64:
37 break;
38 case ifw::fnd::datatype::DataType::DOUBLE:
39 break;
40 case ifw::fnd::datatype::DataType::BYTE:
41 return ddt::UINT8;
42 default:
43 return -1;
44 };
45 return -1;
46 }
47
55 class Rtms2DdtGateway: public ifw::rtmslib::RtmsReceiver {
56 public:
57
58 Rtms2DdtGateway(const std::string& receiver_ip,
59 const std::string& interface_name,
60 const int port,
61 const ifw::fnd::datatype::DataType data_type,
62 const int width,
63 const int height,
64 const std::string& ddt_broker_uri,
65 const std::string& ddt_stream,
66 const double ddt_interval,
67 const uint16_t mtu_size,
68 const int32_t topic_id,
69 ifw::rtmslib::ExtendedInfoMode ext_info_mode,
70 std::string log_file = ifw::rtmslib::RTMSLIB_LOG_PROPS,
71 std::string log_level = "ERROR");
72
74
75 virtual void HandleSampleUser(ifw::rtmslib::SampleExtInfo& ext_info,
76 std::vector<uint8_t>& sample_payload);
77
79 void StopReceiving() { RequestStop(); }
80
81 private:
82 bool EnsureGeometry(const ifw::rtmslib::SampleExtInfo& ext_info,
83 std::size_t payload_size);
84 void ResetIntervalStats();
85 void UpdateIntervalStats(double interval_ms);
86
87 int m_width;
88 int m_height;
89 ifw::fnd::datatype::DataType m_datatype;
90 std::string m_ddt_broker_uri;
91 std::string m_ddt_stream;
92 double m_ddt_interval;
93 int m_im_size;
94 std::shared_ptr<DdtImage> m_ddt_image;
95
96 ddt::DdtLogger* m_ddt_logger;
97 std::unique_ptr<ddt::DdtDataPublisher> m_ddt_pub;
98 DdtEncDecImage3D m_encoder;
99 MetaDataElementsImage3D m_ddt_metadata;
100 bool m_initialised{false};
101 bool m_geometry_known{false};
102 bool m_missing_geometry_logged{false};
103 bool m_missing_bii_logged{false};
104
105 // Stats tracking
106 uint32_t m_samples_received{0};
107 uint32_t m_samples_lost{0};
108 uint32_t m_last_sample_id{0};
109 uint64_t m_total_bytes{0};
110 std::chrono::steady_clock::time_point m_start_time{};
111 std::chrono::steady_clock::time_point m_last_sample_time{};
112 double m_min_interval_ms{std::numeric_limits<double>::max()};
113 double m_max_interval_ms{0.0};
114 double m_sum_interval_ms{0.0};
115 uint64_t m_interval_count{0};
116 double m_interval_mean_ms{0.0};
117 double m_interval_m2_ms{0.0};
118
119 };
120}
virtual void HandleSampleUser(ifw::rtmslib::SampleExtInfo &ext_info, std::vector< uint8_t > &sample_payload)
Definition rtms2DdtGateway.cpp:75
ifw::rtmstools::llnetio::ReceiverToolStats GetStatistics() const
Definition rtms2DdtGateway.cpp:229
void StopReceiving()
Definition rtms2DdtGateway.hpp:79
Rtms2DdtGateway(const std::string &receiver_ip, const std::string &interface_name, const int port, const ifw::fnd::datatype::DataType data_type, const int width, const int height, const std::string &ddt_broker_uri, const std::string &ddt_stream, const double ddt_interval, const uint16_t mtu_size, const int32_t topic_id, ifw::rtmslib::ExtendedInfoMode ext_info_mode, std::string log_file=ifw::rtmslib::RTMSLIB_LOG_PROPS, std::string log_level="ERROR")
Definition rtms2DdtGateway.cpp:20
~Rtms2DdtGateway()
Definition rtms2DdtGateway.cpp:68
DdtImage Class Implementation.
Definition ddtImage.cpp:12
constexpr auto RTMSTOOLS_DDT_NB_SAMPLE
Definition rtms2DdtGateway.hpp:25
uint32_t GetDdtDataType(ifw::fnd::datatype::DataType data_type)
Definition rtms2DdtGateway.hpp:27
Definition receiverToolStats.hpp:14