Fix a load of stuff that wasn't being freed on close.
[dcpomatic.git] / src / lib / filter.cc
index bb48805e67b2f32d2e0e9e316857a60c49905f97..9158cba5c10b6741995433ea767c2a3899611920 100644 (file)
@@ -38,7 +38,7 @@ LIBDCP_ENABLE_WARNINGS
 using namespace std;
 
 
-vector<Filter const *> Filter::_filters;
+vector<Filter> Filter::_filters;
 
 
 /** @param i Our id.
@@ -60,7 +60,11 @@ Filter::Filter (string i, string n, string c, string f)
 vector<Filter const *>
 Filter::all ()
 {
-       return _filters;
+       vector<Filter const *> raw;
+       for (auto& filter: _filters) {
+               raw.push_back (&filter);
+       }
+       return raw;
 }
 
 
@@ -100,7 +104,7 @@ Filter::maybe_add (string i, string n, string c, string f)
        }
 
        if (avfilter_get_by_name(check_name.c_str())) {
-               _filters.push_back (new Filter(i, n, c, f));
+               _filters.push_back (Filter(i, n, c, f));
        }
 }
 
@@ -131,7 +135,7 @@ Filter const *
 Filter::from_id (string d)
 {
        auto i = _filters.begin ();
-       while (i != _filters.end() && (*i)->id() != d) {
+       while (i != _filters.end() && i->id() != d) {
                ++i;
        }
 
@@ -139,5 +143,5 @@ Filter::from_id (string d)
                return nullptr;
        }
 
-       return *i;
+       return &(*i);
 }