\r
#include "../StdAfx.h"\r
\r
+#pragma warning (disable: 4244)\r
+\r
#include "CIIProtocolStrategy.h"\r
#include "CIICommandsImpl.h"\r
#include <sstream>\r
#include <algorithm>\r
#include <modules/flash/producer/cg_producer.h>\r
+#include <boost/locale.hpp>\r
+#include <boost/algorithm/string/trim.hpp>\r
+#include <boost/algorithm/string/split.hpp>\r
+#include <boost/lexical_cast.hpp>\r
\r
namespace caspar { namespace protocol { namespace cii {\r
\r
{\r
layer_ = _ttoi(parameters[4].c_str());\r
filename_ = parameters[5];\r
+ if(filename_.find(L"PK/") == std::wstring::npos && filename_.find(L"PK\\") == std::wstring::npos)\r
+ filename_ = L"PK/" + filename_;\r
+\r
state_ = 1;\r
if(parameters.size() > 7) {\r
std::wstringstream dataStream;\r
std::wstring value = parameters[3];\r
std::transform(value.begin(), value.end(), value.begin(), toupper);\r
\r
- //this->pCIIStrategy_->GetChannel()->SetVideoFormat(value); TODO\r
+ this->pCIIStrategy_->GetChannel()->set_video_format_desc(core::video_format_desc::get(value));\r
}\r
}\r
\r
pCIIStrategy_->DisplayMediaFile(filename_); \r
\r
//TODO: Need to be checked for validity\r
- else if(state_ == 1)\r
- flash::get_default_cg_producer(pCIIStrategy_->GetChannel())->add(layer_, filename_, false, TEXT(""), xmlData_);\r
+ else if(state_ == 1) \r
+ {\r
+ // HACK fix. The data sent is UTF8, however the protocol is implemented for ISO-8859-1. Instead of doing risky changes we simply convert into proper encoding when leaving protocol code.\r
+ auto xmlData2 = boost::locale::conv::utf_to_utf<wchar_t, char>(std::string(xmlData_.begin(), xmlData_.end()));\r
+ flash::get_default_cg_producer(pCIIStrategy_->GetChannel())->add(layer_, filename_, false, TEXT(""), xmlData2);\r
+ }\r
}\r
\r
\r
\r
//TODO: Need to be checked for validity\r
else if(state_ == 1)\r
- flash::get_default_cg_producer(pCIIStrategy_->GetChannel())->stop(layer_, 0);\r
+ flash::get_default_cg_producer(pCIIStrategy_->GetChannel(), casparLayer_)->stop(layer_, 0);\r
else if(state_ == 2)\r
- pCIIStrategy_->GetChannel()->stage()->clear(flash::cg_producer::DEFAULT_LAYER);\r
+ pCIIStrategy_->GetChannel()->stage()->clear();\r
else if(state_ == 3)\r
- flash::get_default_cg_producer(pCIIStrategy_->GetChannel())->play(layer_);\r
+ flash::get_default_cg_producer(pCIIStrategy_->GetChannel(), casparLayer_)->play(layer_);\r
}\r
\r
void KeydataCommand::Setup(const std::vector<std::wstring>& parameters) {\r
state_ = 0;\r
}\r
\r
- if(parameters.size() > 2) \r
- layer_ = _ttoi(parameters[2].c_str()); \r
+ casparLayer_ = flash::cg_producer::DEFAULT_LAYER;\r
+ if(parameters.size() > 2)\r
+ {\r
+ //The layer parameter now supports casparlayers.\r
+ //the format is [CasparLayer]-[FlashLayer]\r
+ std::wstring str = boost::trim_copy(parameters[2]);\r
+ std::vector<std::wstring> split;\r
+ boost::split(split, str, boost::is_any_of("-"));\r
+ \r
+ try\r
+ {\r
+ casparLayer_ = boost::lexical_cast<int>(split[0]);\r
+\r
+ if(split.size() > 1)\r
+ layer_ = boost::lexical_cast<int>(split[1]);\r
+ }\r
+ catch(...)\r
+ { \r
+ casparLayer_ = flash::cg_producer::DEFAULT_LAYER;\r
+ layer_ = 0;\r
+ }\r
+ }\r
+\r
\r
if(parameters[1].at(0) == 27) //NEPTUNE: Y\<27>\X Stop layer X.\r
state_ = 1;\r