\r
void tick()\r
{\r
- // Produce\r
+ try\r
+ {\r
+ // Produce\r
\r
- frame_timer_.restart();\r
+ frame_timer_.restart();\r
\r
- auto simple_frames = stage_->execute();\r
+ auto simple_frames = stage_->execute();\r
\r
- diag_->update_value("produce-time", frame_timer_.elapsed()*context_.get_format_desc().fps*0.5);\r
+ diag_->update_value("produce-time", frame_timer_.elapsed()*context_.get_format_desc().fps*0.5);\r
\r
- // Mix\r
+ // Mix\r
\r
- frame_timer_.restart();\r
+ frame_timer_.restart();\r
\r
- auto finished_frame = mixer_->execute(simple_frames);\r
+ auto finished_frame = mixer_->execute(simple_frames);\r
\r
- diag_->update_value("mix-time", frame_timer_.elapsed()*context_.get_format_desc().fps*0.5);\r
+ diag_->update_value("mix-time", frame_timer_.elapsed()*context_.get_format_desc().fps*0.5);\r
\r
- // Consume\r
+ // Consume\r
\r
- output_timer_.restart();\r
+ output_timer_.restart();\r
\r
- output_->execute(finished_frame);\r
+ output_->execute(finished_frame);\r
\r
- diag_->update_value("output-time", frame_timer_.elapsed()*context_.get_format_desc().fps*0.5);\r
+ diag_->update_value("output-time", frame_timer_.elapsed()*context_.get_format_desc().fps*0.5);\r
\r
\r
- diag_->update_value("tick-time", tick_timer_.elapsed()*context_.get_format_desc().fps*0.5);\r
- tick_timer_.restart();\r
+ diag_->update_value("tick-time", tick_timer_.elapsed()*context_.get_format_desc().fps*0.5);\r
+ tick_timer_.restart();\r
+ }\r
+ catch(...)\r
+ {\r
+ CASPAR_LOG_CURRENT_EXCEPTION();\r
+ stage_->clear();\r
+ context_.ogl().gc().wait();\r
+ }\r
\r
context_.execution().begin_invoke([this]{tick();});\r
}\r