]> git.sesse.net Git - casparcg/blobdiff - modules/ffmpeg/producer/filter/filter.h
[ffmpeg] Ported 2.0.7 ffmpeg producer to 2.1.0 while still keeping the usage of the...
[casparcg] / modules / ffmpeg / producer / filter / filter.h
index 8dab6ea150baee8288aa983b9b048933157d717d..86cdba98f5c0ee3b535d02fea75fd570983d78db 100644 (file)
 #include <string>
 #include <vector>
 
+#if defined(_MSC_VER)
+#pragma warning (push)
+#pragma warning (disable : 4244)
+#endif
+extern "C"
+{
+#include <libavutil/pixfmt.h>
+}
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
 struct AVFrame;
-enum AVPixelFormat;
 
 namespace caspar { namespace ffmpeg {
 
@@ -40,6 +51,11 @@ static std::wstring append_filter(const std::wstring& filters, const std::wstrin
        return filters + (filters.empty() ? L"" : L",") + filter;
 }
 
+static std::wstring prepend_filter(const std::wstring& filters, const std::wstring& filter)
+{
+       return filter + (filters.empty() ? L"" : L",") + filters;
+}
+
 class filter : boost::noncopyable
 {
 public:
@@ -51,7 +67,8 @@ public:
                boost::rational<int> in_sample_aspect_ratio,
                AVPixelFormat in_pix_fmt,
                std::vector<AVPixelFormat> out_pix_fmts,
-               const std::string& filtergraph);
+               const std::string& filtergraph,
+               bool multithreaded = true);
        filter(filter&& other);
        filter& operator=(filter&& other);
 
@@ -63,10 +80,13 @@ public:
                        
        static bool is_double_rate(const std::wstring& filters)
        {
-               if(boost::to_upper_copy(filters).find(L"YADIF=1") != std::string::npos)
+               if (boost::to_upper_copy(filters).find(L"YADIF=1") != std::string::npos)
                        return true;
-       
-               if(boost::to_upper_copy(filters).find(L"YADIF=3") != std::string::npos)
+
+               if (boost::to_upper_copy(filters).find(L"YADIF=3") != std::string::npos)
+                       return true;
+
+               if (boost::to_upper_copy(filters).find(L"SEPARATEFIELDS") != std::string::npos)
                        return true;
 
                return false;
@@ -74,20 +94,14 @@ public:
 
        static bool is_deinterlacing(const std::wstring& filters)
        {
-               if(boost::to_upper_copy(filters).find(L"YADIF") != std::string::npos)
-                       return true;    
+               if (boost::to_upper_copy(filters).find(L"YADIF") != std::string::npos)
+                       return true;
+
+               if (boost::to_upper_copy(filters).find(L"SEPARATEFIELDS") != std::string::npos)
+                       return true;
+
                return false;
        }       
-       
-       static int delay(const std::wstring& filters)
-       {
-               return is_double_rate(filters) ? 1 : 1;
-       }
-
-       int delay() const
-       {
-               return delay(filter_str());
-       }
 
        bool is_double_rate() const
        {
@@ -103,4 +117,4 @@ private:
        spl::shared_ptr<implementation> impl_;
 };
 
-}}
\ No newline at end of file
+}}