\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