#ifndef MANDELVIDEOGENERATOR_H #define MANDELVIDEOGENERATOR_H #include "Mandel.h" #include "VideoStream.h" #include "Gradient.h" #include "Bitmap.h" #include "VideoRecipe.h" #include struct ExportVideoInfo { /// the viewport at the start of the video mnd::MandelViewport start; /// the viewport at the end of the video mnd::MandelViewport end; /// Info struct to hold further data about the generation /// of mandelbrot images. The Viewport specified in this /// struct is ignored. mnd::MandelInfo mi; /// the gradient to use alm::Gradient gradient; int fps; double zoomSpeed; std::string path; /// bitrate in kbps int bitrate; std::string preset; }; struct MandelVideoProgressInfo { int64_t framesExported; float progress; }; class MandelVideoGenerator { public: using ProgressCallback = std::function; private: const ExportVideoInfo evi; std::vector progressCallbacks; public: MandelVideoGenerator(const ExportVideoInfo& evi); void generate(mnd::MandelGenerator& gen); void addProgressCallback(ProgressCallback pc); private: void callCallbacks(const MandelVideoProgressInfo& evi); Bitmap overlay(const Bitmap& outer, const Bitmap& inner, long bw, long bh, double scale, double oversizeFactor); }; namespace alm { void exportVideo(const VideoRecipe& vr, const std::string& path); } #endif // MANDELVIDEOGENERATOR_H