no longer need ffmpeg patch0 which was for Termux
[goodguy/cinelerra.git] / cinelerra-5.1 / plugins / radialblur / radialblur.h
1
2 /*
3  * CINELERRA
4  * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  */
21
22 #ifndef RADIALBLUR_H
23 #define RADIALBLUR_H
24
25
26 #include <math.h>
27 #include <stdint.h>
28 #include <string.h>
29
30
31 #include "affine.h"
32 #include "bcdisplayinfo.h"
33 #include "clip.h"
34 #include "bchash.h"
35 #include "filexml.h"
36 #include "keyframe.h"
37 #include "language.h"
38 #include "loadbalance.h"
39 #include "pluginvclient.h"
40 #include "theme.h"
41 #include "vframe.h"
42
43 #define RESET_DEFAULT_SETTINGS 10
44 #define RESET_ALL     0
45 #define RESET_XSLIDER 1
46 #define RESET_YSLIDER 2
47 #define RESET_ANGLE   3
48 #define RESET_STEPS   4
49
50 #define XY_MIN      0
51 #define XY_MAX    100
52 #define ANGLE_MIN   0
53 #define ANGLE_MAX 360
54 #define STEPS_MIN   1
55 #define STEPS_MAX 100
56
57 class RadialBlurMain;
58 class RadialBlurWindow;
59 class RadialBlurEngine;
60 class RadialBlurIText;
61 class RadialBlurISlider;
62 class RadialBlurToggle;
63 class RadialBlurReset;
64 class RadialBlurDefaultSettings;
65 class RadialBlurClr;
66
67
68
69
70 class RadialBlurConfig
71 {
72 public:
73         RadialBlurConfig();
74
75         void reset(int clear);
76         int equivalent(RadialBlurConfig &that);
77         void copy_from(RadialBlurConfig &that);
78         void interpolate(RadialBlurConfig &prev,
79                 RadialBlurConfig &next,
80                 long prev_frame,
81                 long next_frame,
82                 long current_frame);
83
84         int x;
85         int y;
86         int steps;
87         int angle;
88         int r;
89         int g;
90         int b;
91         int a;
92 };
93
94
95 class RadialBlurIText : public BC_TumbleTextBox
96 {
97 public:
98         RadialBlurIText(RadialBlurWindow *gui, RadialBlurMain *plugin,
99                 RadialBlurISlider *slider, int *output, int x, int y, int min, int max);
100         ~RadialBlurIText();
101         int handle_event();
102         RadialBlurWindow *gui;
103         RadialBlurMain *plugin;
104         RadialBlurISlider *slider;
105         int *output;
106         int min, max;
107 };
108
109 class RadialBlurISlider : public BC_ISlider
110 {
111 public:
112         RadialBlurISlider(RadialBlurMain *plugin,
113                 RadialBlurIText *text, int *output, int x, int y,
114                 int min, int max, int w);
115         ~RadialBlurISlider();
116         int handle_event();
117         RadialBlurMain *plugin;
118         RadialBlurIText *text;
119         int *output;
120 };
121
122 class RadialBlurToggle : public BC_CheckBox
123 {
124 public:
125         RadialBlurToggle(RadialBlurMain *plugin,
126                 int x,
127                 int y,
128                 int *output,
129                 char *string);
130         int handle_event();
131         RadialBlurMain *plugin;
132         int *output;
133 };
134
135 class RadialBlurReset : public BC_GenericButton
136 {
137 public:
138         RadialBlurReset(RadialBlurMain *plugin, RadialBlurWindow *gui, int x, int y);
139         ~RadialBlurReset();
140         int handle_event();
141         RadialBlurMain *plugin;
142         RadialBlurWindow *gui;
143 };
144
145 class RadialBlurDefaultSettings : public BC_GenericButton
146 {
147 public:
148         RadialBlurDefaultSettings(RadialBlurMain *plugin, RadialBlurWindow *gui, int x, int y, int w);
149         ~RadialBlurDefaultSettings();
150         int handle_event();
151         RadialBlurMain *plugin;
152         RadialBlurWindow *gui;
153 };
154
155 class RadialBlurClr : public BC_Button
156 {
157 public:
158         RadialBlurClr(RadialBlurMain *plugin, RadialBlurWindow *gui, int x, int y, int clear);
159         ~RadialBlurClr();
160         int handle_event();
161         RadialBlurMain *plugin;
162         RadialBlurWindow *gui;
163         int clear;
164 };
165
166 class RadialBlurWindow : public PluginClientWindow
167 {
168 public:
169         RadialBlurWindow(RadialBlurMain *plugin);
170         ~RadialBlurWindow();
171
172         void create_objects();
173         void update_gui(int clear);
174
175
176         RadialBlurIText *x_text;
177         RadialBlurISlider *x_slider;
178         RadialBlurClr *x_Clr;
179
180         RadialBlurIText *y_text;
181         RadialBlurISlider *y_slider;
182         RadialBlurClr *y_Clr;
183
184         RadialBlurIText *angle_text;
185         RadialBlurISlider *angle_slider;
186         RadialBlurClr *angle_Clr;
187
188         RadialBlurIText *steps_text;
189         RadialBlurISlider *steps_slider;
190         RadialBlurClr *steps_Clr;
191
192         RadialBlurToggle *r, *g, *b, *a;
193         RadialBlurMain *plugin;
194         RadialBlurReset *reset;
195         RadialBlurDefaultSettings *default_settings;
196 };
197
198
199
200
201
202
203 class RadialBlurMain : public PluginVClient
204 {
205 public:
206         RadialBlurMain(PluginServer *server);
207         ~RadialBlurMain();
208
209         int process_buffer(VFrame *frame,
210                 int64_t start_position,
211                 double frame_rate);
212         int is_realtime();
213         void save_data(KeyFrame *keyframe);
214         void read_data(KeyFrame *keyframe);
215         void update_gui();
216         int handle_opengl();
217
218         PLUGIN_CLASS_MEMBERS(RadialBlurConfig)
219
220         VFrame *input, *output, *temp;
221         RadialBlurEngine *engine;
222 // Rotate engine only used for OpenGL
223         AffineEngine *rotate;
224 };
225
226 class RadialBlurPackage : public LoadPackage
227 {
228 public:
229         RadialBlurPackage();
230         int y1, y2;
231 };
232
233 class RadialBlurUnit : public LoadClient
234 {
235 public:
236         RadialBlurUnit(RadialBlurEngine *server, RadialBlurMain *plugin);
237         void process_package(LoadPackage *package);
238         RadialBlurEngine *server;
239         RadialBlurMain *plugin;
240 };
241
242 class RadialBlurEngine : public LoadServer
243 {
244 public:
245         RadialBlurEngine(RadialBlurMain *plugin,
246                 int total_clients,
247                 int total_packages);
248         void init_packages();
249         LoadClient* new_client();
250         LoadPackage* new_package();
251         RadialBlurMain *plugin;
252 };
253
254 #endif