no longer need ffmpeg patch0 which was for Termux
[goodguy/cinelerra.git] / cinelerra-5.1 / plugins / posterize / posterize.h
1
2 /*
3  * CINELERRA
4  * Copyright (C) 2008-2020 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 POSTERIZE_H
23 #define POSTERIZE_H
24
25 class PosterizeMain;
26 class PosterizeWindow;
27
28 #include "bchash.h"
29 #include "mutex.h"
30 #include "pluginvclient.h"
31 #include <sys/types.h>
32
33 class PosterizeConfig
34 {
35 public:
36         PosterizeConfig();
37         int equivalent(PosterizeConfig &that);
38         void copy_from(PosterizeConfig &that);
39         void interpolate(PosterizeConfig &prev, 
40                 PosterizeConfig &next, 
41                 int64_t prev_frame, 
42                 int64_t next_frame, 
43                 int64_t current_frame);
44         void boundaries();
45         int steps;
46 };
47
48 class PosterizeMain : public PluginVClient
49 {
50 public:
51         PosterizeMain(PluginServer *server);
52         ~PosterizeMain();
53
54 // required for all realtime plugins
55         PLUGIN_CLASS_MEMBERS(PosterizeConfig);
56         int process_buffer(VFrame *frame,
57                 int64_t start_position,
58                 double frame_rate);
59         int is_realtime();
60         void update_gui();
61         void save_data(KeyFrame *keyframe);
62         void read_data(KeyFrame *keyframe);
63 };
64
65
66
67 class PosterizeSlider : public BC_ISlider
68 {
69 public:
70         PosterizeSlider(PosterizeMain *plugin, 
71         PosterizeWindow *gui,
72                 int x, 
73                 int y, 
74         int w,
75                 int *output,
76                 int min,
77                 int max);
78         int handle_event();
79         PosterizeMain *plugin;
80     PosterizeWindow *gui;
81         int *output;
82 };
83
84 class PosterizeText : public BC_TextBox
85 {
86 public:
87     PosterizeText(PosterizeMain *plugin, 
88         PosterizeWindow *gui,
89         int x, 
90         int y, 
91         int w, 
92         int *output);
93     int handle_event();
94         PosterizeMain *plugin;
95     PosterizeWindow *gui;
96         int *output;
97 };
98
99
100
101 class PosterizeWindow : public PluginClientWindow
102 {
103 public:
104         PosterizeWindow(PosterizeMain *plugin);
105         ~PosterizeWindow();
106         
107         void create_objects();
108
109         void update(int do_slider, int do_text);
110
111         PosterizeMain *plugin;
112         PosterizeText *text;
113     PosterizeSlider *slider;
114 };
115
116
117 #endif