]> git.sesse.net Git - casparcg/commitdiff
Finished support for CHANNEL_GRID in 2.1.0
authorHelge Norberg <helge.norberg@svt.se>
Thu, 26 Sep 2013 11:52:32 +0000 (13:52 +0200)
committerHelge Norberg <helge.norberg@svt.se>
Thu, 26 Sep 2013 11:52:32 +0000 (13:52 +0200)
core/video_format.cpp
protocol/amcp/AMCPCommand.h
protocol/amcp/AMCPCommandsImpl.cpp
protocol/amcp/AMCPCommandsImpl.h
protocol/amcp/AMCPProtocolStrategy.cpp

index b9f59e9283e33cc571a802a0663d7360ca19fc3e..f799a1678225d47fc6f2155472d98b5cddaa924e 100644 (file)
@@ -31,7 +31,7 @@ namespace caspar { namespace core {
 const std::vector<video_format_desc> format_descs = boost::assign::list_of
        (video_format_desc(video_format::pal,                    720,  576, 1024, 576,  field_mode::upper,                         25,     1, L"PAL",           boost::assign::list_of<int>(3840)                        ))
        (video_format_desc(video_format::ntsc,                   720,  486,  720, 540,  field_mode::lower,                      30000,  1001, L"NTSC",          boost::assign::list_of<int>(3204)(3202)(3204)(3202)(3204)))
-       (video_format_desc(video_format::x576p2500,              720,  576,  720, 576,  field_mode::progressive,           25,     1, L"576p2500",      boost::assign::list_of<int>(3840)                        ))
+       (video_format_desc(video_format::x576p2500,              720,  576, 1024, 576,  field_mode::progressive,           25,     1, L"576p2500",      boost::assign::list_of<int>(3840)                        ))
        (video_format_desc(video_format::x720p2398,             1280,  720, 1280, 720,  field_mode::progressive,        24000,  1001, L"720p2398",      boost::assign::list_of<int>(4004)                        )) 
        (video_format_desc(video_format::x720p2400,             1280,  720, 1280, 720,  field_mode::progressive,           24,     1, L"720p2400",      boost::assign::list_of<int>(4000)                        )) 
        (video_format_desc(video_format::x720p2500,             1280,  720, 1280, 720,  field_mode::progressive,           25,     1, L"720p2500",      boost::assign::list_of<int>(3840)                        )) 
index b73cc85c7e46b869ffff85dbee57f00d91bea7ec..58a937da03687d9aa5e703ce5e1e0846e30bc165 100644 (file)
@@ -105,7 +105,7 @@ namespace amcp {
        class AMCPChannelsAwareCommand
        {
        protected:
-               AMCPChannelsAwareCommand(const std::vector<channel_context>& c) : channels_(c) {}
+               AMCPChannelsAwareCommand(const std::vector<channel_context>& channels) : channels_(channels) {}
                AMCPChannelsAwareCommand(const AMCPChannelsAwareCommand& rhs) : channels_(rhs.channels_) {}
 
                const std::vector<channel_context>& channels() { return channels_; }
index a0a3e5faccedbdc7bbbb30aae8c0f21e66566794..a20b1e01a7928d9c69289e35e0703bcb25048175 100644 (file)
@@ -314,54 +314,53 @@ bool DiagnosticsCommand::DoExecute()
 
 bool ChannelGridCommand::DoExecute()
 {
-       CASPAR_THROW_EXCEPTION(not_implemented());
-
-       //int index = 1;
-       //auto self = channels().back();
-       //
-       //std::vector<std::wstring> params;
-       //params.push_back(L"SCREEN");
-       //params.push_back(L"NAME");
-       //params.push_back(L"Channel Grid Window");
-       //auto screen = create_consumer(params);
-
-       //self->output().add(screen);
-
-       //BOOST_FOREACH(auto channel, channels())
-       //{
-       //      if(channel != self)
-       //      {
-       //              auto producer = reroute::create_producer(self->frame_factory(), *channel);              
-       //              self->stage().load(index, producer, false);
-       //              self->stage().play(index);
-       //              index++;
-       //      }
-       //}
-
-       //int n = channels().size()-1;
-       //double delta = 1.0/static_cast<double>(n);
-       //for(int x = 0; x < n; ++x)
-       //{
-       //      for(int y = 0; y < n; ++y)
-       //      {
-       //              int index = x+y*n+1;
-       //              auto transform = [=](frame_transform transform) -> frame_transform
-       //              {               
-       //                      transform.image_transform.fill_translation[0]   = x*delta;
-       //                      transform.image_transform.fill_translation[1]   = y*delta;
-       //                      transform.image_transform.fill_scale[0]                 = delta;
-       //                      transform.image_transform.fill_scale[1]                 = delta;
-       //                      transform.image_transform.clip_translation[0]   = x*delta;
-       //                      transform.image_transform.clip_translation[1]   = y*delta;
-       //                      transform.image_transform.clip_scale[0]                 = delta;
-       //                      transform.image_transform.clip_scale[1]                 = delta;                        
-       //                      return transform;
-       //              };
-       //              self->stage().apply_transform(index, transform);
-       //      }
-       //}
-
-       //return true;
+       int index = 1;
+       auto self = channels().back().channel;
+       
+       std::vector<std::wstring> params;
+       params.push_back(L"SCREEN");
+       params.push_back(L"0");
+       params.push_back(L"NAME");
+       params.push_back(L"Channel Grid Window");
+       auto screen = create_consumer(params);
+
+       self->output().add(screen);
+
+       BOOST_FOREACH(auto channel, channels())
+       {
+               if(channel.channel != self)
+               {
+                       auto producer = reroute::create_producer(*channel.channel);
+                       self->stage().load(index, producer, false);
+                       self->stage().play(index);
+                       index++;
+               }
+       }
+
+       int n = channels().size()-1;
+       double delta = 1.0/static_cast<double>(n);
+       for(int x = 0; x < n; ++x)
+       {
+               for(int y = 0; y < n; ++y)
+               {
+                       int index = x+y*n+1;
+                       auto transform = [=](frame_transform transform) -> frame_transform
+                       {               
+                               transform.image_transform.fill_translation[0]   = x*delta;
+                               transform.image_transform.fill_translation[1]   = y*delta;
+                               transform.image_transform.fill_scale[0]                 = delta;
+                               transform.image_transform.fill_scale[1]                 = delta;
+                               transform.image_transform.clip_translation[0]   = x*delta;
+                               transform.image_transform.clip_translation[1]   = y*delta;
+                               transform.image_transform.clip_scale[0]                 = delta;
+                               transform.image_transform.clip_scale[1]                 = delta;                        
+                               return transform;
+                       };
+                       self->stage().apply_transform(index, transform);
+               }
+       }
+
+       return true;
 }
 
 bool CallCommand::DoExecute()
index 8fca23c89ca73be26b5ec388ba627ae11f725f75..2ca28425d41e8edf6d25cde897a34563cec2b4fc 100644 (file)
@@ -35,10 +35,10 @@ std::wstring ListTemplates();
 
 namespace amcp {
        
-class ChannelGridCommand : public AMCPCommandBase<0>
+class ChannelGridCommand : public AMCPCommandBase<0>, AMCPChannelsAwareCommand
 {
 public:
-       explicit ChannelGridCommand(IO::ClientInfoPtr client) : AMCPCommandBase(client) {}
+       ChannelGridCommand(IO::ClientInfoPtr client, const std::vector<channel_context>& channels) : AMCPCommandBase(client), AMCPChannelsAwareCommand(channels) {}
        std::wstring print() const { return L"ChannelGridCommand";}
        bool DoExecute();
 };
index c461fe17bc32d7fc139a3116e10c35932f8b3020..bf5d1ea825b0fe505758e6e31e77894454245a01 100644 (file)
@@ -347,7 +347,7 @@ private:
        {
                std::wstring s = boost::to_upper_copy(str);
                if(s == TEXT("DIAG"))                           return std::make_shared<DiagnosticsCommand>(client);
-               else if(s == TEXT("CHANNEL_GRID"))      return std::make_shared<ChannelGridCommand>(client);
+               else if(s == TEXT("CHANNEL_GRID"))      return std::make_shared<ChannelGridCommand>(client, channels_);
                else if(s == TEXT("DATA"))                      return std::make_shared<DataCommand>(client);
                else if(s == TEXT("CINF"))                      return std::make_shared<CinfCommand>(client);
                else if(s == TEXT("INFO"))                      return std::make_shared<InfoCommand>(client, channels_);