const size_t width_;\r
const size_t height_;\r
const size_t stride_;\r
+ bool empty_;\r
\r
public:\r
implementation(size_t width, size_t height, size_t stride) \r
: width_(width)\r
, height_(height)\r
, stride_(stride)\r
+ , empty_(true)\r
{ \r
GL(glGenTextures(1, &id_));\r
GL(glBindTexture(GL_TEXTURE_2D, id_));\r
void attach(int index)\r
{\r
GL(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + index, GL_TEXTURE_2D, id_, 0));\r
+ empty_ = false;\r
}\r
\r
void clear()\r
{\r
attach(0);\r
GL(glClear(GL_COLOR_BUFFER_BIT));\r
+ empty_ = true;\r
}\r
};\r
\r
void device_buffer::read(host_buffer& source){impl_->read(source);}\r
void device_buffer::write(host_buffer& target){impl_->write(target);}\r
void device_buffer::clear(){impl_->clear();}\r
+bool device_buffer::empty() const { return impl_->empty_; }\r
\r
}}
\ No newline at end of file
void unbind();\r
\r
void clear();\r
+ bool empty() const;\r
\r
void attach(int index = 0);\r
void read(host_buffer& source);\r
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
</ClCompile>\r
+ <ClCompile Include="producer\filter_producer.cpp">\r
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
+ </ClCompile>\r
<ClCompile Include="producer\input.cpp">\r
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
<PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
<ClInclude Include="producer\audio\audio_decoder.h" />\r
<ClInclude Include="producer\ffmpeg_producer.h" />\r
<ClInclude Include="producer\filter\filter.h" />\r
+ <ClInclude Include="producer\filter_producer.h">\r
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
+ </ClInclude>\r
<ClInclude Include="producer\input.h" />\r
<ClInclude Include="producer\util.h" />\r
<ClInclude Include="producer\video\video_decoder.h" />\r
<ClCompile Include="producer\filter\filter.cpp">\r
<Filter>source\producer\filter</Filter>\r
</ClCompile>\r
+ <ClCompile Include="producer\filter_producer.cpp">\r
+ <Filter>source\producer</Filter>\r
+ </ClCompile>\r
</ItemGroup>\r
<ItemGroup>\r
<ClInclude Include="producer\ffmpeg_producer.h">\r
<ClInclude Include="producer\util.h">\r
<Filter>source\producer</Filter>\r
</ClInclude>\r
+ <ClInclude Include="producer\filter_producer.h">\r
+ <Filter>source\producer</Filter>\r
+ </ClInclude>\r
</ItemGroup>\r
</Project>
\ No newline at end of file
if(filename.size() > 0 && filename[0] == L'/')\r
filename = filename.substr(1, filename.size()-1);\r
\r
- CASPAR_LOG(info) << flash_producer_->print() << " Invoking add-command";\r
- flash_producer_->param((boost::wformat(L"<invoke name=\"Add\" returntype=\"xml\"><arguments><number>%1%</number><string>%2%</string>%3%<string>%4%</string><string><![CDATA[%5%]]></string></arguments></invoke>") % layer % filename % (play_on_load?TEXT("<true/>"):TEXT("<false/>")) % label % data).str());\r
+ auto str = (boost::wformat(L"<invoke name=\"Add\" returntype=\"xml\"><arguments><number>%1%</number><string>%2%</string>%3%<string>%4%</string><string><![CDATA[%5%]]></string></arguments></invoke>") % layer % filename % (play_on_load?TEXT("<true/>"):TEXT("<false/>")) % label % data).str();\r
+\r
+ CASPAR_LOG(info) << flash_producer_->print() << " Invoking add-command:" << str;\r
+ flash_producer_->param(str);\r
}\r
\r
void remove(int layer)\r
{\r
- CASPAR_LOG(info) << flash_producer_->print() << " Invoking remove-command";\r
- flash_producer_->param((boost::wformat(L"<invoke name=\"Delete\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array></arguments></invoke>") % layer).str());\r
+ auto str = (boost::wformat(L"<invoke name=\"Delete\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array></arguments></invoke>") % layer).str();\r
+ CASPAR_LOG(info) << flash_producer_->print() << " Invoking remove-command:" << str;\r
+ flash_producer_->param(str);\r
}\r
\r
void play(int layer)\r
{\r
- CASPAR_LOG(info) << flash_producer_->print() << " Invoking play-command";\r
- flash_producer_->param((boost::wformat(L"<invoke name=\"Play\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array></arguments></invoke>") % layer).str());\r
+ auto str = (boost::wformat(L"<invoke name=\"Play\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array></arguments></invoke>") % layer).str();\r
+ CASPAR_LOG(info) << flash_producer_->print() << " Invoking play-command: " << str;\r
+ flash_producer_->param(str);\r
}\r
\r
void stop(int layer, unsigned int)\r
{\r
- CASPAR_LOG(info) << flash_producer_->print() << " Invoking stop-command";\r
- flash_producer_->param((boost::wformat(L"<invoke name=\"Stop\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array><number>0</number></arguments></invoke>") % layer).str());\r
+ auto str = (boost::wformat(L"<invoke name=\"Stop\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array><number>0</number></arguments></invoke>") % layer).str();\r
+ CASPAR_LOG(info) << flash_producer_->print() << " Invoking stop-command:" << str;\r
+ flash_producer_->param(str);\r
}\r
\r
void next(int layer)\r
{\r
- CASPAR_LOG(info) << flash_producer_->print() << " Invoking next-command";\r
- flash_producer_->param((boost::wformat(L"<invoke name=\"Next\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array></arguments></invoke>") % layer).str());\r
+ auto str = (boost::wformat(L"<invoke name=\"Next\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array></arguments></invoke>") % layer).str();\r
+ CASPAR_LOG(info) << flash_producer_->print() << " Invoking next-command:" << str;\r
+ flash_producer_->param(str);\r
}\r
\r
void update(int layer, const std::wstring& data)\r
{\r
- CASPAR_LOG(info) << flash_producer_->print() <<" Invoking update-command";\r
- flash_producer_->param((boost::wformat(L"<invoke name=\"SetData\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array><string><![CDATA[%2%]]></string></arguments></invoke>") % layer % data).str());\r
+ auto str = (boost::wformat(L"<invoke name=\"SetData\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array><string><![CDATA[%2%]]></string></arguments></invoke>") % layer % data).str();\r
+ CASPAR_LOG(info) << flash_producer_->print() <<" Invoking update-command:" << str;\r
+ flash_producer_->param(str);\r
}\r
\r
void invoke(int layer, const std::wstring& label)\r
{\r
- CASPAR_LOG(info) << flash_producer_->print() << " Invoking invoke-command";\r
- flash_producer_->param((boost::wformat(L"<invoke name=\"Invoke\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array><string>%2%</string></arguments></invoke>") % layer % label).str());\r
+ auto str = (boost::wformat(L"<invoke name=\"Invoke\" returntype=\"xml\"><arguments><array><property id=\"0\"><number>%1%</number></property></array><string>%2%</string></arguments></invoke>") % layer % label).str();\r
+ CASPAR_LOG(info) << flash_producer_->print() << " Invoking invoke-command: " << str;\r
+ flash_producer_->param(str);\r
}\r
\r
safe_ptr<core::basic_frame> receive()\r
protected:\r
void SetReplyString(const std::wstring& str){replyString_ = str;}\r
std::vector<std::wstring> _parameters;\r
+ std::vector<std::wstring> _parameters2;\r
\r
private:\r
unsigned int channelIndex_;\r
public:\r
virtual bool Execute()\r
{\r
+ _parameters2 = _parameters;\r
for(size_t n = 0; n < _parameters.size(); ++n)\r
_parameters[n] = boost::to_upper_copy(_parameters[n]);\r
return (TNeedChannel && !GetChannel()) || _parameters.size() < TMinParameters ? false : DoExecute();\r
\r
if(_parameters[3].length() > 1) \r
{ //read label\r
- label = _parameters[3];\r
+ label = _parameters2[3];\r
++dataIndex;\r
\r
if(_parameters.size() > 4 && _parameters[4].length() > 0) //read play-on-load-flag\r
std::wstring dataFromFile;\r
if(_parameters.size() > dataIndex) \r
{ //read data\r
- const std::wstring& dataString = _parameters[dataIndex];\r
+ const std::wstring& dataString = _parameters2[dataIndex];\r
\r
if(dataString[0] == TEXT('<')) //the data is an XML-string\r
pDataString = dataString.c_str();\r
}\r
int layer = _ttoi(_parameters[1].c_str());\r
//TODO: Implement indirect data loading from file. Same as in Add\r
- get_default_cg_producer(safe_ptr<core::video_channel>(GetChannel()), GetLayerIndex(cg_producer::DEFAULT_LAYER))->update(layer, _parameters[2]);\r
+ get_default_cg_producer(safe_ptr<core::video_channel>(GetChannel()), GetLayerIndex(cg_producer::DEFAULT_LAYER))->update(layer, _parameters2[2]);\r
}\r
else \r
{\r
return false;\r
}\r
int layer = _ttoi(_parameters[1].c_str());\r
- get_default_cg_producer(safe_ptr<core::video_channel>(GetChannel()), GetLayerIndex(cg_producer::DEFAULT_LAYER))->invoke(layer, _parameters[2]);\r
+ get_default_cg_producer(safe_ptr<core::video_channel>(GetChannel()), GetLayerIndex(cg_producer::DEFAULT_LAYER))->invoke(layer, _parameters2[2]);\r
}\r
else \r
{\r