]> git.sesse.net Git - casparcg/blobdiff - modules/ffmpeg/producer/muxer/display_mode.h
[ffmpeg] Ported 2.0.7 ffmpeg producer to 2.1.0 while still keeping the usage of the...
[casparcg] / modules / ffmpeg / producer / muxer / display_mode.h
index e69fe9109575a3e04f43b67d3748f4f2d65fc1bb..4e3882a4bcb72aafd2e3745f821366ba8ba6e686 100644 (file)
@@ -1,89 +1,53 @@
-#pragma once\r
-\r
-#include <core/video_format.h>\r
-\r
-namespace caspar { namespace ffmpeg {\r
-       \r
-struct display_mode\r
-{\r
-       enum type\r
-       {\r
-               simple,\r
-               duplicate,\r
-               half,\r
-               interlace,\r
-               deinterlace_bob,\r
-               deinterlace_bob_reinterlace,\r
-               deinterlace,\r
-               count,\r
-               invalid\r
-       };\r
-\r
-       static std::wstring print(display_mode::type value)\r
-       {\r
-               switch(value)\r
-               {\r
-                       case simple:                                            return L"simple";\r
-                       case duplicate:                                         return L"duplicate";\r
-                       case half:                                                      return L"half";\r
-                       case interlace:                                         return L"interlace";\r
-                       case deinterlace_bob:                           return L"deinterlace_bob";\r
-                       case deinterlace_bob_reinterlace:       return L"deinterlace_bob_reinterlace";\r
-                       case deinterlace:                                       return L"deinterlace";\r
-                       default:                                                        return L"invalid";\r
-               }\r
-       }\r
-};\r
-\r
-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
-{              \r
-       static const auto epsilon = 2.0;\r
-\r
-       if(in_fps < 20.0 || in_fps > 80.0)\r
-       {\r
-               //if(out_mode != core::field_mode::progressive && in_mode == core::field_mode::progressive)\r
-               //      return display_mode::interlace;\r
-               \r
-               if(out_mode == core::field_mode::progressive && in_mode != core::field_mode::progressive)\r
-               {\r
-                       if(in_fps < 35.0)\r
-                               return display_mode::deinterlace;\r
-                       else\r
-                               return display_mode::deinterlace_bob;\r
-               }\r
-       }\r
-\r
-       if(std::abs(in_fps - out_fps) < epsilon)\r
-       {\r
-               if(in_mode != core::field_mode::progressive && out_mode == core::field_mode::progressive)\r
-                       return display_mode::deinterlace;\r
-               //else if(in_mode == core::field_mode::progressive && out_mode != core::field_mode::progressive)\r
-               //      simple(); // interlace_duplicate();\r
-               else\r
-                       return display_mode::simple;\r
-       }\r
-       else if(std::abs(in_fps/2.0 - out_fps) < epsilon)\r
-       {\r
-               if(in_mode != core::field_mode::progressive)\r
-                       return display_mode::invalid;\r
-\r
-               if(out_mode != core::field_mode::progressive)\r
-                       return display_mode::interlace;\r
-               else\r
-                       return display_mode::half;\r
-       }\r
-       else if(std::abs(in_fps - out_fps/2.0) < epsilon)\r
-       {\r
-               if(out_mode != core::field_mode::progressive)\r
-                       return display_mode::invalid;\r
-\r
-               if(in_mode != core::field_mode::progressive)\r
-                       return display_mode::deinterlace_bob;\r
-               else\r
-                       return display_mode::duplicate;\r
-       }\r
-\r
-       return display_mode::invalid;\r
-}\r
-\r
+/*
+* Copyright (c) 2011 Sveriges Television AB <info@casparcg.com>
+*
+* This file is part of CasparCG (www.casparcg.com).
+*
+* CasparCG is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* CasparCG is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with CasparCG. If not, see <http://www.gnu.org/licenses/>.
+*
+* Author: Robert Nagy, ronag89@gmail.com
+*/
+
+#pragma once
+
+#include <core/video_format.h>
+
+#include <ostream>
+
+namespace caspar { namespace ffmpeg {
+       
+enum class display_mode
+{
+       simple,
+       deinterlace_bob,
+       invalid
+};
+
+template< typename CharT, typename TraitsT >
+std::basic_ostream< CharT, TraitsT >& operator<< (std::basic_ostream<CharT, TraitsT>& o, display_mode value)
+{      
+       switch(value)
+       {
+       case display_mode::simple:                                              return o << L"simple";
+       case display_mode::deinterlace_bob:                             return o << L"deinterlace_bob";
+       default:                                                                                return o << L"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