// Copyright (c) 2012-2017 VideoStitch SAS // Copyright (c) 2018 stitchEm #ifndef OVERLAY_INPUT_DEF_HPP_ #define OVERLAY_INPUT_DEF_HPP_ #include "config.hpp" #include "curves.hpp" #include "status.hpp" #include "readerInputDef.hpp" #include <string> namespace VideoStitch { class ThreadSafeOstream; namespace Ptv { class Value; } namespace Core { /** * @brief A Overlay setup representation class. */ class VS_EXPORT OverlayInputDefinition : public ReaderInputDefinition { public: virtual ~OverlayInputDefinition(); /** * Clones an OverlayInputDefinition java-style. * @return A similar OverlayInputDefinition. Ownership is given to the caller. */ virtual OverlayInputDefinition* clone() const; /** * Build from a Ptv::Value. * @param value Input value. * @return The parsed OverlayInputDefinition, or NULL on error. */ static OverlayInputDefinition* create(const Ptv::Value& value, bool enforceMandatoryFields = true); virtual Ptv::Value* serialize() const; /** * Comparison operator. */ virtual bool operator==(const OverlayInputDefinition& other) const; /** * Validates that the panorama makes sense. * @param os The sink for error messages. * @return false in case of failure. */ virtual bool validate(std::ostream& os) const; /** * @brief Get the overlay GlobalOrientationApplied status * @return a status as bool */ virtual bool getGlobalOrientationApplied() const; /** * @brief Set the GlobalOrientationApplied status * @param status the new value to set */ virtual void setGlobalOrientationApplied(const bool status); DECLARE_CURVE(ScaleCurve, double) DECLARE_CURVE(TransXCurve, double) DECLARE_CURVE(TransYCurve, double) DECLARE_CURVE(TransZCurve, double) DECLARE_CURVE(RotationCurve, Quaternion<double>) DECLARE_CURVE(AlphaCurve, double) protected: /** * Build with the mandatory fields. The others take default values. */ OverlayInputDefinition(); /** * Disabled, use clone() */ OverlayInputDefinition(const OverlayInputDefinition&) = delete; /** * Disabled, use clone() */ OverlayInputDefinition& operator=(const OverlayInputDefinition&) = delete; /** * Parse from the given ptv. Values not specified are not overridden. * @param diff Input diff. */ Status applyDiff(const Ptv::Value& diff, bool enforceMandatoryFields); private: class Pimpl; Pimpl* const pimpl; // keep the compiler happy using ReaderInputDefinition::operator==; }; } // namespace Core } // namespace VideoStitch #endif