configure.ac add with-cuda/nv, update cakewalk theme, add cuda/plugins=mandel+nbody...
[goodguy/cinelerra.git] / cinelerra-5.1 / plugins / puzzleobj / puzzleobj.h
1 /*
2  * CINELERRA
3  * Copyright (C) 1997-2014 Adam Williams <broadcast at earthling dot net>
4  * 
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  * 
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  * 
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  */
19
20 #ifndef PUZZLEOBJ_H
21 #define PUZZLEOBJ_H
22
23 #include "pluginvclient.h"
24 #include "loadbalance.h"
25 #include "mutex.inc"
26
27 #include "opencv2/core/types.hpp"
28 #include "opencv2/core/mat.hpp"
29 #include "opencv2/calib3d.hpp"
30 #include "opencv2/photo.hpp"
31 #include "opencv2/ximgproc.hpp"
32 #include "opencv2/video/video.hpp"
33
34 #include <vector>
35
36
37 using namespace std;
38 using namespace cv;
39 using namespace cv::ximgproc;
40
41 class PuzzleObjConfig;
42 class PuzzleObj;
43
44
45 class PuzzleObjConfig
46 {
47 public:
48         PuzzleObjConfig();
49         int pixels;
50         int iterations;
51
52         int equivalent(PuzzleObjConfig &that);
53         void copy_from(PuzzleObjConfig &that);
54         void interpolate(PuzzleObjConfig &prev, PuzzleObjConfig &next, 
55                 long prev_frame, long next_frame, long current_frame);
56         void limits();
57 };
58
59 class PuzzleObj : public PluginVClient
60 {
61 public:
62         PuzzleObj(PluginServer *server);
63         ~PuzzleObj();
64         PLUGIN_CLASS_MEMBERS2(PuzzleObjConfig)
65         int is_realtime();
66         void update_gui();
67         void save_data(KeyFrame *keyframe);
68         void read_data(KeyFrame *keyframe);
69         int process_buffer(VFrame *frame, int64_t start_position, double frame_rate);
70         void to_mat(Mat &mat, int mcols, int mrows,
71                 VFrame *inp, int ix,int iy, int mcolor_model);
72
73         int width, height, color_model;
74         VFrame *input, *output;
75
76         int ss_width, ss_height, ss_channels;
77         int ss_pixels, ss_levels, ss_prior, ss_hist_bins;
78
79         Ptr<SuperpixelSEEDS> sseeds;
80         Mat next_img;
81 };
82
83 #endif