]> git.sesse.net Git - casparcg/commitdiff
Moved flash player global mutex serialization to put_Movie instead of around CoInitia...
authorHelge Norberg <helge.norberg@gmail.com>
Tue, 5 Aug 2014 11:57:04 +0000 (13:57 +0200)
committerHelge Norberg <helge.norberg@gmail.com>
Tue, 5 Aug 2014 11:57:04 +0000 (13:57 +0200)
modules/flash/producer/flash_producer.cpp

index 33c1e1012c7052007bdff1ba34d9bd278a1cdaa3..ef10d00b1102b3cd9526bde4cb804a689fa3d4c3 100644 (file)
@@ -207,17 +207,14 @@ public:
                graph_->set_color("tick-time", diagnostics::color(0.0f, 0.6f, 0.9f));\r
                graph_->set_color("param", diagnostics::color(1.0f, 0.5f, 0.0f));\r
 \r
-               lock(get_global_init_destruct_mutex(), [this]\r
-               {\r
 \r
-                       CoInitialize(nullptr);\r
+               CoInitialize(nullptr);\r
 \r
-                       if(FAILED(CComObject<caspar::flash::FlashAxContainer>::CreateInstance(&ax_)))\r
-                               BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(narrow(print()) + " Failed to create FlashAxContainer"));\r
+               if(FAILED(CComObject<caspar::flash::FlashAxContainer>::CreateInstance(&ax_)))\r
+                       BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(narrow(print()) + " Failed to create FlashAxContainer"));\r
                \r
-                       if(FAILED(ax_->CreateAxControl()))\r
-                               BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(narrow(print()) + " Failed to Create FlashAxControl"));\r
-               });\r
+               if(FAILED(ax_->CreateAxControl()))\r
+                       BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(narrow(print()) + " Failed to Create FlashAxControl"));\r
 \r
                ax_->set_print([this]{return print();});\r
                \r
@@ -228,8 +225,14 @@ public:
                if(FAILED(spFlash->put_Playing(true)) )\r
                        BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(narrow(print()) + " Failed to start playing Flash"));\r
 \r
-               if(FAILED(spFlash->put_Movie(CComBSTR(filename.c_str()))))\r
-                       BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(narrow(print()) + " Failed to Load Template Host"));\r
+               // Concurrent initialization of two template hosts causes a\r
+               // SecurityException later when CG ADD is performed. Initialization is\r
+               // therefore serialized via a global mutex.\r
+               lock(get_global_init_destruct_mutex(), [&]\r
+               {\r
+                       if(FAILED(spFlash->put_Movie(CComBSTR(filename.c_str()))))\r
+                               BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(narrow(print()) + " Failed to Load Template Host"));\r
+               });\r
                                                                                \r
                if(FAILED(spFlash->put_ScaleMode(2)))  //Exact fit. Scale without respect to the aspect ratio.\r
                        BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(narrow(print()) + " Failed to Set Scale Mode"));\r
@@ -244,11 +247,8 @@ public:
        {               \r
                if(ax_)\r
                {\r
-                       lock(get_global_init_destruct_mutex(), [this]\r
-                       {\r
-                               ax_->DestroyAxControl();\r
-                               ax_->Release();\r
-                       });\r
+                       ax_->DestroyAxControl();\r
+                       ax_->Release();\r
                }\r
                graph_->set_value("tick-time", 0.0f);\r
                graph_->set_value("frame-time", 0.0f);\r