X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmaskengine.h;h=ff6dacb744c8fa312c661091f210ecaaab3ba9c9;hb=0190f5c29f6834ceea98b1f56ca9115145012758;hp=782c3cc7f2322271a12f24a0b17451dd6cbda43c;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/maskengine.h b/cinelerra-5.1/cinelerra/maskengine.h index 782c3cc7..ff6dacb7 100644 --- a/cinelerra-5.1/cinelerra/maskengine.h +++ b/cinelerra-5.1/cinelerra/maskengine.h @@ -30,6 +30,7 @@ #include "mutex.inc" #include "vframe.inc" +typedef uint16_t temp_t; // temp is A16 class MaskEngine; @@ -37,18 +38,21 @@ class MaskEngine; enum { DO_MASK, - DO_X_FEATHER, - DO_Y_FEATHER, - DO_APPLY + DO_FEATHER_X, + DO_FEATHER_Y, + DO_MASK_BLEND, + DO_APPLY, }; + class MaskPackage : public LoadPackage { public: MaskPackage(); ~MaskPackage(); - int start_x, end_x, start_y, end_y; + int start_x, end_x; + int start_y, end_y; }; class MaskUnit : public LoadClient @@ -57,38 +61,43 @@ public: MaskUnit(MaskEngine *engine); ~MaskUnit(); - void process_package(LoadPackage *package); - void draw_line_clamped(VFrame *frame, - int x1, int y1, int x2, int y2, unsigned char value); - void do_feather(VFrame *output, VFrame *input, - double feather, int start_y, int end_y, int start_x, int end_x); - void blur_strip(double *val_p, double *val_m, - double *dst, double *src, int size, int max); + void clear_mask(VFrame *msk, int a); + void draw_line(int x1, int y1, int x2, int y2); + void draw_fill(); + void draw_feather(int ix1,int iy1, int ix2,int iy2); + void draw_edge(int ix, int iy); + void draw_filled_polygon(MaskEdge &edge); + void feather_x(VFrame *in, VFrame *out); + void feather_y(VFrame *in, VFrame *out); + void mask_blend(VFrame *in, VFrame *mask, float r, float v); + void apply_mask_alpha(VFrame *output, VFrame *mask); - double n_p[5], n_m[5]; - double d_p[5], d_m[5]; - double bd_p[5], bd_m[5]; + void process_package(LoadPackage *package); MaskEngine *engine; - VFrame *temp; + MaskPackage *pkg; + int mask_model; + int bc, fc; + int start_x, end_x; + int start_y, end_y; }; - class MaskEngine : public LoadServer { public: MaskEngine(int cpus); ~MaskEngine(); - void do_mask(VFrame *output, // Position relative to project, compensated for playback direction int64_t start_position_project, MaskAutos *keyframe_set, MaskAuto *keyframe, MaskAuto *default_auto); - int points_equivalent(ArrayList *new_points, - ArrayList *points); + int points_equivalent(MaskPoints *new_points, + MaskPoints *points); + void clear_mask(VFrame *msk, int a); + void draw_point_spot(float r); void delete_packages(); void init_packages(); @@ -96,16 +105,17 @@ public: LoadPackage* new_package(); VFrame *output; -// State of last mask - VFrame *mask; -// Temporary for feathering - VFrame *temp_mask; - ArrayList*> point_sets; - int mode; - int step; - double feather; + VFrame *mask, *in, *out; + MaskEdges edges; + MaskPointSets point_sets; + ArrayList faders; + ArrayList feathers; + int step, total_submasks; int recalculate; - int value; + MaskEdge *edge; + float r, v; + float *psf; + int psz; };