Skip to content
Snippets Groups Projects
Select Git revision
  • a24cd871b2a77493208b40ede67751a1d666ef6a
  • master default protected
  • feature/SKR
  • censuseval
  • exp/labcolours
  • feature/disconflow
  • exp/multires-sgm
  • chromatest
  • bug/feedrecord
  • feature/375/fullres-fstream
  • feature/poses
  • feature/stereocalib
  • feature/gui2-pch
  • feature/gui2-nanogui-mitsuba
  • feature/use-new-frame
  • feature/depth-touch
  • feature/use10bit
  • bug/optflow-disparity
  • feature/websocket-pose
  • exp/candidatemask
  • feature/sgm-experimental
  • v0.0.6
  • v0.0.5
  • v0.0.4
  • v0.0.3
  • v0.0.2
  • v0.0.1
27 results

sender.cpp

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    sender.cpp 10.68 KiB
    #include <ftl/streams/sender.hpp>
    #include <ftl/codecs/depth_convert_cuda.hpp>
    
    #include <opencv2/cudaimgproc.hpp>
    
    #include "injectors.hpp"
    
    #define LOGURU_REPLACE_GLOG 1
    #include <loguru.hpp>
    
    using ftl::stream::Sender;
    using ftl::codecs::StreamPacket;
    using ftl::codecs::Packet;
    using ftl::codecs::Channels;
    using ftl::codecs::Channel;
    using ftl::codecs::definition_t;
    using ftl::codecs::device_t;
    using ftl::codecs::codec_t;
    using ftl::codecs::format_t;
    using ftl::stream::injectCalibration;
    using ftl::stream::injectPose;
    using ftl::stream::injectConfig;
    
    Sender::Sender(nlohmann::json &config) : ftl::Configurable(config), stream_(nullptr) {
    	do_inject_.test_and_set();
    }
    
    Sender::~Sender() {
        // Delete all encoders
    	for (auto c : state_) {
    		if (c.second.encoder[0]) ftl::codecs::free(c.second.encoder[0]);
    		if (c.second.encoder[1]) ftl::codecs::free(c.second.encoder[1]);
    	}
    }
    
    void Sender::setStream(ftl::stream::Stream*s) {
    	if (stream_) stream_->onPacket(nullptr);
        stream_ = s;
    	stream_->onPacket([this](const ftl::codecs::StreamPacket &spkt, const ftl::codecs::Packet &pkt) {
    		//LOG(INFO) << "SENDER REQUEST : " << (int)spkt.channel;
    
    		//if (state_cb_) state_cb_(spkt.channel, spkt.streamID, spkt.frame_number);
    		if (reqcb_) reqcb_(spkt,pkt);
    
    		// Inject state packets
    		//do_inject_ = true;
    		do_inject_.clear();
    	});
    }
    
    void Sender::onRequest(const ftl::stream::StreamCallback &cb) {
    	reqcb_ = cb;
    }
    
    void Sender::post(const ftl::audio::FrameSet &fs) {
        if (!stream_) return;
    
    	//if (fs.stale) return;
    	//fs.stale = true;
    
    	for (size_t i=0; i<fs.frames.size(); ++i) {
    		if (!fs.frames[i].hasChannel(Channel::Audio)) continue;
    
    		auto &data = fs.frames[i].get<ftl::audio::Audio>(Channel::Audio);
    
    		StreamPacket spkt;
    		spkt.version = 4;
    		spkt.timestamp = fs.timestamp;
    		spkt.streamID = fs.id;
    		spkt.frame_number = i;