Newer
Older
#include <glog/logging.h>
#include <ftl/streamer.hpp>
#include <vector>
#include <zlib.h>
using ftl::Streamer;
using ftl::net::Universe;
using cv::Mat;
using nlohmann::json;
using std::string;
using std::vector;
Streamer::Streamer(Universe &net, json &config) : net_(net), config_(config) {
uri_ = string("ftl://utu.fi/")+(string)config["name"]+string("/rgb-d");
net.createResource(uri_);
}
Streamer::~Streamer() {
}
void Streamer::send(const Mat &rgb, const Mat &depth) {
// Compress the rgb as jpeg.
vector<unsigned char> rgb_buf;
cv::imencode(".jpg", rgb, rgb_buf);
vector<unsigned char> d_buf;
d_buf.resize(depth.step*depth.rows);
z_stream defstream;
defstream.zalloc = Z_NULL;
defstream.zfree = Z_NULL;
defstream.opaque = Z_NULL;
defstream.avail_in = depth.step*depth.rows;
defstream.next_in = (Bytef *)depth.data; // input char array
defstream.avail_out = (uInt)depth.step*depth.rows; // size of output
defstream.next_out = (Bytef *)d_buf.data(); // output char array
deflateInit(&defstream, Z_DEFAULT_COMPRESSION);
deflate(&defstream, Z_FINISH);
deflateEnd(&defstream);
d_buf.resize(defstream.total_out);
//LOG(INFO) << "Depth Size = " << ((float)d_buf.size() / (1024.0f*1024.0f));
net_.publish(uri_, rgb_buf, d_buf);