X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fflash%2Fproducer%2Fcg_producer.cpp;h=da983e7515a7ff1c1b37189f4bba63f1f2380632;hb=b706389b29b5fd12c9608e856e99f016f0235201;hp=e5095551f6e0637db3b27be4da94c93c5f5b1f82;hpb=860bb47e6bb1c08150b54909a722066306ba78e2;p=casparcg diff --git a/modules/flash/producer/cg_producer.cpp b/modules/flash/producer/cg_producer.cpp index e5095551f..da983e751 100644 --- a/modules/flash/producer/cg_producer.cpp +++ b/modules/flash/producer/cg_producer.cpp @@ -29,8 +29,9 @@ #include #include +#include -namespace caspar { +namespace caspar { namespace flash { struct cg_producer::implementation : boost::noncopyable { @@ -40,52 +41,68 @@ public: : flash_producer_(frame_producer) {} - void add(int layer, const std::wstring& filename, bool play_on_load, const std::wstring& label, const std::wstring& data) + void add(int layer, std::wstring filename, bool play_on_load, const std::wstring& label, const std::wstring& data) { - CASPAR_LOG(info) << flash_producer_->print() << " Invoking add-command"; - flash_producer_->param((boost::wformat(L"%1%%2%%3%%4%") % layer % filename % (play_on_load?TEXT(""):TEXT("")) % label % data).str()); + if(filename.size() > 0 && filename[0] == L'/') + filename = filename.substr(1, filename.size()-1); + + auto str = (boost::wformat(L"%1%%2%%3%%4%") % layer % filename % (play_on_load?TEXT(""):TEXT("")) % label % data).str(); + + CASPAR_LOG(info) << flash_producer_->print() << " Invoking add-command:" << str; + flash_producer_->param(str); } void remove(int layer) { - CASPAR_LOG(info) << flash_producer_->print() << " Invoking remove-command"; - flash_producer_->param((boost::wformat(L"%1%") % layer).str()); + auto str = (boost::wformat(L"%1%") % layer).str(); + CASPAR_LOG(info) << flash_producer_->print() << " Invoking remove-command:" << str; + flash_producer_->param(str); } void play(int layer) { - CASPAR_LOG(info) << flash_producer_->print() << " Invoking play-command"; - flash_producer_->param((boost::wformat(L"%1%") % layer).str()); + auto str = (boost::wformat(L"%1%") % layer).str(); + CASPAR_LOG(info) << flash_producer_->print() << " Invoking play-command: " << str; + flash_producer_->param(str); } void stop(int layer, unsigned int) { - CASPAR_LOG(info) << flash_producer_->print() << " Invoking stop-command"; - flash_producer_->param((boost::wformat(L"%1%0") % layer).str()); + auto str = (boost::wformat(L"%1%0") % layer).str(); + CASPAR_LOG(info) << flash_producer_->print() << " Invoking stop-command:" << str; + flash_producer_->param(str); } void next(int layer) { - CASPAR_LOG(info) << flash_producer_->print() << " Invoking next-command"; - flash_producer_->param((boost::wformat(L"%1%") % layer).str()); + auto str = (boost::wformat(L"%1%") % layer).str(); + CASPAR_LOG(info) << flash_producer_->print() << " Invoking next-command:" << str; + flash_producer_->param(str); } void update(int layer, const std::wstring& data) { - CASPAR_LOG(info) << flash_producer_->print() <<" Invoking update-command"; - flash_producer_->param((boost::wformat(L"%1%") % layer % data).str()); + auto str = (boost::wformat(L"%1%") % layer % data).str(); + CASPAR_LOG(info) << flash_producer_->print() <<" Invoking update-command:" << str; + flash_producer_->param(str); } void invoke(int layer, const std::wstring& label) { - CASPAR_LOG(info) << flash_producer_->print() << " Invoking invoke-command"; - flash_producer_->param((boost::wformat(L"%1%%2%") % layer % label).str()); + auto str = (boost::wformat(L"%1%%2%") % layer % label).str(); + CASPAR_LOG(info) << flash_producer_->print() << " Invoking invoke-command: " << str; + flash_producer_->param(str); } - safe_ptr receive() + virtual safe_ptr receive(int hints) { - return core::receive(flash_producer_); + return flash_producer_->receive(hints); } + + virtual safe_ptr last_frame() const + { + return flash_producer_->last_frame(); + } std::wstring print() const { @@ -95,12 +112,12 @@ public: safe_ptr get_default_cg_producer(const safe_ptr& video_channel, int render_layer) { - auto flash_producer = video_channel->stage()->foreground(render_layer).get(); + auto flash_producer = video_channel->stage()->foreground(render_layer); - if(flash_producer->print().find(L"flash") == std::string::npos) + if(flash_producer->print().find(L"flash[") == std::string::npos) // UGLY hack { - flash_producer = create_flash_producer(video_channel->mixer(), boost::assign::list_of(env::template_host())); - video_channel->stage()->load(render_layer, flash_producer, true); + flash_producer = flash::create_producer(video_channel->mixer(), boost::assign::list_of()); + video_channel->stage()->load(render_layer, flash_producer); video_channel->stage()->play(render_layer); } @@ -113,7 +130,11 @@ safe_ptr create_ct_producer(const safe_ptr()); auto producer = make_safe(flash_producer); producer->add(0, filename, 1); @@ -122,7 +143,8 @@ safe_ptr create_ct_producer(const safe_ptr& frame_producer) : impl_(new implementation(frame_producer)){} cg_producer::cg_producer(cg_producer&& other) : impl_(std::move(other.impl_)){} -safe_ptr cg_producer::receive(){return impl_->receive();} +safe_ptr cg_producer::receive(int hints){return impl_->receive(hints);} +safe_ptr cg_producer::last_frame() const{return impl_->last_frame();} void cg_producer::add(int layer, const std::wstring& template_name, bool play_on_load, const std::wstring& startFromLabel, const std::wstring& data){impl_->add(layer, template_name, play_on_load, startFromLabel, data);} void cg_producer::remove(int layer){impl_->remove(layer);} void cg_producer::play(int layer){impl_->play(layer);} @@ -132,4 +154,4 @@ void cg_producer::update(int layer, const std::wstring& data){impl_->update(laye void cg_producer::invoke(int layer, const std::wstring& label){impl_->invoke(layer, label);} std::wstring cg_producer::print() const{return impl_->print();} -} \ No newline at end of file +}} \ No newline at end of file