#pragma once #include #include #include #include // Frames often consist of: // - seq id // incremental sequential id, gaps in ids can be used to detect loss // - or timestamp // - data // the frame data // eg: //struct ExampleFrame { //int64_t seq_id {0}; //std::vector data; //}; template struct FrameStream2I { virtual ~FrameStream2I(void) {} // get number of available frames // returns -1 if unknown [[nodiscard]] virtual int32_t size(void) = 0; // get next frame // data sharing? -> no, data is copied for each fsr, if concurency supported [[nodiscard]] virtual std::optional pop(void) = 0; // returns true if there are readers (or we dont know) virtual bool push(const FrameType& value) = 0; }; template struct FrameStream2SourceI { virtual ~FrameStream2SourceI(void) {} [[nodiscard]] virtual std::shared_ptr> subscribe(void) = 0; virtual bool unsubscribe(const std::shared_ptr>& sub) = 0; }; template struct FrameStream2SinkI { virtual ~FrameStream2SinkI(void) {} [[nodiscard]] virtual std::shared_ptr> subscribe(void) = 0; virtual bool unsubscribe(const std::shared_ptr>& sub) = 0; };