+ CASPAR_ASSERT(producer.unique());\r
+ executor_.begin_invoke(std::bind(&frame_producer_remover::do_remove, this, std::move(producer)));\r
+ }\r
+};\r
+\r
+frame_producer_remover g_remover;\r
+\r
+\r
+struct layer::implementation : boost::noncopyable\r
+{ \r
+ mutable tbb::spin_mutex printer_mutex_;\r
+ printer parent_printer_;\r
+ int index_;\r
+ \r
+ safe_ptr<frame_producer> foreground_;\r
+ safe_ptr<frame_producer> background_;\r
+ safe_ptr<draw_frame> last_frame_;\r
+ bool is_paused_;\r
+public:\r
+ implementation(int index, const printer& parent_printer) \r
+ : parent_printer_(parent_printer)\r
+ , index_(index)\r
+ , foreground_(frame_producer::empty())\r
+ , background_(frame_producer::empty())\r
+ , last_frame_(draw_frame::empty())\r
+ , is_paused_(false){}\r
+ \r
+ void load(const safe_ptr<frame_producer>& frame_producer, bool play_on_load)\r
+ { \r