merged hv7 mod
[goodguy/history.git] / cinelerra-5.1 / plugins / spherecam / spherecam.h
diff --git a/cinelerra-5.1/plugins/spherecam/spherecam.h b/cinelerra-5.1/plugins/spherecam/spherecam.h
new file mode 100644 (file)
index 0000000..cbc6ad2
--- /dev/null
@@ -0,0 +1,273 @@
+
+/*
+ * CINELERRA
+ * Copyright (C) 2017 Adam Williams <broadcast at earthling dot net>
+ * 
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * 
+ */
+
+#ifndef FUSE360_H
+#define FUSE360_H
+
+
+#include "affine.inc"
+#include "bchash.inc"
+#include "guicast.h"
+#include "loadbalance.h"
+#include "pluginvclient.h"
+#include "thread.h"
+
+
+class SphereCamEngine;
+class SphereCamGUI;
+class SphereCamMain;
+class SphereCamText;
+
+#define EYES 2
+
+class SphereCamSlider : public BC_FSlider
+{
+public:
+       SphereCamSlider(SphereCamMain *client, 
+               SphereCamGUI *gui,
+               SphereCamText *text,
+               float *output, 
+               int x, 
+               int y, 
+               float min,
+               float max);
+       int handle_event();
+
+       SphereCamGUI *gui;
+       SphereCamMain *client;
+       SphereCamText *text;
+       float *output;
+};
+
+class SphereCamText : public BC_TextBox
+{
+public:
+       SphereCamText(SphereCamMain *client, 
+               SphereCamGUI *gui,
+               SphereCamSlider *slider,
+               float *output, 
+               int x, 
+               int y);
+       int handle_event();
+
+       SphereCamGUI *gui;
+       SphereCamMain *client;
+       SphereCamSlider *slider;
+       float *output;
+};
+
+
+class SphereCamToggle : public BC_CheckBox
+{
+public:
+       SphereCamToggle(SphereCamMain *client, 
+               int *output, 
+               int x, 
+               int y,
+               const char *text);
+       int handle_event();
+
+       SphereCamMain *client;
+       int *output;
+};
+
+
+class SphereCamMode : public BC_PopupMenu
+{
+public:
+       SphereCamMode(SphereCamMain *plugin,  
+               SphereCamGUI *gui,
+               int x,
+               int y);
+       int handle_event();
+       void create_objects();
+       static int calculate_w(SphereCamGUI *gui);
+       static int from_text(char *text);
+       static const char* to_text(int mode);
+       void update(int mode);
+       SphereCamMain *plugin;
+       SphereCamGUI *gui;
+};
+
+
+class SphereCamGUI : public PluginClientWindow
+{
+public:
+       SphereCamGUI(SphereCamMain *client);
+       ~SphereCamGUI();
+       
+       void create_objects();
+
+       SphereCamMain *client;
+       SphereCamToggle *enabled[EYES];
+       SphereCamSlider *fov_slider[EYES];
+       SphereCamText *fov_text[EYES];
+       SphereCamSlider *radius_slider[EYES];
+       SphereCamText *radius_text[EYES];
+       SphereCamSlider *centerx_slider[EYES];
+       SphereCamText *centerx_text[EYES];
+       SphereCamSlider *centery_slider[EYES];
+       SphereCamText *centery_text[EYES];
+       SphereCamSlider *rotatex_slider[EYES];
+       SphereCamText *rotatex_text[EYES];
+       SphereCamSlider *rotatey_slider[EYES];
+       SphereCamText *rotatey_text[EYES];
+       SphereCamSlider *rotatez_slider[EYES];
+       SphereCamText *rotatez_text[EYES];
+       SphereCamSlider *feather_slider;
+       SphereCamText *feather_text;
+       
+       SphereCamMode *mode;
+       SphereCamToggle *draw_guides;
+};
+
+class SphereCamConfig
+{
+public:
+       SphereCamConfig();
+       int equivalent(SphereCamConfig &that);
+       void copy_from(SphereCamConfig &that);
+       void interpolate(SphereCamConfig &prev, 
+               SphereCamConfig &next, 
+               int64_t prev_frame, 
+               int64_t next_frame, 
+               int64_t current_frame);
+       void boundaries();
+
+
+       int enabled[EYES];
+// degrees 1-359
+       float fov[EYES];
+// radius of each eye 1-150
+       float radius[EYES];
+// center of 2 eyes  0-100
+       float center_x[EYES];
+       float center_y[EYES];
+// rotation  0-359
+       float rotate_x[EYES];
+       float rotate_y[EYES];
+       float rotate_z[EYES];
+// amount to feather eye edges 0-50
+       float feather;
+       int draw_guides;
+       int mode;
+       enum
+       {
+// draw guides only
+               DO_NOTHING,
+// the standard algorithm
+               EQUIRECT,
+// alignment only
+               ALIGN,
+       };
+};
+
+
+
+
+
+class SphereCamPackage : public LoadPackage
+{
+public:
+       SphereCamPackage();
+       int row1, row2;
+};
+
+
+class SphereCamUnit : public LoadClient
+{
+public:
+       SphereCamUnit(SphereCamEngine *engine, SphereCamMain *plugin);
+       ~SphereCamUnit();
+       
+       
+       void process_package(LoadPackage *package);
+       void process_equirect(SphereCamPackage *pkg);
+       void process_align(SphereCamPackage *pkg);
+       double calculate_max_z(double a, double r);
+
+       
+       SphereCamEngine *engine;
+       SphereCamMain *plugin;
+};
+
+class SphereCamEngine : public LoadServer
+{
+public:
+       SphereCamEngine(SphereCamMain *plugin);
+       ~SphereCamEngine();
+       
+       void init_packages();
+       LoadClient* new_client();
+       LoadPackage* new_package();
+       
+       SphereCamMain *plugin;
+};
+
+class SphereCamMain : public PluginVClient
+{
+public:
+       SphereCamMain(PluginServer *server);
+       ~SphereCamMain();
+
+       PLUGIN_CLASS_MEMBERS2(SphereCamConfig)
+       int process_buffer(VFrame *frame,
+               int64_t start_position,
+               double frame_rate);
+       void draw_feather(int left, int right, int eye, int y);
+       int is_realtime();
+       void update_gui();
+       void save_data(KeyFrame *keyframe);
+       void read_data(KeyFrame *keyframe);
+       void calculate_extents();
+       double calculate_max_z(double a, int r);
+
+// config values converted to pixels
+       int w;
+       int h;
+
+// the center of the output regions, shifted by the rotations
+       int output_x[EYES];
+       int output_y[EYES];
+// The output of each eye is split into 2 halves so it can wrap around
+       int out_x1[EYES];
+       int out_y1[EYES];
+       int out_x2[EYES];
+       int out_y2[EYES];
+       int out_x3[EYES];
+       int out_y3[EYES];
+       int out_x4[EYES];
+       int out_y4[EYES];
+// the center of the input regions
+       int input_x[EYES];
+       int input_y[EYES];
+// radius of the input regions for drawing the guide only
+       int radius[EYES];
+// pixels to add to the output regions
+       int feather;
+
+       SphereCamEngine *engine;
+       AffineEngine *affine;
+};
+
+
+
+#endif