tweak zoom/fullscr to remember cwdw scale after fullscr
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / maskengine.h
index 782c3cc7f2322271a12f24a0b17451dd6cbda43c..ff6dacb744c8fa312c661091f210ecaaab3ba9c9 100644 (file)
@@ -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<MaskPoint*> *new_points,
-               ArrayList<MaskPoint*> *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<ArrayList<MaskPoint*>*> point_sets;
-       int mode;
-       int step;
-       double feather;
+       VFrame *mask, *in, *out;
+       MaskEdges edges;
+       MaskPointSets point_sets;
+       ArrayList<float> faders;
+       ArrayList<float> feathers;
+       int step, total_submasks;
        int recalculate;
-       int value;
+       MaskEdge *edge;
+       float r, v;
+       float *psf;
+       int psz;
 };