]> git.sesse.net Git - casparcg/commitdiff
Added channel-grid.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 20 Dec 2011 15:51:31 +0000 (15:51 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 20 Dec 2011 15:51:31 +0000 (15:51 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/trunk@1918 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/core.vcxproj
core/core.vcxproj.filters
protocol/amcp/AMCPCommandsImpl.cpp
protocol/amcp/AMCPCommandsImpl.h
protocol/amcp/AMCPProtocolStrategy.cpp

index 01245498532d43fa5d0b1ccd21b922b5d91a908e..8a7388400f05ac87dc31010eb8b745fddaa8dcee 100644 (file)
     <ClInclude Include="mixer\image\blend_modes.h" />\r
     <ClInclude Include="mixer\image\shader\blending_glsl.h" />\r
     <ClInclude Include="mixer\image\shader\image_shader.h" />\r
+    <ClInclude Include="producer\channel\channel_producer.h" />\r
     <ClInclude Include="producer\playlist\playlist_producer.h" />\r
     <ClInclude Include="video_channel.h" />\r
     <ClInclude Include="consumer\output.h" />\r
       <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">../../../stdafx.h</PrecompiledHeaderFile>\r
       <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">../../../stdafx.h</PrecompiledHeaderFile>\r
     </ClCompile>\r
+    <ClCompile Include="producer\channel\channel_producer.cpp">\r
+      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\r
+      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../StdAfx.h</PrecompiledHeaderFile>\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\playlist\playlist_producer.cpp">\r
       <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">../../stdafx.h</PrecompiledHeaderFile>\r
       <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../../stdafx.h</PrecompiledHeaderFile>\r
index ed801f84f64b2fec2e78b86a95498231858832b5..d5916b9a829c103f229f30a8df5b023b25a33e75 100644 (file)
@@ -40,6 +40,9 @@
     <Filter Include="source\mixer\image\shader">\r
       <UniqueIdentifier>{e0a140f8-e217-465c-a934-163b7ea786be}</UniqueIdentifier>\r
     </Filter>\r
+    <Filter Include="source\producer\channel">\r
+      <UniqueIdentifier>{f2380c6b-6ec8-4a47-8394-357a05eb831a}</UniqueIdentifier>\r
+    </Filter>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="producer\transition\transition_producer.h">\r
     <ClInclude Include="mixer\image\shader\blending_glsl.h">\r
       <Filter>source\mixer\image\shader</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="producer\channel\channel_producer.h">\r
+      <Filter>source\producer\channel</Filter>\r
+    </ClInclude>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClCompile Include="producer\transition\transition_producer.cpp">\r
     <ClCompile Include="mixer\image\blend_modes.cpp">\r
       <Filter>source\mixer\image</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="producer\channel\channel_producer.cpp">\r
+      <Filter>source\producer\channel</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
 </Project>
\ No newline at end of file
index 02fdffd51c12df16ad5972b2d451fb718aab54d7..881acf68079dee6b05b9bacc71a641b1f654862c 100644 (file)
@@ -38,6 +38,7 @@
 #include <core/producer/frame_producer.h>\r
 #include <core/video_format.h>\r
 #include <core/producer/transition/transition_producer.h>\r
+#include <core/producer/channel/channel_producer.h>\r
 #include <core/producer/frame/frame_transform.h>\r
 #include <core/producer/stage.h>\r
 #include <core/producer/layer.h>\r
@@ -221,6 +222,46 @@ bool DiagnosticsCommand::DoExecute()
        }\r
 }\r
 \r
+bool ChannelGridCommand::DoExecute()\r
+{\r
+       int index = 1;\r
+       BOOST_FOREACH(auto channel, GetChannels())\r
+       {\r
+               if(channel != GetChannel())\r
+               {\r
+                       auto producer = create_channel_producer(GetChannel()->mixer(), channel);                \r
+                       GetChannel()->stage()->load(index, producer, false);\r
+                       GetChannel()->stage()->play(index);\r
+                       index++;\r
+               }\r
+       }\r
+\r
+       int n = GetChannels().size()-1;\r
+       double delta = 1.0/static_cast<double>(n);\r
+       for(int x = 0; x < n; ++x)\r
+       {\r
+               for(int y = 0; y < n; ++y)\r
+               {\r
+                       int index = x+y*n+1;\r
+                       auto transform = [=](frame_transform transform) -> frame_transform\r
+                       {               \r
+                               transform.fill_translation[0]   = x*delta;\r
+                               transform.fill_translation[1]   = y*delta;\r
+                               transform.fill_scale[0]                 = delta;\r
+                               transform.fill_scale[1]                 = delta;\r
+                               transform.clip_translation[0]   = x*delta;\r
+                               transform.clip_translation[1]   = y*delta;\r
+                               transform.clip_scale[0]                 = delta;\r
+                               transform.clip_scale[1]                 = delta;                        \r
+                               return transform;\r
+                       };\r
+                       GetChannel()->stage()->apply_frame_transform(index, transform);\r
+               }\r
+       }\r
+\r
+       return true;\r
+}\r
+\r
 bool CallCommand::DoExecute()\r
 {      \r
        //Perform loading of the clip\r
index c17766880ed5a0e85224ff33614e92cdef2bae40..a2ccc88b8d2efd1c8844e37fc46eb1737a5bdd79 100644 (file)
@@ -32,6 +32,12 @@ std::wstring ListTemplates();
 \r
 namespace amcp {\r
        \r
+class ChannelGridCommand : public AMCPCommandBase<true, AddToQueue, 0>\r
+{\r
+       std::wstring print() const { return L"ChannelGridCommand";}\r
+       bool DoExecute();\r
+};\r
+\r
 class DiagnosticsCommand : public AMCPCommandBase<false, AddToQueue, 0>\r
 {\r
        std::wstring print() const { return L"DiagnosticsCommand";}\r
index d7ed9a6452bf0ce30292165f7e9a5e3d71cf6291..5ab1388a611d566ec6858a6722828d3958e31e0f 100644 (file)
@@ -298,29 +298,30 @@ AMCPCommandPtr AMCPProtocolStrategy::CommandFactory(const std::wstring& str)
        std::wstring s = str;\r
        transform(s.begin(), s.end(), s.begin(), toupper);\r
        \r
-       if         (s == TEXT("MIXER"))         return std::make_shared<MixerCommand>();\r
-       else if(s == TEXT("DIAG"))              return std::make_shared<DiagnosticsCommand>();\r
-       else if(s == TEXT("CALL"))              return std::make_shared<CallCommand>();\r
-       else if(s == TEXT("SWAP"))              return std::make_shared<SwapCommand>();\r
-       else if(s == TEXT("LOAD"))              return std::make_shared<LoadCommand>();\r
-       else if(s == TEXT("LOADBG"))    return std::make_shared<LoadbgCommand>();\r
-       else if(s == TEXT("ADD"))               return std::make_shared<AddCommand>();\r
-       else if(s == TEXT("REMOVE"))    return std::make_shared<RemoveCommand>();\r
-       else if(s == TEXT("PAUSE"))             return std::make_shared<PauseCommand>();\r
-       else if(s == TEXT("PLAY"))              return std::make_shared<PlayCommand>();\r
-       else if(s == TEXT("STOP"))              return std::make_shared<StopCommand>();\r
-       else if(s == TEXT("CLEAR"))             return std::make_shared<ClearCommand>();\r
-       else if(s == TEXT("PRINT"))             return std::make_shared<PrintCommand>();\r
-       else if(s == TEXT("LOG"))               return std::make_shared<LogCommand>();\r
-       else if(s == TEXT("CG"))                return std::make_shared<CGCommand>();\r
-       else if(s == TEXT("DATA"))              return std::make_shared<DataCommand>();\r
-       else if(s == TEXT("CINF"))              return std::make_shared<CinfCommand>();\r
-       else if(s == TEXT("INFO"))              return std::make_shared<InfoCommand>(channels_);\r
-       else if(s == TEXT("CLS"))               return std::make_shared<ClsCommand>();\r
-       else if(s == TEXT("TLS"))               return std::make_shared<TlsCommand>();\r
-       else if(s == TEXT("VERSION"))   return std::make_shared<VersionCommand>();\r
-       else if(s == TEXT("BYE"))               return std::make_shared<ByeCommand>();\r
-       else if(s == TEXT("SET"))               return std::make_shared<SetCommand>();\r
+       if         (s == TEXT("MIXER"))                 return std::make_shared<MixerCommand>();\r
+       else if(s == TEXT("DIAG"))                      return std::make_shared<DiagnosticsCommand>();\r
+       else if(s == TEXT("CHANNEL_GRID"))      return std::make_shared<ChannelGridCommand>();\r
+       else if(s == TEXT("CALL"))                      return std::make_shared<CallCommand>();\r
+       else if(s == TEXT("SWAP"))                      return std::make_shared<SwapCommand>();\r
+       else if(s == TEXT("LOAD"))                      return std::make_shared<LoadCommand>();\r
+       else if(s == TEXT("LOADBG"))            return std::make_shared<LoadbgCommand>();\r
+       else if(s == TEXT("ADD"))                       return std::make_shared<AddCommand>();\r
+       else if(s == TEXT("REMOVE"))            return std::make_shared<RemoveCommand>();\r
+       else if(s == TEXT("PAUSE"))                     return std::make_shared<PauseCommand>();\r
+       else if(s == TEXT("PLAY"))                      return std::make_shared<PlayCommand>();\r
+       else if(s == TEXT("STOP"))                      return std::make_shared<StopCommand>();\r
+       else if(s == TEXT("CLEAR"))                     return std::make_shared<ClearCommand>();\r
+       else if(s == TEXT("PRINT"))                     return std::make_shared<PrintCommand>();\r
+       else if(s == TEXT("LOG"))                       return std::make_shared<LogCommand>();\r
+       else if(s == TEXT("CG"))                        return std::make_shared<CGCommand>();\r
+       else if(s == TEXT("DATA"))                      return std::make_shared<DataCommand>();\r
+       else if(s == TEXT("CINF"))                      return std::make_shared<CinfCommand>();\r
+       else if(s == TEXT("INFO"))                      return std::make_shared<InfoCommand>(channels_);\r
+       else if(s == TEXT("CLS"))                       return std::make_shared<ClsCommand>();\r
+       else if(s == TEXT("TLS"))                       return std::make_shared<TlsCommand>();\r
+       else if(s == TEXT("VERSION"))           return std::make_shared<VersionCommand>();\r
+       else if(s == TEXT("BYE"))                       return std::make_shared<ByeCommand>();\r
+       else if(s == TEXT("SET"))                       return std::make_shared<SetCommand>();\r
        //else if(s == TEXT("MONITOR"))\r
        //{\r
        //      result = AMCPCommandPtr(new MonitorCommand());\r