{ \r
if(!frame_buffer_.try_pop(tail_))\r
CASPAR_LOG(trace) << print() << " underflow";\r
- else\r
+\r
+ if(executor_.size() > 8) // Limit the call queue in-case of underflow\r
+ return tail_;\r
+\r
+ executor_.begin_invoke([=]\r
{\r
- executor_.begin_invoke([=]\r
+ if(!renderer_)\r
+ return;\r
+\r
+ try\r
{\r
- if(!renderer_)\r
- return;\r
-\r
- try\r
- {\r
- auto frame = draw_frame::empty();\r
- do{frame = renderer_->render_frame();}\r
- while(frame_buffer_.try_push(frame) && frame == draw_frame::empty());\r
- }\r
- catch(...)\r
- {\r
- CASPAR_LOG_CURRENT_EXCEPTION();\r
- renderer_ = nullptr;\r
- }\r
- }); \r
- } \r
+ auto frame = draw_frame::empty();\r
+ do{frame = renderer_->render_frame();}\r
+ while(frame_buffer_.try_push(frame) && frame == draw_frame::empty());\r
+ }\r
+ catch(...)\r
+ {\r
+ CASPAR_LOG_CURRENT_EXCEPTION();\r
+ renderer_ = nullptr;\r
+ }\r
+ }); \r
+\r
return tail_;\r
}\r
\r
\r
const auto factories = list_of<factory_t>\r
(&core::flash::create_ct_producer)\r
- (&core::image::create_image_producer)\r
// (&image::create_image_scroll_producer)\r
(&core::ffmpeg::create_ffmpeg_producer)\r
+ (&core::image::create_image_producer)\r
(&core::create_decklink_producer)\r
(&core::create_color_producer);\r
\r
<videomode>PAL</videomode>\r
<consumers>\r
<ogl>\r
- <device>1</device>\r
+ <device>0</device>\r
<stretch>uniform</stretch>\r
<windowed>true</windowed>\r
</ogl>\r
</bluefish-->\r
</consumers>\r
</channel>\r
- <channel>\r
- <videomode>PAL</videomode>\r
- <consumers>\r
- <ogl>\r
- <device>1</device>\r
- <stretch>uniform</stretch>\r
- <windowed>true</windowed>\r
- </ogl>\r
- <audio/>\r
- <!--decklink>\r
- <device>1</device>\r
- <embedded-audio>true</embedded-audio>\r
- </decklink-->\r
- <!--bluefish>\r
- <device>1</device> \r
- <embedded-audio>true</embedded-audio>\r
- </bluefish-->\r
- </consumers>\r
- </channel>\r
</channels>\r
<controllers>\r
<tcpcontroller>\r
CASPAR_LOG(debug) << L"Started TBB Worker Thread.";\r
win32_exception::install_handler();\r
}\r
+ void on_scheduler_exit()\r
+ {\r
+ CASPAR_LOG(debug) << L"Stopped TBB Worker Thread.";\r
+ }\r
};\r
\r
int main(int argc, wchar_t* argv[])\r