]> git.sesse.net Git - casparcg/blobdiff - core/mixer/mixer.cpp
2.0. image_mixer: Re-enabled image adjustements.
[casparcg] / core / mixer / mixer.cpp
index fafcef02054e3a08d26de70114dd500fafe2ac40..f866c0b0e3b27e8378134a3178899e19fd635814 100644 (file)
@@ -33,6 +33,7 @@
 #include <common/concurrency/executor.h>\r
 #include <common/utility/tweener.h>\r
 #include <common/env.h>\r
+#include <common/gl/gl_check.h>\r
 \r
 #include <core/mixer/read_frame.h>\r
 #include <core/mixer/write_frame.h>\r
@@ -115,38 +116,26 @@ public:
                        \r
        safe_ptr<read_frame> execute(const std::map<int, safe_ptr<core::basic_frame>>& frames)\r
        {                       \r
-               try\r
-               {\r
-                       decltype(mix_image(frames)) image;\r
-                       decltype(mix_audio(frames)) audio;\r
-\r
-                       tbb::parallel_invoke(\r
-                                       [&]{image = mix_image(frames);}, \r
-                                       [&]{audio = mix_audio(frames);});\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
-               }\r
-               catch(...)\r
-               {\r
-                       channel_.ogl().gc().wait();\r
-                       image_mixer_ = image_mixer(channel_);\r
-                       audio_mixer_ = audio_mixer(channel_.get_format_desc());\r
-                       channel_.ogl().gc().wait();\r
-\r
-                       CASPAR_LOG_CURRENT_EXCEPTION();\r
-               }\r
+               buffer_.push(std::make_pair(std::move(image), audio));\r
 \r
-               if(buffer_.size() > buffer_size_)\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
-               }\r
+               if(buffer_.size()-1 < buffer_size_)                     \r
+                       return make_safe<read_frame>();\r
                \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
+       }\r
+                                       \r
        safe_ptr<core::write_frame> create_frame(const void* tag, const core::pixel_format_desc& desc)\r
        {               \r
                return image_mixer_.create_frame(tag, desc);\r