X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Fdescratch%2Fdescratch.h;fp=cinelerra-5.1%2Fplugins%2Fdescratch%2Fdescratch.h;h=b6c726ddd85826243358afd2973ef2a04171a31f;hb=1c43268ae0d6d6fad8beff33946e1115a8ec34b2;hp=0000000000000000000000000000000000000000;hpb=2540fb803c017aefc97be227d8f910507787f366;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/plugins/descratch/descratch.h b/cinelerra-5.1/plugins/descratch/descratch.h new file mode 100644 index 00000000..b6c726dd --- /dev/null +++ b/cinelerra-5.1/plugins/descratch/descratch.h @@ -0,0 +1,187 @@ +#ifndef __DESCRATCH_H__ +#define __DESCRATCH_H__ + +#include "bcbutton.h" +#include "bchash.h" +#include "bcmenuitem.h" +#include "bcpopupmenu.h" +#include "bcslider.h" +#include "bctitle.h" +#include "bctoggle.h" +#include "mutex.h" +#include "overlayframe.h" +#include "pluginvclient.h" + +// so that write_pgm can create grey images of inf +#define SD_NULL 0 +#define SD_EXTREM 0x80 +#define SD_TESTED 0x60 +#define SD_GOOD 0x40 +#define SD_REJECT 0x10 + +#define MODE_NONE 0 +#define MODE_LOW 1 +#define MODE_HIGH 2 +#define MODE_ALL 3 + +class DeScratchConfig; +class DeScratchMain; +class DeScratchWindow; +class DeScratchModeItem; +class DeScratchMode; +class DeScratchISlider; +class DeScratchFSlider; +class DeScratchMark; +class DeScratchReset; + + +class DeScratchConfig +{ +public: + DeScratchConfig(); + ~DeScratchConfig(); + void reset(); + int equivalent(DeScratchConfig &that); + void copy_from(DeScratchConfig &that); + void interpolate(DeScratchConfig &prev, DeScratchConfig &next, + int64_t prev_frame, int64_t next_frame, int64_t current_frame); + + int threshold; + int asymmetry; + int min_width; + int max_width; + float min_len; + float max_len; + float max_angle; + int blur_len; + float gap_len; + int mode_y; + int mode_u; + int mode_v; + int mark; + float ffade; + int border; +}; + +class DeScratchMain : public PluginVClient +{ +public: + DeScratchMain(PluginServer *server); + ~DeScratchMain(); + + PLUGIN_CLASS_MEMBERS(DeScratchConfig) + uint8_t *inf; int sz_inf; + int src_w, src_h; + VFrame *src, *dst; + VFrame *tmp_frame, *blurry; + OverlayFrame *overlay_frame; + int is_realtime(); + void update_gui(); + void save_data(KeyFrame *keyframe); + void read_data(KeyFrame *keyframe); + + void get_extrems_plane(int comp, int thresh); + void remove_min_extrems_plane(int comp, int thresh); + void close_gaps(); + void test_scratches(); + void mark_scratches_plane(int comp, int mask, int value); + void remove_scratches_plane(int comp); + void pass(int comp, int thresh); + void blur(int scale); + void copy(int comp); + void plane_pass(int comp, int mode); + int process_realtime(VFrame *input, VFrame *output); +}; + + +class DeScratchWindow : public PluginClientWindow +{ +public: + DeScratchWindow(DeScratchMain *plugin); + ~DeScratchWindow(); + void update_gui(); + void create_objects(); + + DeScratchMain *plugin; + DeScratchMode *y_mode, *u_mode, *v_mode; + DeScratchISlider *threshold, *asymmetry; + DeScratchISlider *min_width, *max_width; + DeScratchFSlider *min_len, *max_len; + DeScratchISlider *blur_len; + DeScratchFSlider *gap_len; + DeScratchFSlider *max_angle; + DeScratchISlider *border; + DeScratchMark *mark; + DeScratchFSlider *ffade; + DeScratchReset *reset; +}; + +class DeScratchModeItem : public BC_MenuItem +{ +public: + DeScratchModeItem(DeScratchMode *popup, int type, const char *text); + ~DeScratchModeItem(); + int handle_event(); + + DeScratchMode *popup; + int type; +}; + +class DeScratchMode : public BC_PopupMenu +{ +public: + DeScratchMode(DeScratchWindow *win, int x, int y, int *value); + ~DeScratchMode(); + void create_objects(); + int handle_event(); + void update(int v); + void set_value(int v); + + DeScratchWindow *win; + int *value; +}; + +class DeScratchISlider : public BC_ISlider +{ +public: + DeScratchISlider(DeScratchWindow *win, + int x, int y, int w, int min, int max, int *output); + ~DeScratchISlider(); + int handle_event(); + + DeScratchWindow *win; + int *output; +}; + +class DeScratchFSlider : public BC_FSlider +{ +public: + DeScratchFSlider(DeScratchWindow *win, + int x, int y, int w, float min, float max, float *output); + ~DeScratchFSlider(); + int handle_event(); + + DeScratchWindow *win; + float *output; +}; + +class DeScratchMark : public BC_CheckBox +{ +public: + DeScratchMark(DeScratchWindow *win, int x, int y); + ~DeScratchMark(); + int handle_event(); + + DeScratchWindow *win; +}; + +class DeScratchReset : public BC_GenericButton +{ +public: + DeScratchReset(DeScratchWindow *win, int x, int y); + int handle_event(); + + DeScratchWindow *win; +}; + +#endif