upgrade to ffmpeg 4.2, rework mask for speedup
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / maskauto.h
index 1bae9ab8a7a375e3d28887b9fc1becc13d3f3c14..a3baeb442813216fa5c622682ac16d8296054686 100644 (file)
@@ -44,22 +44,60 @@ public:
        float control_x2, control_y2;
 };
 
+class MaskCoord { public: double x, y, z; };
+
+class MaskEdge : public ArrayList<MaskCoord>
+{
+public:
+       MaskCoord &append(double x, double y, double z=0) {
+               MaskCoord &c = ArrayList<MaskCoord>::append();
+               c.x = x;  c.y = y;  c.z = z;
+               return c;
+       }
+       void load(MaskPoints &points, float ofs);
+};
+
+class MaskEdges : public ArrayList<MaskEdge*> {
+public:
+       MaskEdges() {}
+       ~MaskEdges() { remove_all_objects(); }
+};
+
+class MaskPoints : public ArrayList<MaskPoint *>
+{
+public:
+       void clear() { remove_all_objects(); }
+       MaskPoints() {}
+       ~MaskPoints() { clear(); }
+};
+
+class MaskPointSets : public ArrayList<MaskPoints*>
+{
+public:
+       void clear() { remove_all_objects(); }
+       MaskPointSets() {}
+       ~MaskPointSets() { clear(); }
+};
+
+#define FEATHER_MAX 100
+
 class SubMask
 {
 public:
        SubMask(MaskAuto *keyframe, int no);
        ~SubMask();
 
-// Don't use ==
        int operator==(SubMask& ptr);
        int equivalent(SubMask& ptr);
-       void copy_from(SubMask& ptr);
+       void copy_from(SubMask& ptr, int do_name=1);
        void load(FileXML *file);
        void copy(FileXML *file);
-       void dump();
+       void dump(FILE *fp);
 
        char name[BCSTRLEN];
-       ArrayList<MaskPoint*> points;
+       float fader; // -100 - 100
+       float feather; // -100 - 100
+       MaskPoints points;
        MaskAuto *keyframe;
 };
 
@@ -71,6 +109,7 @@ public:
 
        int operator==(Auto &that);
        int operator==(MaskAuto &that);
+       bool is_maskauto() { return true; }
        int identical(MaskAuto *src);
        void load(FileXML *file);
        void copy(int64_t start, int64_t end, FileXML *file, int default_auto);
@@ -79,34 +118,40 @@ public:
        void copy_from(MaskAuto *src);
 // Copy data but not position
        void copy_data(MaskAuto *src);
-       void get_points(ArrayList<MaskPoint*> *points,
+       void get_points(MaskPoints *points,
                int submask);
-       void set_points(ArrayList<MaskPoint*> *points,
+       void set_points(MaskPoints *points,
                int submask);
 
 // Copy parameters to this which differ between ref & src
        void update_parameter(MaskAuto *ref, MaskAuto *src);
 
-       void dump();
+       void dump(FILE *fp);
 // Retrieve submask with clamping
        SubMask* get_submask(int number);
 // Translates all submasks
        void translate_submasks(float translate_x, float translate_y);
 // scale all submasks
        void scale_submasks(int orig_scale, int new_scale);
-
+       int has_active_mask();
 
        ArrayList<SubMask*> masks;
-// These are constant for the entire track
-       int mode;
-       float feather;
-// 0 - 100
-       int value;
        int apply_before_plugins;
        int disable_opengl_masking;
 };
 
+// shader buffer unsized array vec only seems to work for dvec (05/2019)
+class MaskSpot { public: double x, y; };
 
-
+class MaskSpots : public ArrayList<MaskSpot>
+{
+public:
+       MaskSpot &append() { return ArrayList<MaskSpot>::append(); }
+       MaskSpot &append(double x, double y) {
+               MaskSpot &s = append();
+               s.x = x;  s.y = y;
+               return s;
+       }
+};
 
 #endif