#include <core/mixer/mixer.h>\r
#include <core/consumer/output.h>\r
\r
+#include <modules/reroute/producer/reroute_producer.h>\r
#include <modules/bluefish/bluefish.h>\r
#include <modules/decklink/decklink.h>\r
#include <modules/ffmpeg/ffmpeg.h>\r
\r
namespace amcp {\r
\r
-AMCPCommand::AMCPCommand() : channelIndex_(0), scheduling_(Default), layerIndex_(-1)\r
+AMCPCommand::AMCPCommand() : channelIndex_(0), layerIndex_(-1)\r
{}\r
\r
void AMCPCommand::SendReply()\r
\r
bool ChannelGridCommand::DoExecute()\r
{\r
- int index = 1;\r
- auto self = GetChannels().back();\r
- \r
- std::vector<std::wstring> params;\r
- params.push_back(L"SCREEN");\r
- params.push_back(L"NAME");\r
- params.push_back(L"Channel Grid Window");\r
- auto screen = create_consumer(params);\r
-\r
- self->output().add(screen);\r
-\r
- BOOST_FOREACH(auto channel, GetChannels())\r
- {\r
- if(channel != self)\r
- {\r
- auto producer = reroute::create_producer(self->frame_factory(), *channel); \r
- self->stage().load(index, producer, false);\r
- self->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.image_transform.fill_translation[0] = x*delta;\r
- transform.image_transform.fill_translation[1] = y*delta;\r
- transform.image_transform.fill_scale[0] = delta;\r
- transform.image_transform.fill_scale[1] = delta;\r
- transform.image_transform.clip_translation[0] = x*delta;\r
- transform.image_transform.clip_translation[1] = y*delta;\r
- transform.image_transform.clip_scale[0] = delta;\r
- transform.image_transform.clip_scale[1] = delta; \r
- return transform;\r
- };\r
- self->stage().apply_transform(index, transform);\r
- }\r
- }\r
-\r
- return true;\r
+ CASPAR_THROW_EXCEPTION(not_implemented());\r
+\r
+ //int index = 1;\r
+ //auto self = GetChannels().back();\r
+ //\r
+ //std::vector<std::wstring> params;\r
+ //params.push_back(L"SCREEN");\r
+ //params.push_back(L"NAME");\r
+ //params.push_back(L"Channel Grid Window");\r
+ //auto screen = create_consumer(params);\r
+\r
+ //self->output().add(screen);\r
+\r
+ //BOOST_FOREACH(auto channel, GetChannels())\r
+ //{\r
+ // if(channel != self)\r
+ // {\r
+ // auto producer = reroute::create_producer(self->frame_factory(), *channel); \r
+ // self->stage().load(index, producer, false);\r
+ // self->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.image_transform.fill_translation[0] = x*delta;\r
+ // transform.image_transform.fill_translation[1] = y*delta;\r
+ // transform.image_transform.fill_scale[0] = delta;\r
+ // transform.image_transform.fill_scale[1] = delta;\r
+ // transform.image_transform.clip_translation[0] = x*delta;\r
+ // transform.image_transform.clip_translation[1] = y*delta;\r
+ // transform.image_transform.clip_scale[0] = delta;\r
+ // transform.image_transform.clip_scale[1] = delta; \r
+ // return transform;\r
+ // };\r
+ // self->stage().apply_transform(index, transform);\r
+ // }\r
+ //}\r
+\r
+ //return true;\r
}\r
\r
bool CallCommand::DoExecute()\r
for(auto it = std::begin(_parameters2); it != std::end(_parameters2); ++it, param += L" ")\r
param += *it;\r
\r
- auto producer = GetChannel()->stage().foreground(GetLayerIndex()).get();\r
-\r
- auto result = producer->call(boost::trim_copy(param));\r
-\r
+ auto result = GetChannel()->stage().call(GetLayerIndex(), boost::trim_copy(param));\r
+ \r
if(!result.timed_wait(boost::posix_time::seconds(2)))\r
- BOOST_THROW_EXCEPTION(timed_out());\r
+ CASPAR_THROW_EXCEPTION(timed_out());\r
\r
std::wstringstream replyString;\r
if(result.get().empty())\r
// { \r
// std::wstring fullFilename = flash::flash_producer::find_template(server::template_folder() + templatename);\r
// if(fullFilename.empty())\r
-// BOOST_THROW_EXCEPTION(file_not_found());\r
+// CASPAR_THROW_EXCEPTION(file_not_found());\r
// \r
// std::wstring extension = boost::filesystem::wpath(fullFilename).extension();\r
// std::wstring filename = templatename;\r
//Perform loading of the clip\r
try\r
{\r
- _parameters[0] = _parameters[0];\r
- auto pFP = create_producer(GetChannel()->frame_factory(), GetChannel()->video_format_desc(), _parameters);\r
+ std::shared_ptr<core::frame_producer> pFP;\r
+ \r
+ static boost::wregex expr(L"\\[(?<CHANNEL>\\d+)\\]", boost::regex::icase);\r
+ \r
+ boost::wsmatch what;\r
+ if(boost::regex_match(_parameters.at(0), what, expr))\r
+ {\r
+ auto channel_index = boost::lexical_cast<int>(what["CHANNEL"].str());\r
+ pFP = reroute::create_producer(*GetChannels().at(channel_index-1)); \r
+ }\r
+ else\r
+ pFP = create_producer(GetChannel()->frame_factory(), GetChannel()->video_format_desc(), _parameters);\r
+ \r
if(pFP == frame_producer::empty())\r
- BOOST_THROW_EXCEPTION(file_not_found() << msg_info(_parameters.size() > 0 ? _parameters[0] : L""));\r
+ CASPAR_THROW_EXCEPTION(file_not_found() << msg_info(_parameters.size() > 0 ? _parameters[0] : L""));\r
\r
bool auto_play = std::find(_parameters.begin(), _parameters.end(), L"AUTO") != _parameters.end();\r
\r
- auto pFP2 = create_transition_producer(GetChannel()->video_format_desc().field_mode, pFP, transitionInfo);\r
+ auto pFP2 = create_transition_producer(GetChannel()->video_format_desc().field_mode, spl::make_shared_ptr(pFP), transitionInfo);\r
if(auto_play)\r
GetChannel()->stage().load(GetLayerIndex(), pFP2, false, transitionInfo.duration); // TODO: LOOP\r
else\r
GetChannel()->stage().load(GetLayerIndex(), pFP2, false); // TODO: LOOP\r
\r
+ \r
SetReplyString(TEXT("202 LOADBG OK\r\n"));\r
\r
return true;\r
{\r
LoadbgCommand lbg;\r
lbg.SetChannel(GetChannel());\r
+ lbg.SetChannels(GetChannels());\r
lbg.SetChannelIndex(GetChannelIndex());\r
lbg.SetLayerIntex(GetLayerIndex());\r
lbg.SetClientInfo(GetClientInfo());\r