Skip to content
Snippets Groups Projects
parsers.cpp 1.34 KiB
Newer Older
#include "parsers.hpp"

#include <loguru.hpp>

#include <ftl/codecs/channels.hpp>
#include <tuple>

ftl::rgbd::Camera ftl::stream::parseCalibration(const ftl::codecs::Packet &pkt) {
	std::tuple<ftl::rgbd::Camera, ftl::codecs::Channel, unsigned int> params;
	auto unpacked = msgpack::unpack((const char*)pkt.data.data(), pkt.data.size());
	unpacked.get().convert(params);

	LOG(INFO) << "Got Calibration: "
			  << std::get<0>(params).width << "x" << std::get<0>(params).height
			  << ", fx: " << std::get<0>(params).fx
			  << ", cx: " << std::get<0>(params).cx
			  << ", cy: " << std::get<0>(params).cy;
	return std::get<0>(params);
}

Eigen::Matrix4d ftl::stream::parsePose(const ftl::codecs::Packet &pkt) {
    Eigen::Matrix4d p;

	if (pkt.codec == ftl::codecs::codec_t::POSE) {
		p = Eigen::Map<Eigen::Matrix4d>((double*)pkt.data.data());
	} else if (pkt.codec == ftl::codecs::codec_t::MSGPACK) {
		auto unpacked = msgpack::unpack((const char*)pkt.data.data(), pkt.data.size());
		std::vector<double> posevec;
		unpacked.get().convert(posevec);
		p = Eigen::Matrix4d(posevec.data());
	}

    return p;
}

std::string ftl::stream::parseConfig(const ftl::codecs::Packet &pkt) {
	std::string cfg;
	auto unpacked = msgpack::unpack((const char*)pkt.data.data(), pkt.data.size());
	unpacked.get().convert(cfg);

	LOG(INFO) << "Config Received: " << cfg;
	return cfg;
}