#include <common/concurrency/executor.h>\r
#include <common/diagnostics/graph.h>\r
\r
+#include "mixer/gpu/ogl_device.h"\r
+\r
#include <boost/timer.hpp>\r
\r
#ifdef _MSC_VER\r
implementation(int index, const video_format_desc& format_desc, ogl_device& ogl) \r
: context_(index, ogl, format_desc)\r
, diag_(diagnostics::create_graph(narrow(print())))\r
- , output_(new caspar::core::output(context_))\r
+ , output_(new caspar::core::output(context_, [this]{restart();}))\r
, mixer_(new caspar::core::mixer(context_))\r
, stage_(new caspar::core::stage(context_)) \r
{\r
diag_->add_guide("produce-time", 0.5f); \r
- diag_->set_color("produce-time", diagnostics::color(1.0f, 0.0f, 0.0f));\r
- diag_->set_color("tick-time", diagnostics::color(0.1f, 0.7f, 0.8f)); \r
+ diag_->set_color("produce-time", diagnostics::color(0.0f, 1.0f, 0.0f));\r
+ diag_->set_color("tick-time", diagnostics::color(0.0f, 0.6f, 0.9f)); \r
diag_->set_color("output-time", diagnostics::color(1.0f, 0.5f, 0.0f));\r
- diag_->set_color("mix-time", diagnostics::color(0.0f, 1.0f, 0.0f));\r
+ diag_->set_color("mix-time", diagnostics::color(1.0f, 1.0f, 0.9f));\r
\r
CASPAR_LOG(info) << print() << " Successfully Initialized.";\r
context_.execution().begin_invoke([this]{tick();});\r
{\r
CASPAR_LOG_CURRENT_EXCEPTION();\r
CASPAR_LOG(error) << context_.print() << L" Unexpected exception. Clearing stage and freeing memory";\r
-\r
- stage_->clear();\r
- context_.ogl().gc().wait();\r
-\r
- mixer_ = nullptr;\r
- mixer_.reset(new caspar::core::mixer(context_));\r
+ restart();\r
}\r
\r
context_.execution().begin_invoke([this]{tick();});\r
}\r
+\r
+ void restart()\r
+ {\r
+ stage_->clear();\r
+ context_.ogl().gc().wait();\r
+\r
+ mixer_ = nullptr;\r
+ mixer_.reset(new caspar::core::mixer(context_));\r
+ }\r
\r
std::wstring print() const\r
{\r
video_format_desc video_channel::get_video_format_desc() const{return impl_->context_.get_format_desc();}\r
void video_channel::set_video_format_desc(const video_format_desc& format_desc){impl_->set_video_format_desc(format_desc);}\r
std::wstring video_channel::print() const { return impl_->print();}\r
+video_channel_context& video_channel::context(){return impl_->context_;}\r
\r
}}
\ No newline at end of file