Credit Andrew for build mods and cineform format
[goodguy/cinelerra.git] / cinelerra-5.1 / plugins / timeavg / timeavg.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 TIMEAVG_H
23 #define TIMEAVG_H
24
25 class TimeAvgMain;
26
27 #include "bchash.inc"
28 #include "pluginvclient.h"
29 #include "timeavgwindow.h"
30 #include "vframe.inc"
31
32 class TimeAvgConfig
33 {
34 public:
35         TimeAvgConfig();
36         void copy_from(TimeAvgConfig *src);
37         int equivalent(TimeAvgConfig *src);
38
39         int frames;
40         int threshold;
41         int border;
42
43         int mode;
44         enum
45         {
46                 AVERAGE,
47                 ACCUMULATE,
48                 REPLACE,
49                 GREATER,
50                 LESS
51         };
52
53         int paranoid;
54         int nosubtract;
55 };
56
57
58 class TimeAvgMain : public PluginVClient
59 {
60 public:
61         TimeAvgMain(PluginServer *server);
62         ~TimeAvgMain();
63
64 // required for all realtime plugins
65         PLUGIN_CLASS_MEMBERS(TimeAvgConfig)
66         int process_buffer(VFrame *frame,
67                 int64_t start_position,
68                 double frame_rate);
69         int is_realtime();
70         void save_data(KeyFrame *keyframe);
71         void read_data(KeyFrame *keyframe);
72         void update_gui();
73         void reset_accum(int w, int h, int color_model);
74         void subtract_accum(VFrame *frame);
75         void add_accum(VFrame *frame);
76         void transfer_accum(VFrame *frame);
77
78
79         VFrame **history;
80 // Frame of history in requested samplerate
81         int64_t *history_frame;
82         int *history_valid;
83         unsigned char *accumulation;
84
85         int history_size;
86 // Starting frame of history in requested framerate
87         int64_t history_start;
88 // When subtraction is disabled, this detects no change for paranoid mode.
89         int64_t prev_frame;
90
91 };
92
93
94 #endif