// Copyright (c) 2012-2017 VideoStitch SAS // Copyright (c) 2018 stitchEm #pragma once #include "libvideostitch/config.hpp" #include "libvideostitch/status.hpp" #include "libvideostitch/ptv.hpp" namespace VideoStitch { namespace Util { class VS_EXPORT Compression { public: // https ://developers.google.com/maps/documentation/utilities/polylinealgorithm // https://gist.github.com/shinyzhu/4617989 static Status polylineEncodeBinaryMask(const int width, const int height, const std::vector<unsigned char>& data, std::string& values); static Status polylineDecodeBinaryMask(const int width, const int height, const std::string& values, std::vector<unsigned char>& data, const bool toBinary = true); static Status polylineEncodeBinaryMask(const int width, const int height, const std::string& data, std::string& values); static Status polylineDecodeBinaryMask(const int width, const int height, const std::string& values, std::string& data); static float binaryDifference(const std::vector<unsigned char>& im0, const std::vector<unsigned char>& im1); // Convert mask <--> encoded masks static Status convertMaskToEncodedMasks(const int width, const int height, const uint32_t* const fullData, std::vector<std::string>& datas); static Status convertEncodedMasksToMask(const int width, const int height, const std::vector<std::string>& datas, std::vector<uint32_t>& fullData); }; } // namespace Util } // namespace VideoStitch