Select Git revision
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;