]> git.sesse.net Git - casparcg/blob - modules/ffmpeg/producer/filter/filter.h
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
[casparcg] / modules / ffmpeg / producer / filter / filter.h
1 #pragma once\r
2 \r
3 #include <common/memory/safe_ptr.h>\r
4 \r
5 #include <boost/noncopyable.hpp>\r
6 \r
7 #include <string>\r
8 #include <vector>\r
9 \r
10 struct AVFrame;\r
11 enum PixelFormat;\r
12 \r
13 namespace caspar { namespace ffmpeg {\r
14                 \r
15 static bool is_double_rate(const std::wstring& filters)\r
16 {\r
17         if(filters.find(L"YADIF=1") != std::string::npos)\r
18                 return true;\r
19         \r
20         if(filters.find(L"YADIF=3") != std::string::npos)\r
21                 return true;\r
22 \r
23         return false;\r
24 }\r
25 \r
26 static bool is_deinterlacing(const std::wstring& filters)\r
27 {\r
28         if(filters.find(L"YADIF") != std::string::npos)\r
29                 return true;    \r
30         return false;\r
31 }\r
32 \r
33 static std::wstring append_filter(std::wstring& filters, const std::wstring& filter)\r
34 {\r
35         return filters = filters + (filters.empty() ? L"" : L",") + filter;\r
36 }\r
37 \r
38 class filter : boost::noncopyable\r
39 {\r
40 public:\r
41         filter(const std::wstring& filters = L"", const std::vector<PixelFormat>& pix_fmts = std::vector<PixelFormat>());\r
42         filter(filter&& other);\r
43         filter& operator=(filter&& other);\r
44 \r
45         void push(const std::shared_ptr<AVFrame>& frame);\r
46         std::shared_ptr<AVFrame> poll();\r
47         std::vector<safe_ptr<AVFrame>> poll_all();\r
48 \r
49         std::string filter_str() const;\r
50         \r
51 private:\r
52         struct implementation;\r
53         safe_ptr<implementation> impl_;\r
54 };\r
55 \r
56 }}