]> git.sesse.net Git - casparcg/commitdiff
2.0: amcp: Flash invoke and update should leave case for data string unchanged.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 24 Jun 2011 21:22:30 +0000 (21:22 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 24 Jun 2011 21:22:30 +0000 (21:22 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@951 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/mixer/gpu/device_buffer.cpp
core/mixer/gpu/device_buffer.h
modules/ffmpeg/ffmpeg.vcxproj
modules/ffmpeg/ffmpeg.vcxproj.filters
modules/flash/producer/cg_producer.cpp
protocol/amcp/AMCPCommand.h
protocol/amcp/AMCPCommandsImpl.cpp

index c20e77982f594e6d9b698d6b3652ce6f54d92486..35a93781e3b5642274c6760af12ce75b3950ceef 100644 (file)
@@ -37,12 +37,14 @@ struct device_buffer::implementation : boost::noncopyable
        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
@@ -107,12 +109,14 @@ public:
        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
@@ -127,5 +131,6 @@ void device_buffer::unbind(){impl_->unbind();}
 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
index da71c6deb735cf66a3bb8baaf9c69458c834c09a..761ca96f8737c1bf598d9706c8bf02a80939aa8a 100644 (file)
@@ -42,6 +42,7 @@ public:
        void unbind();\r
 \r
        void clear();\r
+       bool empty() const;\r
 \r
        void attach(int index = 0);\r
        void read(host_buffer& source);\r
index 02a555a9997570cf1a65446aab467fe714723c6f..45b098809246db155e47dbc7111ca3f8439775b9 100644 (file)
       <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
index 14fafb7ca6c6b225c0c976ef5137edf8e0586738..cd210b077b128767832ef056db75f06239634f48 100644 (file)
@@ -46,6 +46,9 @@
     <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
@@ -79,5 +82,8 @@
     <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
index 622b71eb42468d3173a2eda00a54602522c1af5e..33c6f45a7328b06b0424341154df9ad95e610cff 100644 (file)
@@ -45,44 +45,52 @@ public:
                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
index fb5fcc2d90d20bd04ea65c36ba7f40c399cfe4d8..607de6e8b28a1165fa0a3891e083211dc67673ad 100644 (file)
@@ -82,6 +82,7 @@ namespace amcp {
        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
@@ -101,6 +102,7 @@ namespace amcp {
        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
index 5b249b303fe1f3f79a8b547ba464b19f6cd52ec2..dbde815977614de4d0ca5f2568148f2795a43b2d 100644 (file)
@@ -798,7 +798,7 @@ bool CGCommand::DoExecuteAdd() {
 \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
@@ -823,7 +823,7 @@ bool CGCommand::DoExecuteAdd() {
        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
@@ -973,7 +973,7 @@ bool CGCommand::DoExecuteUpdate()
                }\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
@@ -995,7 +995,7 @@ bool CGCommand::DoExecuteInvoke()
                        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