]> git.sesse.net Git - casparcg/blobdiff - core/producer/stage.cpp
2.0. Async opt 2.
[casparcg] / core / producer / stage.cpp
index 404ccd645a626953dff37db51241495563ad9fa8..d8e1d262ca7c394c8c068cec131f51e1e6abc41e 100644 (file)
@@ -33,6 +33,8 @@
 \r
 #include <boost/foreach.hpp>\r
 \r
+#include <tbb/parallel_for_each.h>\r
+\r
 #include <map>\r
 #include <set>\r
 \r
@@ -74,7 +76,7 @@ public:
 \r
 struct stage::implementation : boost::noncopyable\r
 {              \r
-       std::map<int, layer>                                            layers_;                \r
+       std::map<int, layer>                                            layers_;        \r
        video_channel_context&                                          channel_;\r
 public:\r
        implementation(video_channel_context& video_channel)  \r
@@ -88,8 +90,15 @@ public:
 \r
                try\r
                {\r
-                       BOOST_FOREACH(auto& layer, layers_)\r
+                       // Allocate placeholders.\r
+                       BOOST_FOREACH(auto layer, layers_)\r
+                               frames[layer.first] = basic_frame::empty();\r
+\r
+                       // Render layers\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
                catch(...)\r
                {\r