25#include <absl/status/status.h>
26#include <mediapipe/framework/port/status_macros.h>
27#include <physiology/modules/messages/status.pb.h>
28#include <physiology/modules/messages/metrics.pb.h>
29#include <opencv2/core/mat.hpp>
30#include <smartspectra/container/background_container.hpp>
31#include <glog/logging.h>
33namespace presage::smartspectra::ipc {
45template<container::settings::IntegrationMode TIntegrationMode>
48 using BackgroundContainer =
50 presage::platform_independence::DeviceType::Cpu,
51 smartspectra::container::settings::OperationMode::Continuous,
64 virtual absl::Status
SwapContainer(std::shared_ptr<BackgroundContainer> new_container) {
65 container_ = new_container;
70 return absl::OkStatus();
78 return container_.get();
86 virtual absl::Status
WriteStatus(
const presage::physiology::StatusValue& status) = 0;
95 const presage::physiology::MetricsBuffer& metrics,
104 virtual absl::Status
WriteEdgeMetrics(
const presage::physiology::Metrics& metrics, int64_t timestamp_us) = 0;
112 virtual absl::Status
WriteFrame(
const cv::Mat& frame, int64_t timestamp_us) = 0;
141 return absl::OkStatus();
145 MP_RETURN_IF_ERROR(container_->SetOnStatusChange(
146 [
this](presage::physiology::StatusValue status_value) {
147 return WriteStatus(status_value);
153 MP_RETURN_IF_ERROR(container_->SetOnCoreMetricsOutput(
154 [
this](presage::physiology::MetricsBuffer metrics, int64_t timestamp_us) {
155 return WriteCoreMetrics(metrics, timestamp_us);
160 MP_RETURN_IF_ERROR(container_->SetOnEdgeMetricsOutput(
161 [
this](presage::physiology::Metrics metrics, int64_t timestamp_us) {
162 return WriteEdgeMetrics(metrics, timestamp_us);
167 MP_RETURN_IF_ERROR(container_->SetOnVideoOutput(
168 [
this](cv::Mat& frame, int64_t timestamp_us) {
169 return WriteFrame(frame, timestamp_us);
173 return absl::OkStatus();
183 return absl::OkStatus();
186 auto status_code = container_->GetStatusCode();
187 auto current_time = std::chrono::system_clock::now().time_since_epoch();
188 int64_t timestamp = std::chrono::duration_cast<std::chrono::microseconds>(current_time).count();
190 physiology::StatusValue status_value;
191 status_value.set_value(status_code);
192 status_value.set_timestamp(timestamp);
198 std::shared_ptr<BackgroundContainer> container_;
200 int64_t GetCurrentTimestampUs() {
201 using namespace std::chrono;
202 return duration_cast<microseconds>(system_clock::now().time_since_epoch()).count();
Container for background thread processing.
Definition background_container.hpp:40
Definition ipc_stream_writer.hpp:46
virtual bool IsOperational() const =0
virtual absl::Status Flush()=0
virtual absl::Status SendInitialStatus()
Definition ipc_stream_writer.hpp:181
virtual absl::Status WriteCoreMetrics(const presage::physiology::MetricsBuffer &metrics, int64_t timestamp_us)=0
virtual absl::Status WriteStatus(const presage::physiology::StatusValue &status)=0
const BackgroundContainer * GetContainer() const
Definition ipc_stream_writer.hpp:77
virtual absl::Status RegisterCallbacks()
Definition ipc_stream_writer.hpp:139
virtual absl::Status WriteFrame(const cv::Mat &frame, int64_t timestamp_us)=0
virtual absl::Status WriteEdgeMetrics(const presage::physiology::Metrics &metrics, int64_t timestamp_us)=0
virtual absl::Status SwapContainer(std::shared_ptr< BackgroundContainer > new_container)
Definition ipc_stream_writer.hpp:64