50 , m_rtr_prefix_static(GetStaticRtrPrefix(db_prefix))
51 , m_rtr_prefix_dynamic(GetDynamicRtrPrefix(db_prefix))
53 , m_broker_endpoint(
"zpb.rr://127.0.0.1:5001") {
54 LOG4CPLUS_INFO(m_logger, fmt::format(
"Creating DdtPublisherImage1d '{}'", SI::ID));
58 auto broker_endpoint_path =
DataPointPath(m_rtr_prefix_static +
"/broker_endpoint");
59 if (m_rtr.DataPointExists(broker_endpoint_path)) {
60 m_broker_endpoint = m_rtr.GetDataPoint<std::string>(broker_endpoint_path);
63 auto enabled_path =
DataPointPath(m_rtr_prefix_dynamic +
"/enabled");
64 if (m_rtr.DataPointExists(enabled_path)) {
65 m_enabled = m_rtr.GetDataPoint<
bool>(enabled_path);
70 m_meta_data.meta_data_base.bytes_per_pixel =
sizeof(
typename SI::PixelType);
71 m_meta_data.meta_data_base.number_dimensions = 1;
72 m_meta_data.meta_data_base.complete_flag =
true;
73 m_meta_data.meta_data_base.last_segment =
true;
80 m_meta_data.meta_data_base.byte_order_little_endian =
81 static_cast<bool>(boost::endian::order::native);
83 m_meta_data.meta_data_base.description = SI::ID;
85 if (
typeid(
typename SI::PixelType) ==
typeid(uint8_t)) {
86 m_meta_data.meta_data_base.data_type = ddt::UINT8;
87 }
else if (
typeid(
typename SI::PixelType) ==
typeid(int16_t)) {
88 m_meta_data.meta_data_base.data_type = ddt::SINT16;
89 }
else if (
typeid(
typename SI::PixelType) ==
typeid(int32_t)) {
90 m_meta_data.meta_data_base.data_type = ddt::SINT32;
91 }
else if (
typeid(
typename SI::PixelType) ==
typeid(
float)) {
92 m_meta_data.meta_data_base.data_type = ddt::FLOAT32;
93 }
else if (
typeid(
typename SI::PixelType) ==
typeid(
double)) {
94 m_meta_data.meta_data_base.data_type = ddt::FLOAT64;
95 }
else if (
typeid(
typename SI::PixelType) ==
typeid(uint16_t)) {
96 m_meta_data.meta_data_base.data_type = ddt::UINT16;
97 }
else if (
typeid(
typename SI::PixelType) ==
typeid(uint32_t)) {
98 m_meta_data.meta_data_base.data_type = ddt::UINT32;
103 m_meta_data.array_dimensions = std::to_string(SI::WIDTH);
107 m_ddt_publisher = std::make_unique<ddt::DdtDataPublisher>(m_logger);
108 m_ddt_publisher->set_topic_id(m_enc_dec.get_topic_id());
109 int bytes_per_sample = SI::WIDTH *
sizeof(
typename SI::PixelType);
110 int samples_in_buffer = 10;
111 m_ddt_publisher->SetBufferSize(bytes_per_sample, samples_in_buffer);
114 m_ddt_publisher->RegisterPublisher(m_broker_endpoint, std::string(SI::ID),
false);
117 fmt::format(
"Failed to register DDT Publisher: {} against DDT Broker: {} "
118 "Check Broker URI, and ensure that Broker process is running.",
137 void Publish(uint32_t sample_id,
const uint8_t* data_ptr, uint32_t elements) {
138 m_meta_data.meta_data_base.utc_timestamp = m_enc_dec.get_utc_timestamp();
139 m_enc_dec.Encode(m_meta_data);
140 std::vector<uint8_t> metadata = m_enc_dec.get_meta_data();
142 auto data_bytes = elements *
sizeof(
typename SI::PixelType);
143 m_ddt_publisher->WriteData(
144 sample_id, data_ptr, data_bytes, metadata.data(), metadata.size());
145 m_ddt_publisher->PublishData();