]> git.sesse.net Git - casparcg/commitdiff
2.0.0.2:
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 15 Feb 2011 08:54:21 +0000 (08:54 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 15 Feb 2011 08:54:21 +0000 (08:54 +0000)
- Fixed error message when invalid configuration file.
- FFMPEGProducer tries to fix invalid time_base values.

git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@473 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

common/env.cpp
common/env.h
core/producer/ffmpeg/video/video_decoder.cpp
shell/main.cpp

index 68b2687914b1945acf98484fad24ebc59903f569..3ba7c817b242c86a44a93007651e9ded184f5bb1 100644 (file)
@@ -23,11 +23,11 @@ std::wstring ftemplate_host;
 std::wstring data;\r
 boost::property_tree::ptree pt;\r
 \r
-void do_setup()\r
+void env::initialize(const std::string& filename)\r
 {\r
        std::string initialPath = boost::filesystem::initial_path().file_string();\r
        \r
-       boost::property_tree::read_xml(initialPath + "\\caspar.config", pt);\r
+       boost::property_tree::read_xml(initialPath + "\\" + filename, pt);\r
 \r
        auto paths = pt.get_child("configuration.paths");\r
        media = widen(paths.get("media-path", initialPath + "\\media\\"));\r
@@ -36,41 +36,30 @@ void do_setup()
        ftemplate_host = widen(paths.get("template-host-path", initialPath + "\\template\\cg.fth"));\r
        data = widen(paths.get("data-path", initialPath + "\\data\\"));\r
 }\r
-\r
-void setup()\r
-{\r
-       static boost::once_flag setup_flag = BOOST_ONCE_INIT;\r
-       boost::call_once(do_setup, setup_flag); \r
-}\r
        \r
 const std::wstring& env::media_folder()\r
 {\r
-       setup();\r
        return media;\r
 }\r
 \r
 const std::wstring& env::log_folder()\r
 {\r
-       setup();\r
        return log;\r
 }\r
 \r
 const std::wstring& env::template_folder()\r
 {\r
-       setup();\r
        return ftemplate;\r
 }\r
 \r
 const std::wstring& env::template_host()\r
 {\r
-       setup();\r
        return ftemplate_host;\r
 }\r
 \r
 \r
 const std::wstring& env::data_folder()\r
 {\r
-       setup();\r
        return data;\r
 }\r
 \r
@@ -82,7 +71,6 @@ const std::wstring& env::version()
 \r
 const boost::property_tree::ptree& env::properties()\r
 {\r
-       setup();\r
        return pt;\r
 }\r
 \r
index da43aba7a15d83c27502f7c7c647b179c1c0bd99..25a4e503386df91f18e4583eea5d42da91654be9 100644 (file)
@@ -6,6 +6,7 @@ namespace caspar{
 \r
 struct env\r
 {\r
+       static void initialize(const std::string& filename);\r
        static const std::wstring& media_folder();\r
        static const std::wstring& log_folder();\r
        static const std::wstring& template_folder();\r
index 036db7e2f4051790b77206359956b202c5163084..1a87cfc3e141326ba97049da0fc672689320c0db 100644 (file)
@@ -109,11 +109,12 @@ public:
                , pix_fmt_(codec_context_->pix_fmt)\r
                , desc_(get_pixel_format_desc(pix_fmt_, width_, height_))\r
        {\r
+               if(codec_context_->time_base.num == 1) // Some files give an invalid numerator, try to fix it.\r
+                       codec_context_->time_base.num = static_cast<int>(std::pow(10.0, static_cast<int>(std::log10(static_cast<float>(codec_context_->time_base.den)))-1));\r
                double frame_time = static_cast<double>(codec_context_->time_base.num) / static_cast<double>(codec_context_->time_base.den);\r
                double format_frame_time = 1.0/frame_factory->get_video_format_desc().fps;\r
-               double diff = abs(frame_time - format_frame_time);\r
-               if(diff > 0.0001)\r
-                       BOOST_THROW_EXCEPTION(file_read_error() << msg_info("Invalid video framerate."));\r
+               if(abs(frame_time - format_frame_time) > 0.0001)\r
+                       BOOST_THROW_EXCEPTION(file_read_error() << msg_info("Invalid video framerate.") << arg_value_info(boost::lexical_cast<std::string>(frame_time)));\r
 \r
                if(desc_.pix_fmt == pixel_format::invalid)\r
                {\r
index 11cce76bf8eb507227ae69d02db008431e0bc598..2acb40d4290579894813d485ca3c88a30359be57 100644 (file)
@@ -77,42 +77,44 @@ public:
 };\r
  \r
 int main(int argc, wchar_t* argv[])\r
-{\r
-       // Init FFMPEG\r
-       av_register_all();\r
-       avcodec_init();\r
+{      \r
+       try \r
+       {\r
+               win32_handler_tbb_installer win32_handler_tbb_installer;\r
+               win32_exception::install_handler();\r
 \r
-       // Increase time precision\r
-       timeBeginPeriod(1);\r
+               env::initialize("caspar.config");\r
 \r
-       // Start caspar\r
-       std::wstringstream str;\r
-       str << "CasparCG " << env::version();\r
-       SetConsoleTitle(str.str().c_str());\r
+               // Init FFMPEG\r
+               av_register_all();\r
+               avcodec_init();\r
 \r
-       std::wcout << L"Copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\n" << std::endl;\r
-       std::wcout << L"Starting CasparCG Video Playout Server Ver: " << env::version() << std::endl;\r
+               // Increase time precision\r
+               timeBeginPeriod(1);\r
 \r
-       EnableMenuItem(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE , MF_GRAYED);\r
-       DrawMenuBar(GetConsoleWindow());\r
-       MoveWindow(GetConsoleWindow(), 800, 0, 800, 1000, true);\r
+               // Start caspar\r
+               std::wstringstream str;\r
+               str << "CasparCG " << env::version();\r
+               SetConsoleTitle(str.str().c_str());\r
 \r
-#ifdef _DEBUG\r
-       _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF );\r
-       _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_DEBUG );\r
-       _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_DEBUG );\r
-       _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_DEBUG );\r
+               std::wcout << L"Copyright (c) 2010 Sveriges Television AB <info@casparcg.com>\n" << std::endl;\r
+               std::wcout << L"Starting CasparCG Video Playout Server Ver: " << env::version() << std::endl;\r
 \r
-       MessageBox(nullptr, TEXT("Now is the time to connect for remote debugging..."), TEXT("Debug"), MB_OK | MB_TOPMOST);\r
-#endif\r
+               EnableMenuItem(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE , MF_GRAYED);\r
+               DrawMenuBar(GetConsoleWindow());\r
+               MoveWindow(GetConsoleWindow(), 800, 0, 800, 1000, true);\r
 \r
-       log::add_file_sink(env::log_folder());\r
-       \r
-       win32_handler_tbb_installer win32_handler_tbb_installer;\r
-       win32_exception::install_handler();\r
+       #ifdef _DEBUG\r
+               _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF | _CRTDBG_CHECK_ALWAYS_DF );\r
+               _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_DEBUG );\r
+               _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_DEBUG );\r
+               _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_DEBUG );\r
+\r
+               MessageBox(nullptr, TEXT("Now is the time to connect for remote debugging..."), TEXT("Debug"), MB_OK | MB_TOPMOST);\r
+       #endif\r
+\r
+               log::add_file_sink(env::log_folder());\r
                                \r
-       try \r
-       {\r
                bootstrapper caspar_device;\r
                                \r
                auto dummy = std::make_shared<IO::DummyClientInfo>();\r
@@ -165,7 +167,7 @@ int main(int argc, wchar_t* argv[])
        {\r
                CASPAR_LOG(fatal) << "UNHANDLED EXCEPTION in main thread.";\r
                CASPAR_LOG_CURRENT_EXCEPTION();\r
-               std::wcout << L"Press Any Key To Exit";\r
+               std::wcout << L"Press Any Key To Exit\n";\r
                _getwch();\r
        }       \r
 \r