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
This commit is part of merge request !125. Comments created here will be created in the context of that merge request.
......@@ -158,11 +158,17 @@ class Streamer : public ftl::Configurable {
ftl::codecs::device_t hq_devices_;
enum class Quality {
High,
Low,
Any
};
void _process(ftl::rgbd::FrameSet &);
void _cleanUp();
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::StreamPacket &spkt, const ftl::codecs::Packet &pkt, 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, Quality q);
//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);
......
......@@ -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) {
//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) {
// TODO: Each encode could be done in own thread
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){
_transmitPacket(src, blk, 1, hasChan2, true);
_transmitPacket(src, blk, 1, hasChan2, Quality::High);
});
} else {
if (enc2) enc2->reset();
......@@ -431,7 +431,7 @@ void Streamer::_process(ftl::rgbd::FrameSet &fs) {
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){
_transmitPacket(src, blk, 0, hasChan2, true);
_transmitPacket(src, blk, 0, hasChan2, Quality::High);
});
}
}
......@@ -452,14 +452,14 @@ void Streamer::_process(ftl::rgbd::FrameSet &fs) {
// Receiver only waits for channel 1 by default
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){
_transmitPacket(src, blk, 1, hasChan2, false);
_transmitPacket(src, blk, 1, hasChan2, Quality::Low);
});
} else {
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){
_transmitPacket(src, blk, 0, hasChan2, false);
_transmitPacket(src, blk, 0, hasChan2, Quality::Low);
});
}
}
......@@ -525,25 +525,25 @@ void Streamer::_process(ftl::rgbd::FrameSet &fs) {
} 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 = {
frame_no_,
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
//SHARED_LOCK(src->mutex,lk);
auto c = src->clients.begin();
while (c != src->clients.end()) {
const ftl::codecs::preset_t b = (*c).preset;
if ((hqonly && b >= kQualityThreshold) || (!hqonly && b < kQualityThreshold)) {
//++c;
if ((q == Quality::High && b >= kQualityThreshold) || (q == Quality::Low && b < kQualityThreshold)) {
++c;
LOG(INFO) << "INCORRECT QUALITY";
//continue;
continue;
}
try {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment