return frames;\r
}\r
\r
- void load(int index, const safe_ptr<frame_producer>& producer, bool play_on_load)\r
+ void load(int index, const safe_ptr<frame_producer>& producer, bool play_on_load, bool preview)\r
{\r
producer->set_parent_printer(std::bind(&layer::print, &layers_[index]));\r
producer->initialize(factory_);\r
- executor_.invoke([&]{layers_[index].load(producer, play_on_load);});\r
- }\r
- \r
- void preview(int index, const safe_ptr<frame_producer>& producer)\r
- {\r
- producer->initialize(factory_);\r
- executor_.invoke([&]{layers_[index].preview(producer);});\r
+ executor_.invoke([&]{layers_[index].load(producer, play_on_load, preview);});\r
}\r
\r
void pause(int index)\r
frame_producer_device::frame_producer_device(const printer& parent_printer, const safe_ptr<frame_factory>& factory, const output_func& output) : impl_(new implementation(parent_printer, factory, output)){}\r
frame_producer_device::frame_producer_device(frame_producer_device&& other) : impl_(std::move(other.impl_)){}\r
void frame_producer_device::swap(frame_producer_device& other){impl_->swap(other);}\r
-void frame_producer_device::load(int index, const safe_ptr<frame_producer>& producer, bool play_on_load){impl_->load(index, producer, play_on_load);}\r
-void frame_producer_device::preview(int index, const safe_ptr<frame_producer>& producer){impl_->preview(index, producer);}\r
+void frame_producer_device::load(int index, const safe_ptr<frame_producer>& producer, bool play_on_load, bool preview){impl_->load(index, producer, play_on_load, preview);}\r
void frame_producer_device::pause(int index){impl_->pause(index);}\r
void frame_producer_device::play(int index){impl_->play(index);}\r
void frame_producer_device::stop(int index){impl_->stop(index);}\r
frame_producer_device(frame_producer_device&& other);\r
void swap(frame_producer_device& other);\r
\r
- void load(int index, const safe_ptr<frame_producer>& producer, bool play_on_load = false);\r
- void preview(int index, const safe_ptr<frame_producer>& producer);\r
+ void load(int index, const safe_ptr<frame_producer>& producer, bool play_on_load = false, bool preview = false);\r
void pause(int index);\r
void play(int index);\r
void stop(int index);\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
+ void load(const safe_ptr<frame_producer>& frame_producer, bool play_on_load, bool preview)\r
{ \r
background_ = frame_producer;\r
is_paused_ = false;\r
+\r
+ if(preview)\r
+ {\r
+ play();\r
+ receive();\r
+ pause();\r
+ }\r
+\r
if(play_on_load)\r
- play(); \r
+ play(); \r
}\r
\r
- void preview(const safe_ptr<frame_producer>& frame_producer)\r
- {\r
- load(frame_producer, true);\r
- receive();\r
- pause();\r
- }\r
- \r
void play()\r
{ \r
if(!is_paused_) \r
void layer::swap(layer& other)\r
{\r
impl_.swap(other.impl_);\r
+ // Printer state is not swapped.\r
tbb::spin_mutex::scoped_lock lock(impl_->printer_mutex_);\r
std::swap(impl_->parent_printer_, other.impl_->parent_printer_);\r
std::swap(impl_->index_, other.impl_->index_);\r
}\r
-void layer::load(const safe_ptr<frame_producer>& frame_producer, bool play_on_load){return impl_->load(frame_producer, play_on_load);} \r
-void layer::preview(const safe_ptr<frame_producer>& frame_producer){return impl_->preview(frame_producer);} \r
+void layer::load(const safe_ptr<frame_producer>& frame_producer, bool play_on_load, bool preview){return impl_->load(frame_producer, play_on_load, preview);} \r
void layer::play(){impl_->play();}\r
void layer::pause(){impl_->pause();}\r
void layer::stop(){impl_->stop();}\r
\r
void swap(layer& other); // nothrow \r
\r
- void load(const safe_ptr<frame_producer>& producer, bool play_on_load = false); // nothrow\r
- void preview(const safe_ptr<frame_producer>& producer); // nothrow\r
+ void load(const safe_ptr<frame_producer>& producer, bool play_on_load, bool preview); // nothrow\r
void play(); // nothrow\r
void pause(); // nothrow\r
void stop(); // nothrow\r
{\r
_parameters[0] = _parameters[0];\r
auto pFP = create_producer(_parameters); \r
- GetChannel()->producer().preview(GetLayerIndex(), pFP);\r
+ GetChannel()->producer().load(GetLayerIndex(), pFP, false, true);\r
\r
CASPAR_LOG(info) << "Loaded " << _parameters[0] << TEXT(" successfully");\r
\r