Skip to content
Snippets Groups Projects
Commit c72b9119 authored by Nicolas Pope's avatar Nicolas Pope
Browse files

Fix for streamer quality check

parent b8321fb8
No related branches found
No related tags found
2 merge requests!127Implements #196 stream capturing,!125Resolves #159 proxy of sources
...@@ -158,11 +158,17 @@ class Streamer : public ftl::Configurable { ...@@ -158,11 +158,17 @@ class Streamer : public ftl::Configurable {
ftl::codecs::device_t hq_devices_; ftl::codecs::device_t hq_devices_;
enum class Quality {
High,
Low,
Any
};
void _process(ftl::rgbd::FrameSet &); void _process(ftl::rgbd::FrameSet &);
void _cleanUp(); void _cleanUp();
void _addClient(const std::string &source, int N, int rate, const ftl::UUID &peer, const std::string &dest); void _addClient(const std::string &source, int N, int rate, const ftl::UUID &peer, const std::string &dest);
void _transmitPacket(detail::StreamSource *src, const ftl::codecs::Packet &pkt, int chan, bool hasChan2, bool hqonly); void _transmitPacket(detail::StreamSource *src, const ftl::codecs::Packet &pkt, int chan, bool hasChan2, Quality q);
void _transmitPacket(detail::StreamSource *src, const ftl::codecs::StreamPacket &spkt, const ftl::codecs::Packet &pkt, bool hqonly); void _transmitPacket(detail::StreamSource *src, const ftl::codecs::StreamPacket &spkt, const ftl::codecs::Packet &pkt, Quality q);
//void _encodeHQAndTransmit(detail::StreamSource *src, const cv::Mat &, const cv::Mat &, int chunk); //void _encodeHQAndTransmit(detail::StreamSource *src, const cv::Mat &, const cv::Mat &, int chunk);
//void _encodeLQAndTransmit(detail::StreamSource *src, const cv::Mat &, const cv::Mat &, int chunk); //void _encodeLQAndTransmit(detail::StreamSource *src, const cv::Mat &, const cv::Mat &, int chunk);
......
...@@ -195,7 +195,7 @@ void Streamer::add(ftl::rgbd::Group *grp) { ...@@ -195,7 +195,7 @@ void Streamer::add(ftl::rgbd::Group *grp) {
src->addRawCallback([this,s](Source *src, const ftl::codecs::StreamPacket &spkt, const ftl::codecs::Packet &pkt) { src->addRawCallback([this,s](Source *src, const ftl::codecs::StreamPacket &spkt, const ftl::codecs::Packet &pkt) {
//LOG(INFO) << "RAW CALLBACK"; //LOG(INFO) << "RAW CALLBACK";
_transmitPacket(s, spkt, pkt, false); _transmitPacket(s, spkt, pkt, Quality::Any);
}); });
} }
...@@ -423,7 +423,7 @@ void Streamer::_process(ftl::rgbd::FrameSet &fs) { ...@@ -423,7 +423,7 @@ void Streamer::_process(ftl::rgbd::FrameSet &fs) {
// TODO: Each encode could be done in own thread // TODO: Each encode could be done in own thread
if (hasChan2) { if (hasChan2) {
enc2->encode(fs.frames[j].get<cv::Mat>(fs.sources[j]->getChannel()), src->hq_bitrate, [this,src,hasChan2](const ftl::codecs::Packet &blk){ enc2->encode(fs.frames[j].get<cv::Mat>(fs.sources[j]->getChannel()), src->hq_bitrate, [this,src,hasChan2](const ftl::codecs::Packet &blk){
_transmitPacket(src, blk, 1, hasChan2, true); _transmitPacket(src, blk, 1, hasChan2, Quality::High);
}); });
} else { } else {
if (enc2) enc2->reset(); if (enc2) enc2->reset();
...@@ -431,7 +431,7 @@ void Streamer::_process(ftl::rgbd::FrameSet &fs) { ...@@ -431,7 +431,7 @@ void Streamer::_process(ftl::rgbd::FrameSet &fs) {
if (fs.timestamp % (10*ftl::timer::getInterval()) == 0) enc1->reset(); if (fs.timestamp % (10*ftl::timer::getInterval()) == 0) enc1->reset();
enc1->encode(fs.frames[j].get<cv::Mat>(Channel::Colour), src->hq_bitrate, [this,src,hasChan2](const ftl::codecs::Packet &blk){ enc1->encode(fs.frames[j].get<cv::Mat>(Channel::Colour), src->hq_bitrate, [this,src,hasChan2](const ftl::codecs::Packet &blk){
_transmitPacket(src, blk, 0, hasChan2, true); _transmitPacket(src, blk, 0, hasChan2, Quality::High);
}); });
} }
} }
...@@ -452,14 +452,14 @@ void Streamer::_process(ftl::rgbd::FrameSet &fs) { ...@@ -452,14 +452,14 @@ void Streamer::_process(ftl::rgbd::FrameSet &fs) {
// Receiver only waits for channel 1 by default // Receiver only waits for channel 1 by default
if (hasChan2) { if (hasChan2) {
enc2->encode(fs.frames[j].get<cv::Mat>(fs.sources[j]->getChannel()), src->lq_bitrate, [this,src,hasChan2](const ftl::codecs::Packet &blk){ enc2->encode(fs.frames[j].get<cv::Mat>(fs.sources[j]->getChannel()), src->lq_bitrate, [this,src,hasChan2](const ftl::codecs::Packet &blk){
_transmitPacket(src, blk, 1, hasChan2, false); _transmitPacket(src, blk, 1, hasChan2, Quality::Low);
}); });
} else { } else {
if (enc2) enc2->reset(); if (enc2) enc2->reset();
} }
enc1->encode(fs.frames[j].get<cv::Mat>(Channel::Colour), src->lq_bitrate, [this,src,hasChan2](const ftl::codecs::Packet &blk){ enc1->encode(fs.frames[j].get<cv::Mat>(Channel::Colour), src->lq_bitrate, [this,src,hasChan2](const ftl::codecs::Packet &blk){
_transmitPacket(src, blk, 0, hasChan2, false); _transmitPacket(src, blk, 0, hasChan2, Quality::Low);
}); });
} }
} }
...@@ -525,25 +525,25 @@ void Streamer::_process(ftl::rgbd::FrameSet &fs) { ...@@ -525,25 +525,25 @@ void Streamer::_process(ftl::rgbd::FrameSet &fs) {
} else _cleanUp(); } else _cleanUp();
} }
void Streamer::_transmitPacket(StreamSource *src, const ftl::codecs::Packet &pkt, int chan, bool hasChan2, bool hqonly) { void Streamer::_transmitPacket(StreamSource *src, const ftl::codecs::Packet &pkt, int chan, bool hasChan2, Quality q) {
ftl::codecs::StreamPacket spkt = { ftl::codecs::StreamPacket spkt = {
frame_no_, frame_no_,
static_cast<uint8_t>((chan & 0x1) | ((hasChan2) ? 0x2 : 0x0)) static_cast<uint8_t>((chan & 0x1) | ((hasChan2) ? 0x2 : 0x0))
}; };
_transmitPacket(src, spkt, pkt, hqonly); _transmitPacket(src, spkt, pkt, q);
} }
void Streamer::_transmitPacket(StreamSource *src, const ftl::codecs::StreamPacket &spkt, const ftl::codecs::Packet &pkt, bool hqonly) { void Streamer::_transmitPacket(StreamSource *src, const ftl::codecs::StreamPacket &spkt, const ftl::codecs::Packet &pkt, Quality q) {
// Lock to prevent clients being added / removed // Lock to prevent clients being added / removed
//SHARED_LOCK(src->mutex,lk); //SHARED_LOCK(src->mutex,lk);
auto c = src->clients.begin(); auto c = src->clients.begin();
while (c != src->clients.end()) { while (c != src->clients.end()) {
const ftl::codecs::preset_t b = (*c).preset; const ftl::codecs::preset_t b = (*c).preset;
if ((hqonly && b >= kQualityThreshold) || (!hqonly && b < kQualityThreshold)) { if ((q == Quality::High && b >= kQualityThreshold) || (q == Quality::Low && b < kQualityThreshold)) {
//++c; ++c;
LOG(INFO) << "INCORRECT QUALITY"; LOG(INFO) << "INCORRECT QUALITY";
//continue; continue;
} }
try { try {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment