3 #include <core/video_format.h>
\r
5 namespace caspar { namespace ffmpeg {
\r
16 deinterlace_bob_reinterlace,
\r
22 static std::wstring print(display_mode::type value)
\r
26 case simple: return L"simple";
\r
27 case duplicate: return L"duplicate";
\r
28 case half: return L"half";
\r
29 case interlace: return L"interlace";
\r
30 case deinterlace_bob: return L"deinterlace_bob";
\r
31 case deinterlace_bob_reinterlace: return L"deinterlace_bob_reinterlace";
\r
32 case deinterlace: return L"deinterlace";
\r
33 default: return L"invalid";
\r
38 display_mode::type get_display_mode(const core::field_mode::type in_mode, double in_fps, const core::field_mode::type out_mode, double out_fps)
\r
40 static const auto epsilon = 2.0;
\r
42 if(in_fps < 20.0 || in_fps > 80.0)
\r
44 //if(out_mode != core::field_mode::progressive && in_mode == core::field_mode::progressive)
\r
45 // return display_mode::interlace;
\r
47 if(out_mode == core::field_mode::progressive && in_mode != core::field_mode::progressive)
\r
50 return display_mode::deinterlace;
\r
52 return display_mode::deinterlace_bob;
\r
56 if(std::abs(in_fps - out_fps) < epsilon)
\r
58 if(in_mode != core::field_mode::progressive && out_mode == core::field_mode::progressive)
\r
59 return display_mode::deinterlace;
\r
60 //else if(in_mode == core::field_mode::progressive && out_mode != core::field_mode::progressive)
\r
61 // simple(); // interlace_duplicate();
\r
63 return display_mode::simple;
\r
65 else if(std::abs(in_fps/2.0 - out_fps) < epsilon)
\r
67 if(in_mode != core::field_mode::progressive)
\r
68 return display_mode::invalid;
\r
70 if(out_mode != core::field_mode::progressive)
\r
71 return display_mode::interlace;
\r
73 return display_mode::half;
\r
75 else if(std::abs(in_fps - out_fps/2.0) < epsilon)
\r
77 if(out_mode != core::field_mode::progressive)
\r
78 return display_mode::invalid;
\r
80 if(in_mode != core::field_mode::progressive)
\r
81 return display_mode::deinterlace_bob;
\r
83 return display_mode::duplicate;
\r
86 return display_mode::invalid;
\r