auto src_channel_layer_token = tokens[0] == L"route" ? tokens[1] : uri;\r
std::vector<std::wstring> src_channel_layer;\r
boost::split(src_channel_layer, src_channel_layer_token, boost::is_any_of("-"));\r
+ bool is_channel_layer_spec = src_channel_layer.size() == 2;\r
+ bool is_channel_spec = src_channel_layer.size() == 1;\r
+ int src_channel_index;\r
\r
- if (tokens[0] == L"route" || src_channel_layer.size() == 2) // It looks like a route\r
+ if (is_channel_layer_spec || is_channel_spec)\r
+ {\r
+ try\r
+ {\r
+ src_channel_index = boost::lexical_cast<int>(src_channel_layer[0]);\r
+ }\r
+ catch(const boost::bad_lexical_cast&)\r
+ {\r
+ is_channel_layer_spec = false;\r
+ is_channel_spec = false;\r
+ }\r
+ }\r
+\r
+ int src_layer_index = -1;\r
+\r
+ if (is_channel_layer_spec)\r
+ {\r
+ if (!src_channel_layer[1].empty())\r
+ {\r
+ try\r
+ {\r
+ src_layer_index = boost::lexical_cast<int>(src_channel_layer[1]);\r
+ }\r
+ catch(const boost::bad_lexical_cast&)\r
+ {\r
+ is_channel_layer_spec = false;\r
+ }\r
+ }\r
+ else\r
+ is_channel_layer_spec = false;\r
+ }\r
+\r
+ if (tokens[0] == L"route" || is_channel_layer_spec || is_channel_spec) // It looks like a route\r
{\r
// Find the source channel\r
- int src_channel_index = boost::lexical_cast<int>(src_channel_layer[0]);\r
auto channels = command.GetChannels();\r
auto src_channel = std::find_if(\r
channels.begin(), \r
BOOST_THROW_EXCEPTION(null_argument() << msg_info("src channel not found"));\r
\r
// Find the source layer (if one is given)\r
- int src_layer_index = -1;\r
- if (src_channel_layer.size() > 1 && !src_channel_layer[1].empty())\r
- {\r
- src_layer_index = boost::lexical_cast<int>(src_channel_layer[1]);\r
- }\r
-\r
- if (src_layer_index >= 0)\r
- {\r
+ if (is_channel_layer_spec)\r
pFP = create_layer_producer(command.GetChannel()->mixer(), (*src_channel)->stage(), src_layer_index);\r
- } else \r
- {\r
+ else \r
pFP = create_channel_producer(command.GetChannel()->mixer(), *src_channel);\r
- }\r
}\r
return pFP;\r
}\r