]> git.sesse.net Git - casparcg/commitdiff
2.0. mixer: Run audio and image mixing in parallel.
authorRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 31 Jul 2011 09:59:46 +0000 (09:59 +0000)
committerRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 31 Jul 2011 09:59:46 +0000 (09:59 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1027 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/mixer/image/image_mixer.cpp
core/mixer/image/image_mixer.h
core/mixer/mixer.cpp

index aab74c5156b7d74b8d01043f2620b1965f4faee0..b7db2695ec632aa66fec76df6c58becb08d4abde 100644 (file)
@@ -142,11 +142,11 @@ public:
        {\r
        }\r
        \r
-       safe_ptr<host_buffer> render()\r
+       boost::unique_future<safe_ptr<host_buffer>> render()\r
        {               \r
                auto render_queue = std::move(render_queue_);\r
 \r
-               return channel_.ogl().invoke([=]() mutable -> safe_ptr<host_buffer>\r
+               return channel_.ogl().begin_invoke([=]() mutable -> safe_ptr<host_buffer>\r
                {                       \r
                        if(channel_.get_format_desc().width != write_buffer_->width() || channel_.get_format_desc().height != write_buffer_->height())\r
                                initialize_buffers();\r
@@ -248,7 +248,7 @@ image_mixer::image_mixer(video_channel_context& video_channel) : impl_(new imple
 void image_mixer::begin(core::basic_frame& frame){impl_->begin(frame);}\r
 void image_mixer::visit(core::write_frame& frame){impl_->visit(frame);}\r
 void image_mixer::end(){impl_->end();}\r
-safe_ptr<host_buffer> image_mixer::render(){return impl_->render();}\r
+boost::unique_future<safe_ptr<host_buffer>> image_mixer::render(){return impl_->render();}\r
 safe_ptr<write_frame> image_mixer::create_frame(const void* tag, const core::pixel_format_desc& desc){return impl_->create_frame(tag, desc);}\r
 void image_mixer::begin_layer(){impl_->begin_layer();}\r
 void image_mixer::end_layer(){impl_->end_layer();}\r
index 5179036134ee530add60ed7a94e38144173cc2ab..2900276a836b81607a6d26a8da04a601db177494 100644 (file)
@@ -25,6 +25,8 @@
 \r
 #include <boost/noncopyable.hpp>\r
 \r
+#include <boost/thread/future.hpp>\r
+\r
 namespace caspar { namespace core {\r
 \r
 class write_frame;\r
@@ -46,7 +48,7 @@ public:
 \r
        image_mixer& operator=(image_mixer&& other);\r
        \r
-       safe_ptr<host_buffer> render();\r
+       boost::unique_future<safe_ptr<host_buffer>> render();\r
 \r
        safe_ptr<write_frame> create_frame(const void* tag, const core::pixel_format_desc& format);\r
 \r
index e3ca66ab53d94430dd646521415c2c929bf5d1d8..1e71a39eacc0658015fee97cca50b1c5e422d969 100644 (file)
@@ -111,7 +111,7 @@ public:
                        auto image = mix_image(frames);\r
                        auto audio = mix_audio(frames);\r
                        \r
-                       return make_safe<read_frame>(channel_.ogl(), std::move(image), std::move(audio));\r
+                       return make_safe<read_frame>(channel_.ogl(), std::move(image.get()), std::move(audio));\r
                }\r
                catch(...)\r
                {\r
@@ -172,7 +172,7 @@ public:
 \r
 private:\r
                \r
-       safe_ptr<host_buffer> mix_image(std::map<int, safe_ptr<core::basic_frame>> frames)\r
+       boost::unique_future<safe_ptr<host_buffer>> mix_image(std::map<int, safe_ptr<core::basic_frame>> frames)\r
        {               \r
                auto& image_transforms = boost::fusion::at_key<core::image_transform>(transforms_);\r
                \r