enum class display_mode
{
simple,
- duplicate,
- half,
- interlace,
deinterlace_bob,
- deinterlace_bob_reinterlace,
- deinterlace,
- count,
invalid
};
switch(value)
{
case display_mode::simple: return o << L"simple";
- case display_mode::duplicate: return o << L"duplicate";
- case display_mode::half: return o << L"half";
- case display_mode::interlace: return o << L"interlace";
case display_mode::deinterlace_bob: return o << L"deinterlace_bob";
- case display_mode::deinterlace_bob_reinterlace: return o << L"deinterlace_bob_reinterlace";
- case display_mode::deinterlace: return o << L"deinterlace";
default: return o << L"invalid";
}
}
-static display_mode get_display_mode(const core::field_mode in_mode, double in_fps, const core::field_mode out_mode, double out_fps)
-{
- static const auto epsilon = 2.0;
-
- if(in_fps < 20.0 || in_fps > 80.0)
- {
- //if(out_mode != core::field_mode::progressive && in_mode == core::field_mode::progressive)
- // return display_mode::interlace;
-
- if(out_mode == core::field_mode::progressive && in_mode != core::field_mode::progressive)
- {
- if(in_fps < 35.0)
- return display_mode::deinterlace;
- else
- return display_mode::deinterlace_bob;
- }
- }
-
- if(std::abs(in_fps - out_fps) < epsilon)
- {
- if(in_mode != core::field_mode::progressive && out_mode == core::field_mode::progressive)
- return display_mode::deinterlace;
- //else if(in_mode == core::field_mode::progressive && out_mode != core::field_mode::progressive)
- // simple(); // interlace_duplicate();
- else
- return display_mode::simple;
- }
- else if(std::abs(in_fps/2.0 - out_fps) < epsilon)
- {
- if(in_mode != core::field_mode::progressive)
- return display_mode::invalid;
-
- if(out_mode != core::field_mode::progressive)
- return display_mode::interlace;
- else
- return display_mode::half;
- }
- else if(std::abs(in_fps - out_fps/2.0) < epsilon)
- {
- if(out_mode != core::field_mode::progressive)
- return display_mode::invalid;
-
- if(in_mode != core::field_mode::progressive)
- return display_mode::deinterlace_bob;
- else
- return display_mode::duplicate;
- }
-
- return display_mode::invalid;
+static display_mode get_display_mode(const core::field_mode in_mode)
+{
+ return in_mode == core::field_mode::progressive ? display_mode::simple : display_mode::deinterlace_bob;
}
}}
\ No newline at end of file