]> git.sesse.net Git - casparcg/commitdiff
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
authorRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Mon, 15 Aug 2011 06:09:55 +0000 (06:09 +0000)
committerRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Mon, 15 Aug 2011 06:09:55 +0000 (06:09 +0000)
core/mixer/mixer.cpp
core/producer/stage.cpp

index f866c0b0e3b27e8378134a3178899e19fd635814..3a793932030140a0dcf105fa18d676b297d18d33 100644 (file)
@@ -116,24 +116,32 @@ public:
                        \r
        safe_ptr<read_frame> execute(const std::map<int, safe_ptr<core::basic_frame>>& frames)\r
        {                       \r
-               decltype(mix_image(frames)) image;\r
-               decltype(mix_audio(frames)) audio;\r
-\r
-               tbb::parallel_invoke\r
-               (\r
-                       [&]{image = mix_image(frames);}, \r
-                       [&]{audio = mix_audio(frames);}\r
-               );\r
+               try\r
+               {\r
+                       decltype(mix_image(frames)) image;\r
+                       decltype(mix_audio(frames)) audio;\r
+\r
+                       tbb::parallel_invoke\r
+                       (\r
+                               [&]{image = mix_image(frames);}, \r
+                               [&]{audio = mix_audio(frames);}\r
+                       );\r
                        \r
-               buffer_.push(std::make_pair(std::move(image), audio));\r
+                       buffer_.push(std::make_pair(std::move(image), audio));\r
 \r
-               if(buffer_.size()-1 < buffer_size_)                     \r
-                       return make_safe<read_frame>();\r
+                       if(buffer_.size()-1 < buffer_size_)                     \r
+                               return make_safe<read_frame>();\r
                \r
-               auto res = std::move(buffer_.front());\r
-               buffer_.pop();\r
-                       \r
-               return make_safe<read_frame>(channel_.ogl(), channel_.get_format_desc().size, std::move(res.first.get()), std::move(res.second));               \r
+                       auto res = std::move(buffer_.front());\r
+                       buffer_.pop();\r
+\r
+                       return make_safe<read_frame>(channel_.ogl(), channel_.get_format_desc().size, std::move(res.first.get()), std::move(res.second));       \r
+               }\r
+               catch(...)\r
+               {\r
+                       CASPAR_LOG(error) << L"[mixer] Error detected.";\r
+                       throw;\r
+               }                               \r
        }\r
                                        \r
        safe_ptr<core::write_frame> create_frame(const void* tag, const core::pixel_format_desc& desc)\r
index 72a2e80e7c38119bfe03f8b1d886d16193e41a57..fdaa5a0a392ccdfc9b4186518e7d21f8211106d0 100644 (file)
@@ -85,18 +85,27 @@ public:
        }\r
                                                \r
        std::map<int, safe_ptr<basic_frame>> execute()\r
-       {                       \r
-               std::map<int, safe_ptr<basic_frame>> frames;\r
+       {               \r
+               try\r
+               {\r
+                       std::map<int, safe_ptr<basic_frame>> frames;\r
                \r
-               BOOST_FOREACH(auto& layer, layers_)                     \r
-                       frames[layer.first] = basic_frame::empty();     \r
+                       BOOST_FOREACH(auto& layer, layers_)                     \r
+                               frames[layer.first] = basic_frame::empty();     \r
+\r
+                       tbb::parallel_for_each(layers_.begin(), layers_.end(), [&](std::map<int, layer>::value_type& layer) \r
+                       {\r
+                               frames[layer.first] = layer.second.receive();   \r
+                       });\r
 \r
-               tbb::parallel_for_each(layers_.begin(), layers_.end(), [&](std::map<int, layer>::value_type& layer) \r
+                       return frames;\r
+\r
+               }\r
+               catch(...)\r
                {\r
-                       frames[layer.first] = layer.second.receive();   \r
-               });\r
-               \r
-               return frames;\r
+                       CASPAR_LOG(error) << L"[stage] Error detected";\r
+                       throw;\r
+               }               \r
        }\r
 \r
        void load(int index, const safe_ptr<frame_producer>& producer, bool preview, int auto_play_delta)\r