]> git.sesse.net Git - casparcg/commitdiff
Rebase parameters branch on current master.
authorcambell <cambell.prince@gmail.com>
Fri, 31 May 2013 02:01:53 +0000 (09:01 +0700)
committercambell <cambell.prince@gmail.com>
Fri, 31 May 2013 02:01:53 +0000 (09:01 +0700)
* Change parameters const& to const parameters& for coding style.
* Update thumbnail producer to use parameters class.
* Update some methods to use params.get(...) rather than get_params.

Conflicts:
core/core.vcxproj

43 files changed:
common/utility/param.h [deleted file]
core/consumer/frame_consumer.cpp
core/consumer/frame_consumer.h
core/core.vcxproj
core/parameters/parameters.cpp [new file with mode: 0644]
core/parameters/parameters.h [new file with mode: 0644]
core/producer/color/color_producer.cpp
core/producer/color/color_producer.h
core/producer/frame_producer.cpp
core/producer/frame_producer.h
modules/bluefish/bluefish.cpp
modules/bluefish/consumer/bluefish_consumer.cpp
modules/bluefish/consumer/bluefish_consumer.h
modules/decklink/consumer/decklink_consumer.cpp
modules/decklink/consumer/decklink_consumer.h
modules/decklink/decklink.cpp
modules/decklink/producer/decklink_producer.cpp
modules/decklink/producer/decklink_producer.h
modules/ffmpeg/consumer/ffmpeg_consumer.cpp
modules/ffmpeg/consumer/ffmpeg_consumer.h
modules/ffmpeg/ffmpeg.cpp
modules/ffmpeg/producer/ffmpeg_producer.cpp
modules/ffmpeg/producer/ffmpeg_producer.h
modules/flash/producer/cg_producer.cpp
modules/flash/producer/cg_producer.h
modules/flash/producer/flash_producer.cpp
modules/flash/producer/flash_producer.h
modules/image/consumer/image_consumer.cpp
modules/image/consumer/image_consumer.h
modules/image/image.cpp
modules/image/producer/image_producer.cpp
modules/image/producer/image_producer.h
modules/image/producer/image_scroll_producer.cpp
modules/image/producer/image_scroll_producer.h
modules/oal/consumer/oal_consumer.cpp
modules/oal/consumer/oal_consumer.h
modules/oal/oal.cpp
modules/ogl/consumer/ogl_consumer.cpp
modules/ogl/consumer/ogl_consumer.h
modules/ogl/ogl.cpp
protocol/amcp/AMCPCommand.h
protocol/amcp/AMCPCommandsImpl.cpp
shell/server.cpp

diff --git a/common/utility/param.h b/common/utility/param.h
deleted file mode 100644 (file)
index 0963e65..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*\r
-* Copyright 2013 Sveriges Television AB http://casparcg.com/\r
-*\r
-* This file is part of CasparCG (www.casparcg.com).\r
-*\r
-* CasparCG is free software: you can redistribute it and/or modify\r
-* it under the terms of the GNU General Public License as published by\r
-* the Free Software Foundation, either version 3 of the License, or\r
-* (at your option) any later version.\r
-*\r
-* CasparCG is distributed in the hope that it will be useful,\r
-* but WITHOUT ANY WARRANTY; without even the implied warranty of\r
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-* GNU General Public License for more details.\r
-*\r
-* You should have received a copy of the GNU General Public License\r
-* along with CasparCG. If not, see <http://www.gnu.org/licenses/>.\r
-*\r
-* Author: Robert Nagy, ronag89@gmail.com\r
-*/\r
-#pragma once\r
-\r
-#include <boost/lexical_cast.hpp>\r
-\r
-#include <type_traits>\r
-#include <string>\r
-\r
-namespace caspar {\r
-               \r
-template<typename T, typename C>\r
-typename std::enable_if<!std::is_convertible<T, std::wstring>::value, typename std::decay<T>::type>::type get_param(const std::wstring& name, C&& params, T fail_value = T())\r
-{      \r
-       auto it = std::find(std::begin(params), std::end(params), name);\r
-       if(it == params.end() || ++it == params.end())  \r
-               return fail_value;\r
-       \r
-       T value = fail_value;\r
-       try\r
-       {\r
-               value = boost::lexical_cast<std::decay<T>::type>(*it);\r
-       }\r
-       catch(boost::bad_lexical_cast&){}\r
-\r
-       return value;\r
-}\r
-\r
-template<typename C>\r
-std::wstring get_param(const std::wstring& name, C&& params, const std::wstring& fail_value = L"")\r
-{      \r
-       auto it = std::find(std::begin(params), std::end(params), name);\r
-       if(it == params.end() || ++it == params.end())  \r
-               return fail_value;\r
-       return *it;\r
-}\r
-\r
-}
\ No newline at end of file
index e3f57f47fedcc00c0d7669e720a17cbc09d94c30..f8a87c3a1bb455efd6099437a7a77eb717b64e8b 100644 (file)
@@ -27,6 +27,7 @@
 #include <common/memory/safe_ptr.h>\r
 #include <common/exception/exceptions.h>\r
 #include <common/concurrency/future_util.h>\r
+#include <core/parameters/parameters.h>\r
 #include <core/video_format.h>\r
 #include <core/mixer/read_frame.h>\r
 \r
@@ -41,7 +42,7 @@ void register_consumer_factory(const consumer_factory_t& factory)
        g_factories.push_back(factory);\r
 }\r
 \r
-safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params)\r
+safe_ptr<core::frame_consumer> create_consumer(const core::parameters& params)\r
 {\r
        if(params.empty())\r
                BOOST_THROW_EXCEPTION(invalid_argument() << arg_name_info("params") << arg_value_info(""));\r
index c4085cf51b66ca20e67b493e8564416f4d378a7b..52e2c321107b9701cad643f9895ffb377b5426cb 100644 (file)
@@ -34,6 +34,7 @@
 namespace caspar { namespace core {\r
        \r
 class read_frame;\r
+class parameters;\r
 struct video_format_desc;\r
 \r
 struct frame_consumer : boost::noncopyable\r
@@ -53,9 +54,9 @@ struct frame_consumer : boost::noncopyable
 \r
 safe_ptr<frame_consumer> create_consumer_cadence_guard(const safe_ptr<frame_consumer>& consumer);\r
 \r
-typedef std::function<safe_ptr<core::frame_consumer>(const std::vector<std::wstring>&)> consumer_factory_t;\r
+typedef std::function<safe_ptr<core::frame_consumer>(const core::parameters&)> consumer_factory_t;\r
 \r
 void register_consumer_factory(const consumer_factory_t& factory);\r
-safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params);\r
+safe_ptr<core::frame_consumer> create_consumer(const core::parameters& params);\r
 \r
 }}
\ No newline at end of file
index da3abde537642b262c6618196b54f33e815eb0e4..a28e87e2ae047b5fc1e63a523a17f8e39b8bdcf5 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>\r
+<?xml version="1.0" encoding="utf-8"?>\r
 <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">\r
   <ItemGroup Label="ProjectConfigurations">\r
     <ProjectConfiguration Include="Profile|Win32">\r
     <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="parameters\parameters.h" />\r
     <ClInclude Include="monitor\monitor.h" />\r
     <ClInclude Include="producer\channel\channel_producer.h" />\r
     <ClInclude Include="thumbnail_generator.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="parameters\parameters.cpp">\r
+      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../stdafx.h</PrecompiledHeaderFile>\r
+      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../stdafx.h</PrecompiledHeaderFile>\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="monitor\monitor.cpp">\r
       <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">../stdafx.h</PrecompiledHeaderFile>\r
       <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">../stdafx.h</PrecompiledHeaderFile>\r
diff --git a/core/parameters/parameters.cpp b/core/parameters/parameters.cpp
new file mode 100644 (file)
index 0000000..918027e
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2011 Sveriges Television AB <info@casparcg.com>
+*
+* This file is part of CasparCG (www.casparcg.com).
+*
+* CasparCG is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* CasparCG is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with CasparCG. If not, see <http://www.gnu.org/licenses/>.
+*
+* Author: Cambell Prince, cambell.prince@gmail.com
+*/
+
+#include "../StdAfx.h"
+
+#include "parameters.h"
+
+#include <boost/algorithm/string.hpp>
+
+//#if defined(_MSC_VER)
+//#pragma warning (push, 1) // TODO: Legacy code, just disable warnings
+//#endif
+
+namespace caspar { namespace core {
+
+parameters::parameters(std::vector<std::wstring> const& params) :
+       params_(params)
+{
+       params_original_ = params_;
+}
+
+void parameters::clear()
+{
+       params_.clear();
+}
+
+void parameters::to_upper()
+{
+       for(size_t n = 0; n < params_.size(); ++n)
+       {
+               params_[n] = boost::to_upper_copy(params_[n]);
+       }
+}
+
+bool parameters::has(std::wstring const& parameter) const
+{
+       return boost::range::find(params_, parameter) != params_.end();
+}
+
+std::vector<std::wstring> parameters::protocol_split(std::wstring const& s)
+{
+       std::vector<std::wstring> result;
+       size_t pos;
+       if ((pos = s.find_first_of(L"://")) != std::wstring::npos)
+       {
+               result.push_back(s.substr(0, pos));
+               result.push_back(s.substr(pos + 3));
+       } else
+       {
+               result.push_back(L"");
+               result.push_back(s);
+       }
+       return result;
+}
+
+std::wstring parameters::get(std::wstring const& key, std::wstring const& default_value) const
+{      
+       auto it = std::find(std::begin(params_), std::end(params_), key);
+       if (it == params_.end() || ++it == params_.end())       
+               return default_value;
+       return *it;
+}
+
+std::wstring parameters::get_original() const
+{
+       std::wstring str;
+       BOOST_FOREACH(auto& param, params_)
+       {
+               str += param + L" ";
+       }
+       return str;
+}
+
+std::wstring parameters::at_original(size_t i) const
+{
+       return params_original_[i];
+}
+
+void parameters::set(size_t index, std::wstring const& value)
+{
+       if (index < params_.size())
+       {
+               params_[index] = value;
+       }
+       if (index < params_original_.size())
+       {
+               params_original_[index] = value;
+       }
+}
+
+}}
diff --git a/core/parameters/parameters.h b/core/parameters/parameters.h
new file mode 100644 (file)
index 0000000..aca91ab
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+* Copyright (c) 2011 Sveriges Television AB <info@casparcg.com>
+*
+* This file is part of CasparCG (www.casparcg.com).
+*
+* CasparCG is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* CasparCG is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with CasparCG. If not, see <http://www.gnu.org/licenses/>.
+*
+* Author: Cambell Prince, cambell.prince@gmail.com
+*/
+
+#pragma once
+
+#include <string>
+#include <vector>
+#include <stdint.h>
+
+namespace caspar { 
+       
+namespace core {
+
+class parameters
+{
+       std::vector<std::wstring> params_;
+       std::vector<std::wstring> params_original_;
+
+public:
+       parameters() {}
+
+       parameters(std::vector<std::wstring> const& params);
+
+       std::vector<std::wstring> const& get_params() const {
+               return params_;
+       }
+
+       static std::vector<std::wstring> protocol_split(std::wstring const& s);
+
+       void to_upper();
+       
+       bool has(std::wstring const& key) const;
+
+       template<typename C>
+       typename std::enable_if<!std::is_convertible<C, std::wstring>::value, typename std::decay<C>::type>::type get(std::wstring const& key, C default_value = C()) const
+       {       
+               auto it = std::find(std::begin(params_), std::end(params_), key);
+               if(it == params_.end() || ++it == params_.end())        
+                       return default_value;
+       
+               C value = default_value;
+               try
+               {
+                       value = boost::lexical_cast<std::decay<C>::type>(*it);
+               }
+               catch(boost::bad_lexical_cast&){}
+
+               return value;
+       }
+
+       std::wstring get(std::wstring const& key, std::wstring const& default_value = L"") const;
+
+       std::wstring get_original() const;
+
+       std::wstring at_original(size_t i) const;
+
+       void set(size_t index, std::wstring const& value);
+
+       // Type conversion operator for compatibiltiy with existing code not yet updated.
+       operator std::vector<std::wstring> const& () const
+       {
+               return params_;
+       }
+
+       // Compatibility method though likely to be useful
+       void clear();
+
+       // Compatibility method though likely to be useful
+       bool empty() const
+       {
+               return params_.empty();
+       }
+
+       // Compatibility method, though likely to be useful.
+       size_t size() const
+       {
+               return params_.size();
+       }
+
+       // Compatibility method
+       void push_back(std::wstring const& s)
+       {
+               params_.push_back(s);
+               params_original_.push_back(s);
+       }
+
+       // Compatibility method
+       std::wstring const& at(int i) const
+       {
+               return params_.at(i);
+       }
+
+       // Compatibility method
+       std::wstring const& back() const
+       {
+               return params_.back();
+       }
+
+       // Compatibility method
+       void pop_back()
+       {
+               params_.pop_back();
+       }
+
+       // Compatibility method
+       std::wstring const& operator [] (size_t i) const
+       {
+               return params_[i];
+       }
+
+       // Compatibility method
+       // Used for the upper casing
+       //std::wstring& operator [] (size_t i) {
+       //      return params_[i];
+       //}
+
+       // Compatibility method
+       std::vector<std::wstring>::const_iterator begin() const
+       {
+               return params_.begin();
+       }
+
+       // Compatibility method
+       std::vector<std::wstring>::const_iterator end() const
+       {
+               return params_.end();
+       }
+
+};
+
+}}
+
index 92605edcfa532b7778ead98a9fb8f2c7e02c7587..0de36e0c737ea596255ede83e72e269f8c9402d0 100644 (file)
@@ -31,6 +31,8 @@
 \r
 #include <common/exception/exceptions.h>\r
 \r
+#include <core/parameters/parameters.h>\r
+\r
 #include <boost/algorithm/string.hpp>\r
 \r
 #include <sstream>\r
@@ -126,10 +128,9 @@ std::wstring get_hex_color(const std::wstring& str)
 \r
 safe_ptr<frame_producer> create_color_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params)\r
+               const core::parameters& params)\r
 {\r
-       if(params.size() < 0)\r
+       if(params.empty())\r
                return core::frame_producer::empty();\r
 \r
        auto color2 = get_hex_color(params[0]);\r
index 48c662b1675981d91c828cd6f1035b32bc543125..de64772d8c9ea2fb38b4af2425bafb5130b79479 100644 (file)
@@ -33,8 +33,7 @@ struct frame_factory;
 \r
 safe_ptr<frame_producer> create_color_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params);\r
+               const core::parameters& params);\r
 safe_ptr<core::write_frame> create_color_frame(void* tag, const safe_ptr<core::frame_factory>& frame_factory, const std::wstring& color);\r
 \r
 }}\r
index d37a3ac3aae5008d7bf9c31e5071ff01d859aa92..194080ddb9a8e8771d37fa28af5e9cf11da00efb 100644 (file)
@@ -25,6 +25,8 @@
 #include "frame/basic_frame.h"\r
 #include "frame/frame_transform.h"\r
 \r
+#include "../parameters/parameters.h"\r
+\r
 #include "color/color_producer.h"\r
 #include "separated/separated_producer.h"\r
 \r
@@ -241,9 +243,9 @@ void register_thumbnail_producer_factory(const producer_factory_t& factory)
        g_thumbnail_factories.push_back(factory);\r
 }\r
 \r
-safe_ptr<core::frame_producer> do_create_producer(const safe_ptr<frame_factory>& my_frame_factory, const std::vector<std::wstring>& upper_case_params, const std::vector<std::wstring>& original_case_params, const std::vector<const producer_factory_t>& factories, bool throw_on_fail = false)\r
+safe_ptr<core::frame_producer> do_create_producer(const safe_ptr<frame_factory>& my_frame_factory, const core::parameters& params, const std::vector<const producer_factory_t>& factories, bool throw_on_fail = false)\r
 {\r
-       if(upper_case_params.empty())\r
+       if(params.empty())\r
                BOOST_THROW_EXCEPTION(invalid_argument() << arg_name_info("params") << arg_value_info(""));\r
        \r
        auto producer = frame_producer::empty();\r
@@ -251,7 +253,7 @@ safe_ptr<core::frame_producer> do_create_producer(const safe_ptr<frame_factory>&
                {\r
                        try\r
                        {\r
-                               producer = factory(my_frame_factory, upper_case_params, original_case_params);\r
+                               producer = factory(my_frame_factory, params);\r
                        }\r
                        catch(...)\r
                        {\r
@@ -264,38 +266,35 @@ safe_ptr<core::frame_producer> do_create_producer(const safe_ptr<frame_factory>&
                });\r
 \r
        if(producer == frame_producer::empty())\r
-               producer = create_color_producer(my_frame_factory, upper_case_params, original_case_params);\r
+               producer = create_color_producer(my_frame_factory, params);\r
        return producer;\r
 }\r
 \r
-safe_ptr<core::frame_producer> create_producer(const safe_ptr<frame_factory>& my_frame_factory, const std::vector<std::wstring>& upper_case_params, const std::vector<std::wstring>& original_case_params)\r
+safe_ptr<core::frame_producer> create_producer(const safe_ptr<frame_factory>& my_frame_factory, const core::parameters& params)\r
 {      \r
-       auto producer = do_create_producer(my_frame_factory, upper_case_params, original_case_params, g_factories);\r
+       auto producer = do_create_producer(my_frame_factory, params, g_factories);\r
        auto key_producer = frame_producer::empty();\r
        \r
        std::wstring resource_name = L"";\r
-       auto tokens = protocol_split(original_case_params[0]);\r
+       auto tokens = parameters::protocol_split(params.at_original(0));\r
        if (tokens[0].empty())\r
        {\r
-               resource_name = original_case_params[0];\r
+               resource_name = params.at_original(0);\r
        }\r
 \r
        if(!resource_name.empty()) {\r
        try // to find a key file.\r
        {\r
-               auto upper_params_copy = upper_case_params;\r
-               auto original_params_copy = original_case_params;\r
-\r
-               if(upper_case_params.size() > 0)\r
+               auto params_copy = params;\r
+               if(params_copy.size() > 0)\r
                {\r
-                       upper_params_copy[0] += L"_A";\r
-                       original_params_copy[0] += L"_A";\r
-                       key_producer = do_create_producer(my_frame_factory, upper_params_copy, original_params_copy, g_factories);                      \r
+                       auto resource_name = params_copy[0];\r
+                       params_copy.set(0, resource_name + L"_A");\r
+                       key_producer = do_create_producer(my_frame_factory, params_copy, g_factories);                  \r
                        if(key_producer == frame_producer::empty())\r
                        {\r
-                               upper_params_copy[0] += L"LPHA";\r
-                               original_params_copy[0] += L"LPHA";\r
-                               key_producer = do_create_producer(my_frame_factory, upper_params_copy, original_params_copy, g_factories);      \r
+                               params_copy.set(0, resource_name + L"_ALPHA");\r
+                               key_producer = do_create_producer(my_frame_factory, params_copy, g_factories);  \r
                        }\r
                }\r
        }\r
@@ -307,9 +306,7 @@ safe_ptr<core::frame_producer> create_producer(const safe_ptr<frame_factory>& my
        \r
        if(producer == frame_producer::empty())\r
        {\r
-               std::wstring str;\r
-               BOOST_FOREACH(auto& param, original_case_params)\r
-                       str += param + L" ";\r
+               std::wstring str = params.get_original();\r
                BOOST_THROW_EXCEPTION(file_not_found() << msg_info("No match found for supplied commands. Check syntax.") << arg_value_info(narrow(str)));\r
        }\r
 \r
@@ -321,7 +318,7 @@ safe_ptr<core::frame_producer> create_thumbnail_producer(const safe_ptr<frame_fa
        std::vector<std::wstring> params;\r
        params.push_back(media_file);\r
 \r
-       auto producer = do_create_producer(my_frame_factory, params, params, g_thumbnail_factories, true);\r
+       auto producer = do_create_producer(my_frame_factory, params, g_thumbnail_factories, true);\r
        auto key_producer = frame_producer::empty();\r
        \r
        try // to find a key file.\r
@@ -330,11 +327,11 @@ safe_ptr<core::frame_producer> create_thumbnail_producer(const safe_ptr<frame_fa
                if (params_copy.size() > 0)\r
                {\r
                        params_copy[0] += L"_A";\r
-                       key_producer = do_create_producer(my_frame_factory, params_copy, params_copy, g_thumbnail_factories, true);\r
+                       key_producer = do_create_producer(my_frame_factory, params_copy, g_thumbnail_factories, true);\r
                        if (key_producer == frame_producer::empty())\r
                        {\r
                                params_copy[0] += L"LPHA";\r
-                               key_producer = do_create_producer(my_frame_factory, params_copy, params_copy, g_thumbnail_factories, true);\r
+                               key_producer = do_create_producer(my_frame_factory, params_copy, g_thumbnail_factories, true);\r
                        }\r
                }\r
        }\r
@@ -346,13 +343,11 @@ safe_ptr<core::frame_producer> create_thumbnail_producer(const safe_ptr<frame_fa
        return producer;\r
 }\r
 \r
-safe_ptr<core::frame_producer> create_producer(const safe_ptr<frame_factory>& factory, const std::wstring& params)\r
+safe_ptr<core::frame_producer> create_producer(const safe_ptr<frame_factory>& factory, const std::wstring& param)\r
 {\r
-       std::wstringstream iss(params);\r
-       std::vector<std::wstring> tokens;\r
-       typedef std::istream_iterator<std::wstring, wchar_t, std::char_traits<wchar_t> > iterator;\r
-       std::copy(iterator(iss),  iterator(), std::back_inserter(tokens));\r
-       return create_producer(factory, tokens, tokens);\r
+       parameters params;\r
+       params.push_back(param);\r
+       return create_producer(factory, params);\r
 }\r
 \r
 std::vector<std::wstring> protocol_split(std::wstring const& s)\r
index 313bd9850a129f7e040bede8955287883c71dca8..678ddbd2a8dde895e8b4bc0a814ef70799574a3d 100644 (file)
@@ -45,6 +45,7 @@ class executor;
 namespace core {\r
 \r
 class basic_frame;\r
+class parameters;\r
 struct frame_factory;\r
 \r
 struct frame_producer : boost::noncopyable\r
@@ -83,15 +84,13 @@ public:
 \r
 safe_ptr<basic_frame> receive_and_follow(safe_ptr<frame_producer>& producer, int hints);\r
 \r
-typedef std::function<safe_ptr<core::frame_producer>(const safe_ptr<frame_factory>&, const std::vector<std::wstring>& upper_case_params, const std::vector<std::wstring>& original_case_params)> producer_factory_t;\r
+typedef std::function<safe_ptr<core::frame_producer>(const safe_ptr<frame_factory>&, const core::parameters& params)> producer_factory_t;\r
 void register_producer_factory(const producer_factory_t& factory); // Not thread-safe.\r
 void register_thumbnail_producer_factory(const producer_factory_t& factory); // Not thread-safe.\r
-safe_ptr<core::frame_producer> create_producer(const safe_ptr<frame_factory>&, const std::vector<std::wstring>& upper_case_params, const std::vector<std::wstring>& original_case_params);\r
+safe_ptr<core::frame_producer> create_producer(const safe_ptr<frame_factory>&, const core::parameters& params);\r
 safe_ptr<core::frame_producer> create_producer(const safe_ptr<frame_factory>&, const std::wstring& params);\r
 safe_ptr<core::frame_producer> create_producer_destroy_proxy(safe_ptr<core::frame_producer> producer);\r
 safe_ptr<core::frame_producer> create_producer_print_proxy(safe_ptr<core::frame_producer> producer);\r
 safe_ptr<core::frame_producer> create_thumbnail_producer(const safe_ptr<frame_factory>& factory, const std::wstring& media_file);\r
 \r
-std::vector<std::wstring> protocol_split(std::wstring const& s);\r
-\r
 }}\r
index 62cb6d8d7d140db90f472bbdf5038f80ce40da98..e612939f6fef258e6f51b2d0e28a9cc889e212e7 100644 (file)
@@ -28,6 +28,7 @@
 #include <common/log/log.h>\r
 #include <common/utility/string.h>\r
 \r
+#include <core/parameters/parameters.h>\r
 #include <core/consumer/frame_consumer.h>\r
 \r
 #include <boost/lexical_cast.hpp>\r
@@ -39,9 +40,9 @@ void init()
        try\r
        {\r
                blue_initialize();\r
-               core::register_consumer_factory([](const std::vector<std::wstring>& params)\r
+               core::register_consumer_factory([](const core::parameters& params)\r
                {\r
-                       return create_consumer(params);\r
+                       return bluefish::create_consumer(params);\r
                });\r
        }\r
        catch(...){}\r
index 7db7417fb7cecf7d3273a5470c84e187748dd3a7..6da748c8cb0aa9a8c40aca9c1d8f0d6b074a55ec 100644 (file)
@@ -25,6 +25,7 @@
 #include "../util/blue_velvet.h"\r
 #include "../util/memory.h"\r
 \r
+#include <core/parameters/parameters.h>
 #include <core/video_format.h>\r
 #include <core/mixer/read_frame.h>\r
 \r
@@ -34,7 +35,6 @@
 #include <common/memory/memcpy.h>\r
 #include <common/memory/memshfl.h>\r
 #include <common/utility/timer.h>\r
-#include <common/utility/param.h>\r
 \r
 #include <core/consumer/frame_consumer.h>\r
 #include <core/mixer/audio/audio_util.h>\r
@@ -437,7 +437,7 @@ public:
        }\r
 };     \r
 \r
-safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params)\r
+safe_ptr<core::frame_consumer> create_consumer(const core::parameters& params)
 {\r
        if(params.size() < 1 || params[0] != L"BLUEFISH")\r
                return core::frame_consumer::empty();\r
@@ -447,7 +447,7 @@ safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>&
        const auto embedded_audio       = std::find(params.begin(), params.end(), L"EMBEDDED_AUDIO") != params.end();\r
        const auto key_only                     = std::find(params.begin(), params.end(), L"KEY_ONLY")     != params.end();\r
        const auto audio_layout         = core::default_channel_layout_repository().get_by_name(\r
-                       get_param(L"CHANNEL_LAYOUT", params, L"STEREO"));\r
+                       params.get(L"CHANNEL_LAYOUT", L"STEREO"));\r
 \r
        return make_safe<bluefish_consumer_proxy>(device_index, embedded_audio, key_only, audio_layout);\r
 }\r
index 5ff534755c690927b2cdeac3d9c4b8ed4c7bc698..c34937b8940eaa2936ae8db6ded93951c207f87e 100644 (file)
@@ -31,11 +31,12 @@ namespace caspar {
 \r
 namespace core {\r
        struct frame_consumer;\r
+       class parameters;\r
 }\r
         \r
 namespace bluefish {\r
 \r
-safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params);\r
+safe_ptr<core::frame_consumer> create_consumer(const core::parameters& params);\r
 safe_ptr<core::frame_consumer> create_consumer(const boost::property_tree::wptree& ptree);\r
 \r
 }}
\ No newline at end of file
index 373013ae946b0d6cf4c20406bf9cd05a004d3e38..cf42170c7bf87ee9ef425034cbd15d767ff91bad 100644 (file)
@@ -36,8 +36,8 @@
 #include <common/memory/memcpy.h>\r
 #include <common/memory/memclr.h>\r
 #include <common/memory/memshfl.h>\r
-#include <common/utility/param.h>\r
 \r
+#include <core/parameters/parameters.h>
 #include <core/consumer/frame_consumer.h>\r
 #include <core/mixer/audio/audio_util.h>\r
 \r
@@ -660,7 +660,7 @@ public:
        }\r
 };     \r
 \r
-safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params) \r
+safe_ptr<core::frame_consumer> create_consumer(const core::parameters& params) 
 {\r
        if(params.size() < 1 || params[0] != L"DECKLINK")\r
                return core::frame_consumer::empty();\r
@@ -683,7 +683,7 @@ safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>&
        config.embedded_audio   = std::find(params.begin(), params.end(), L"EMBEDDED_AUDIO") != params.end();\r
        config.key_only                 = std::find(params.begin(), params.end(), L"KEY_ONLY")           != params.end();\r
        config.audio_layout             = core::default_channel_layout_repository().get_by_name(\r
-                       get_param(L"CHANNEL_LAYOUT", params, L"STEREO"));\r
+                       params.get(L"CHANNEL_LAYOUT", L"STEREO"));\r
 \r
        return make_safe<decklink_consumer_proxy>(config);\r
 }\r
index c81a8f7a27908a79c23de668867b934489a3318b..34824041c44ead2a89bcedba4d3206d79cdc1418 100644 (file)
@@ -34,11 +34,12 @@ namespace caspar {
 \r
 namespace core {\r
        struct frame_consumer;\r
+       class parameters;\r
 }\r
 \r
 namespace decklink {\r
 \r
-safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params);\r
+safe_ptr<core::frame_consumer> create_consumer(const core::parameters& params);\r
 safe_ptr<core::frame_consumer> create_consumer(const boost::property_tree::wptree& ptree);\r
 \r
 }}
\ No newline at end of file
index 5cc69fb9f1980ac5919cbf24e71c4a00117ec7a5..0dbd88436f90612c2e4563475696243559b8a37e 100644 (file)
@@ -27,6 +27,7 @@
 #include "consumer/decklink_consumer.h"\r
 #include "producer/decklink_producer.h"\r
 \r
+#include <core/parameters/parameters.h>\r
 #include <core/consumer/frame_consumer.h>\r
 #include <core/producer/frame_producer.h>\r
 \r
@@ -56,7 +57,7 @@ void init()
        if(FAILED(pDecklinkIterator.CoCreateInstance(CLSID_CDeckLinkIterator)))         \r
                return;\r
                \r
-       core::register_consumer_factory([](const std::vector<std::wstring>& params){return create_consumer(params);});\r
+       core::register_consumer_factory([](const core::parameters& params){return decklink::create_consumer(params);});\r
        core::register_producer_factory(create_producer);\r
 }\r
 \r
index 7851ecc51c1bfc24b922bc1b6fb75f973271728c..d88834d329f65eb7e3fe2b302324144a29975c2a 100644 (file)
@@ -36,8 +36,8 @@
 #include <common/exception/exceptions.h>\r
 #include <common/log/log.h>\r
 #include <common/memory/memclr.h>\r
-#include <common/utility/param.h>\r
 \r
+#include <core/parameters/parameters.h>\r
 #include <core/monitor/monitor.h>\r
 #include <core/mixer/write_frame.h>\r
 #include <core/mixer/audio/audio_util.h>\r
@@ -383,21 +383,20 @@ public:
 \r
 safe_ptr<core::frame_producer> create_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params)\r
+               const core::parameters& params)\r
 {\r
        if(params.empty() || !boost::iequals(params[0], "decklink"))\r
                return core::frame_producer::empty();\r
 \r
-       auto device_index       = get_param(L"DEVICE", params, -1);\r
+       auto device_index       = params.get(L"DEVICE", -1);\r
        if(device_index == -1)\r
                device_index = boost::lexical_cast<int>(params.at(1));\r
-       auto filter_str                 = get_param(L"FILTER", params);         \r
-       auto length                             = get_param(L"LENGTH", params, std::numeric_limits<uint32_t>::max());   \r
-       auto buffer_depth               = get_param(L"BUFFER", params, 2);      \r
-       auto format_desc                = core::video_format_desc::get(get_param(L"FORMAT", params, L"INVALID"));\r
+       auto filter_str         = params.get(L"FILTER");        \r
+       auto length                     = params.get(L"LENGTH", std::numeric_limits<uint32_t>::max());  \r
+       auto buffer_depth       = params.get(L"BUFFER", 2);     \r
+       auto format_desc        = core::video_format_desc::get(params.get(L"FORMAT", L"INVALID"));\r
        auto audio_layout               = core::create_custom_channel_layout(\r
-                       get_param(L"CHANNEL_LAYOUT", params, L"STEREO"),\r
+                       params.get(L"CHANNEL_LAYOUT", L"STEREO"),\r
                        core::default_channel_layout_repository());\r
        \r
        boost::replace_all(filter_str, L"DEINTERLACE", L"YADIF=0:-1");\r
index b31ceaf70ff5461cf5f36156bfebc112395bf666..e8a71425598740af83cf392d01c3c002781236b5 100644 (file)
 #include <string>\r
 #include <vector>\r
 \r
-namespace caspar { namespace decklink {\r
+namespace caspar {\r
+namespace core {\r
+       class parameters;\r
+}\r
+namespace decklink {\r
        \r
 safe_ptr<core::frame_producer> create_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params);\r
+               const core::parameters& params);\r
 \r
 }}\r
index 786d3a8f938ff327bace8ece8c8d8c9d6dfd9d35..8d093cc3fe4fcc10445ebe6d1909fb969d222e00 100644 (file)
@@ -27,6 +27,7 @@
 \r
 #include "../producer/audio/audio_resampler.h"\r
 \r
+#include <core/parameters/parameters.h>\r
 #include <core/mixer/read_frame.h>\r
 #include <core/mixer/audio/audio_util.h>\r
 #include <core/consumer/frame_consumer.h>\r
@@ -37,7 +38,6 @@
 #include <common/diagnostics/graph.h>\r
 #include <common/env.h>\r
 #include <common/utility/string.h>\r
-#include <common/utility/param.h>\r
 #include <common/memory/memshfl.h>\r
 \r
 #include <boost/algorithm/string.hpp>\r
@@ -744,7 +744,7 @@ private:
        }\r
 };     \r
 \r
-safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params)\r
+safe_ptr<core::frame_consumer> create_consumer(const core::parameters& params)\r
 {\r
        if(params.size() < 1 || params[0] != L"FILE")\r
                return core::frame_consumer::empty();\r
index 0b7204d6844adf0273310120d4d780415a318121..ecd061cdba7b883716f8b8c6d625ac5a56fa14a8 100644 (file)
@@ -30,12 +30,12 @@ namespace caspar {
 \r
 namespace core {\r
        struct frame_consumer;\r
+       class parameters;\r
 }\r
 \r
 namespace ffmpeg {\r
-\r
        \r
-safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params);\r
+safe_ptr<core::frame_consumer> create_consumer(const core::parameters& params);\r
 safe_ptr<core::frame_consumer> create_consumer(const boost::property_tree::wptree& ptree);\r
 \r
 }}
\ No newline at end of file
index 61433deea4a16008abbf21fb02a6bb98805fd746..ad9a1becc134a7f4afc8454a789ade2283021b09 100644 (file)
@@ -26,6 +26,7 @@
 \r
 #include <common/log/log.h>\r
 \r
+#include <core/parameters/parameters.h>\r
 #include <core/consumer/frame_consumer.h>\r
 #include <core/producer/frame_producer.h>\r
 \r
@@ -248,7 +249,7 @@ void init()
        avcodec_init();\r
     avcodec_register_all();\r
        \r
-       core::register_consumer_factory([](const std::vector<std::wstring>& params){return create_consumer(params);});\r
+       core::register_consumer_factory([](const core::parameters& params){return ffmpeg::create_consumer(params);});\r
        core::register_producer_factory(create_producer);\r
        core::register_thumbnail_producer_factory(create_thumbnail_producer);\r
 }\r
index eaf12d0fe9b95fbf73eb0d397e16de0ad9ce3bed..c6b810a7e38136362743d083e24390628b8f7855 100644 (file)
 \r
 #include <common/env.h>\r
 #include <common/utility/assert.h>\r
-#include <common/utility/param.h>\r
 #include <common/diagnostics/graph.h>\r
 \r
 #include <core/monitor/monitor.h>\r
 #include <core/video_format.h>\r
+#include <core/parameters/parameters.h>\r
 #include <core/producer/frame_producer.h>\r
 #include <core/producer/frame/frame_factory.h>\r
 #include <core/producer/frame/basic_frame.h>\r
@@ -461,15 +461,14 @@ public:
 \r
 safe_ptr<core::frame_producer> create_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params)\r
+               const core::parameters& params)\r
 {              \r
        static const std::vector<std::wstring> invalid_exts = boost::assign::list_of(L".png")(L".tga")(L".bmp")(L".jpg")(L".jpeg")(L".gif")(L".tiff")(L".tif")(L".jp2")(L".jpx")(L".j2k")(L".j2c")(L".swf")(L".ct");\r
 \r
        // Infer the resource type from the resource_name\r
        auto resource_type = FFMPEG_FILE;\r
-       auto tokens = caspar::core::protocol_split(original_case_params[0]);\r
-       auto filename = params[0];\r
+       auto tokens = core::parameters::protocol_split(params.at_original(0));\r
+       auto filename = params.at_original(0);\r
        if (!tokens[0].empty())\r
        {\r
                if (tokens[0] == L"dshow")\r
@@ -481,7 +480,7 @@ safe_ptr<core::frame_producer> create_producer(
                {\r
                        // Stream\r
                        resource_type = FFMPEG_STREAM;\r
-                       filename = original_case_params[0];\r
+                       filename = params.at_original(0);\r
                }\r
        } else\r
        {\r
@@ -499,27 +498,26 @@ safe_ptr<core::frame_producer> create_producer(
        if(filename.empty())\r
                return core::frame_producer::empty();\r
        \r
-       auto loop                                       = boost::range::find(params, L"LOOP") != params.end();\r
-       auto start                                      = get_param(L"SEEK", params, static_cast<uint32_t>(0));\r
-       auto length                                     = get_param(L"LENGTH", params, std::numeric_limits<uint32_t>::max());\r
-       auto filter_str                         = get_param(L"FILTER", params, L"");    \r
-       auto custom_channel_order       = get_param(L"CHANNEL_LAYOUT", params, L"");\r
+       auto loop               = params.has(L"LOOP");\r
+       auto start              = params.get(L"SEEK", static_cast<uint32_t>(0));\r
+       auto length             = params.get(L"LENGTH", std::numeric_limits<uint32_t>::max());\r
+       auto filter_str = params.get(L"FILTER", L"");   \r
+       auto custom_channel_order       = params.get(L"CHANNEL_LAYOUT", L"");\r
 \r
        boost::replace_all(filter_str, L"DEINTERLACE", L"YADIF=0:-1");\r
        boost::replace_all(filter_str, L"DEINTERLACE_BOB", L"YADIF=1:-1");\r
 \r
        ffmpeg_params vid_params;\r
-       vid_params.size_str = get_param(L"SIZE", params, L"");\r
-       vid_params.pixel_format = get_param(L"PIXFMT", params, L"");\r
-       vid_params.frame_rate = get_param(L"FRAMERATE", params, L"");\r
+       vid_params.size_str = params.get(L"SIZE", L"");\r
+       vid_params.pixel_format = params.get(L"PIXFMT", L"");\r
+       vid_params.frame_rate = params.get(L"FRAMERATE", L"");\r
        \r
        return create_producer_destroy_proxy(make_safe<ffmpeg_producer>(frame_factory, filename, resource_type, filter_str, loop, start, length, false, custom_channel_order, vid_params));\r
 }\r
 \r
 safe_ptr<core::frame_producer> create_thumbnail_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params)\r
+               const core::parameters& params)\r
 {              \r
        static const std::vector<std::wstring> invalid_exts = boost::assign::list_of\r
                        (L".png")(L".tga")(L".bmp")(L".jpg")(L".jpeg")(L".gif")(L".tiff")(L".tif")(L".jp2")(L".jpx")(L".j2k")(L".j2c")(L".swf")(L".ct")\r
index 8a88c741d55c5a6fffd0d60037e1c3ae221aa552..ba396d6c2a83355df213f0a1f4894c92646c9e10 100644 (file)
@@ -30,6 +30,7 @@ namespace caspar {
 \r
 namespace core {\r
 \r
+class parameters;\r
 struct frame_producer;\r
 struct frame_factory;\r
 \r
@@ -39,11 +40,9 @@ namespace ffmpeg {
 \r
 safe_ptr<core::frame_producer> create_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params);\r
+               const core::parameters& params);\r
 safe_ptr<core::frame_producer> create_thumbnail_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params);\r
+               const core::parameters& params);\r
 \r
 }}
\ No newline at end of file
index 46e39fa1667a2355c5ad6163dd7b6e7dd8e27730..14cd5fa22663e868dc70e2ba6fc206262b13aa1a 100644 (file)
@@ -27,6 +27,7 @@
 \r
 #include <common/env.h>\r
 \r
+#include <core/parameters/parameters.h>\r
 #include <core/mixer/mixer.h>\r
 \r
 #include <boost/filesystem.hpp>\r
@@ -241,16 +242,14 @@ safe_ptr<core::frame_producer> create_cg_producer_and_autoplay_file(
 \r
 safe_ptr<core::frame_producer> create_ct_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params) \r
+               const core::parameters& params) \r
 {\r
        return create_cg_producer_and_autoplay_file(frame_factory, params, env::media_folder() + L"\\" + params[0] + L".ct");\r
 }\r
 \r
 safe_ptr<core::frame_producer> create_cg_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params) \r
+               const core::parameters& params) \r
 {\r
        if(params.empty() || params.at(0) != L"[CG]")\r
                return core::frame_producer::empty();\r
index 9083b0a7c90abb09dacfa5452f657e707ab274c4..f8b17c7c1f38673669b9702d4cc4b2f2bcb571a6 100644 (file)
 \r
 #include <string>\r
 \r
-namespace caspar { namespace flash {\r
+namespace caspar {\r
+namespace core {\r
+       class parameters;\r
+}\r
+namespace flash {\r
                \r
 class cg_producer : public core::frame_producer\r
 {\r
@@ -70,11 +74,9 @@ safe_ptr<cg_producer> get_default_cg_producer(const safe_ptr<core::video_channel
 \r
 safe_ptr<core::frame_producer> create_ct_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params);\r
+               const core::parameters& params);\r
 safe_ptr<core::frame_producer> create_cg_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params);\r
+               const core::parameters& params);\r
 \r
 }}
\ No newline at end of file
index a0a54c35dc3cd88f1b8a178d99e0b1eae420b3e3..87fcbbcc8f219a94f6955f08d4eeb20d94181b08 100644 (file)
@@ -34,6 +34,7 @@
 #include <core/video_format.h>\r
 \r
 #include <core/monitor/monitor.h>\r
+#include <core/parameters/parameters.h>\r
 #include <core/producer/frame/basic_frame.h>\r
 #include <core/producer/frame/frame_factory.h>\r
 #include <core/mixer/write_frame.h>\r
@@ -523,10 +524,9 @@ safe_ptr<core::frame_producer> create_producer(const safe_ptr<core::frame_factor
 \r
 safe_ptr<core::frame_producer> create_swf_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params) \r
+               const core::parameters& params) \r
 {\r
-       auto filename = env::media_folder() + L"\\" + params.at(0) + L".swf";\r
+       auto filename = env::media_folder() + L"\\" + params.at_original(0) + L".swf";\r
        \r
        if(!boost::filesystem::exists(filename))\r
                return core::frame_producer::empty();\r
index 2f7af7637aaa20460c6f66b52a971ecdc67ed794..24bb8d8476e0933e804120bf4d6460aa18fde2e8 100644 (file)
@@ -33,8 +33,7 @@ namespace caspar { namespace flash {
 safe_ptr<core::frame_producer> create_producer(const safe_ptr<core::frame_factory>& frame_factory, const std::vector<std::wstring>& params);\r
 safe_ptr<core::frame_producer> create_swf_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params);\r
+               const core::parameters& params);\r
 \r
 std::wstring find_template(const std::wstring& templateName);\r
 \r
index 78b524a2f78f8cc48653f1d8a5e9fb3a67ad032b..b0e67a15e5d5a8a3ddf876ee64a75253cd562ced 100644 (file)
@@ -27,6 +27,7 @@
 #include <common/utility/string.h>\r
 #include <common/concurrency/future_util.h>\r
 \r
+#include <core/parameters/parameters.h>\r
 #include <core/consumer/frame_consumer.h>\r
 #include <core/video_format.h>\r
 #include <core/mixer/read_frame.h>\r
@@ -133,7 +134,7 @@ public:
        }\r
 };\r
 \r
-safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params)\r
+safe_ptr<core::frame_consumer> create_consumer(const core::parameters& params)\r
 {\r
        if(params.size() < 1 || params[0] != L"IMAGE")\r
                return core::frame_consumer::empty();\r
index 6894987ba9df0ef071b5ed23d7caefc4f9cac0e8..8bd85725dbc15f896df8ae8109b18077e8ea9743 100644 (file)
@@ -35,6 +35,7 @@ namespace caspar {
 \r
 namespace core {\r
        struct frame_consumer;\r
+       class parameters;\r
        class read_frame;\r
        struct video_format_desc;\r
 }\r
@@ -48,6 +49,6 @@ void write_cropped_png(
                int width,\r
                int height);\r
 \r
-safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params);\r
+safe_ptr<core::frame_consumer> create_consumer(const core::parameters& params);\r
 \r
 }}
\ No newline at end of file
index b2e0d003882f9843f8e12c82fec483035181997c..45c02f2f587db29d8cd7607fc9b56a54575d9eed 100644 (file)
@@ -25,6 +25,7 @@
 #include "producer/image_scroll_producer.h"\r
 #include "consumer/image_consumer.h"\r
 \r
+#include <core/parameters/parameters.h>\r
 #include <core/producer/frame_producer.h>\r
 #include <core/consumer/frame_consumer.h>\r
 \r
@@ -39,7 +40,7 @@ void init()
        core::register_producer_factory(create_scroll_producer);\r
        core::register_producer_factory(create_producer);\r
        core::register_thumbnail_producer_factory(create_thumbnail_producer);\r
-       core::register_consumer_factory([](const std::vector<std::wstring>& params){return create_consumer(params);});\r
+       core::register_consumer_factory([](const core::parameters& params){return image::create_consumer(params);});\r
 }\r
 \r
 std::wstring get_version()\r
index b08dc4923d6486be2a3f74a365b40d33e5aa0553..6ca5d4cd1dcfda090bfd9b2c241617ab2c6fdf3a 100644 (file)
@@ -25,6 +25,7 @@
 \r
 #include <core/video_format.h>\r
 \r
+#include <core/parameters/parameters.h>\r
 #include <core/monitor/monitor.h>\r
 #include <core/producer/frame/basic_frame.h>\r
 #include <core/producer/frame/frame_factory.h>\r
@@ -119,16 +120,16 @@ struct image_producer : public core::frame_producer
        }\r
 };\r
 \r
-safe_ptr<core::frame_producer> create_raw_producer(const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params)\r
+safe_ptr<core::frame_producer> create_raw_producer(\r
+       const safe_ptr<core::frame_factory>& frame_factory,\r
+       const core::parameters& params)\r
 {\r
        if (params[0] == L"[PNG_BASE64]")\r
        {\r
                if (params.size() < 2)\r
                        return core::frame_producer::empty();\r
 \r
-               auto png_data = from_base64(narrow(original_case_params[1]));\r
+               auto png_data = from_base64(narrow(params.at_original(1)));\r
 \r
                return make_safe<image_producer>(frame_factory, png_data.data(), png_data.size());\r
        }\r
@@ -149,10 +150,9 @@ safe_ptr<core::frame_producer> create_raw_producer(const safe_ptr<core::frame_fa
 \r
 safe_ptr<core::frame_producer> create_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params)\r
+               const core::parameters& params)\r
 {\r
-       auto raw_producer = create_raw_producer(frame_factory, params, original_case_params);\r
+       auto raw_producer = create_raw_producer(frame_factory, params);\r
 \r
        if (raw_producer == core::frame_producer::empty())\r
                return raw_producer;\r
@@ -162,10 +162,9 @@ safe_ptr<core::frame_producer> create_producer(
 \r
 safe_ptr<core::frame_producer> create_thumbnail_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params)\r
+               const core::parameters& params)\r
 {\r
-       return create_raw_producer(frame_factory, params, original_case_params);\r
+       return create_raw_producer(frame_factory, params);\r
 }\r
 \r
 }}
\ No newline at end of file
index 51101db46c32fad175d67161c8dfb67e0e6d7b5c..b2d160b6ee1aa0ecf2b3bd794bf3150de363e637 100644 (file)
 #include <string>\r
 #include <vector>\r
 \r
-namespace caspar { namespace image {\r
+namespace caspar { \r
+namespace core {\r
+       class parameters;\r
+}\r
+namespace image {\r
 \r
 safe_ptr<core::frame_producer> create_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params);\r
+               const core::parameters& params);\r
 safe_ptr<core::frame_producer> create_thumbnail_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params);\r
+               const core::parameters& params);\r
 \r
 }}
\ No newline at end of file
index ebc5faa25cb3b69345c5f8ae5b8206f41b8e3cec..006bb42b1fcb99e1ec6dcc8e8a3d3f506f739b15 100644 (file)
@@ -28,6 +28,7 @@
 \r
 #include <core/video_format.h>\r
 \r
+#include <core/parameters/parameters.h>\r
 #include <core/monitor/monitor.h>\r
 #include <core/producer/frame/basic_frame.h>\r
 #include <core/producer/frame/frame_factory.h>\r
@@ -392,8 +393,7 @@ struct image_scroll_producer : public core::frame_producer
 \r
 safe_ptr<core::frame_producer> create_scroll_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params)\r
+               const core::parameters& params)\r
 {\r
        static const std::vector<std::wstring> extensions = list_of(L"png")(L"tga")(L"bmp")(L"jpg")(L"jpeg")(L"gif")(L"tiff")(L"tif")(L"jp2")(L"jpx")(L"j2k")(L"j2c");\r
        std::wstring filename = env::media_folder() + L"\\" + params[0];\r
index c9a1c92f20ec1dd83a9586573f6e680db0b66594..69b7d887dcb31d43ea57f993d5762ce50d668f5b 100644 (file)
 #include <string>\r
 #include <vector>\r
 \r
-namespace caspar { namespace image {\r
+namespace caspar { \r
+namespace core {\r
+       class parameters;\r
+}\r
+namespace image {\r
 \r
 safe_ptr<core::frame_producer> create_scroll_producer(\r
                const safe_ptr<core::frame_factory>& frame_factory,\r
-               const std::vector<std::wstring>& params,\r
-               const std::vector<std::wstring>& original_case_params);\r
+               const core::parameters& params);\r
 \r
 }}
\ No newline at end of file
index f7e9990f8474eed82fb13c0d0cd3b6dc01cf3914..80dfbc2401828e5b83def55f7d1c4ae3874f0b0d 100644 (file)
@@ -28,6 +28,7 @@
 #include <common/utility/string.h>
 #include <common/concurrency/future_util.h>
 
+#include <core/parameters/parameters.h>
 #include <core/consumer/frame_consumer.h>
 #include <core/mixer/audio/audio_util.h>
 #include <core/video_format.h>
@@ -195,7 +196,7 @@ public:
        }
 };
 
-safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params)
+safe_ptr<core::frame_consumer> create_consumer(const core::parameters& params)
 {
        if(params.size() < 1 || params[0] != L"AUDIO")
                return core::frame_consumer::empty();
index 76ebed176f80451c2833e2cd74c9a45be792d7f8..ba60d152f65c31dc504dda9fadf69b099d9bfd3e 100644 (file)
@@ -31,11 +31,12 @@ namespace caspar {
 \r
 namespace core {\r
        struct frame_consumer;\r
+       class parameters;\r
 }      \r
 \r
 namespace oal {\r
        \r
-safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params);\r
+safe_ptr<core::frame_consumer> create_consumer(const core::parameters& params);\r
 safe_ptr<core::frame_consumer> create_consumer();\r
 \r
 }}
\ No newline at end of file
index 15446a9afe9b94f7f4447d14b0f7a85f90f4eef3..0757fcefad3e65ecc83f5909b9ab04634cec76cc 100644 (file)
 \r
 #include "consumer/oal_consumer.h"\r
 \r
+#include <core/parameters/parameters.h>\r
 #include <core/consumer/frame_consumer.h>\r
 \r
 namespace caspar { namespace oal {\r
 \r
 void init()\r
 {\r
-       core::register_consumer_factory([](const std::vector<std::wstring>& params){return create_consumer(params);});\r
+       core::register_consumer_factory([](const core::parameters& params){ return oal::create_consumer(params); });\r
 }\r
 \r
 }}
\ No newline at end of file
index bfee074b1b606e0f34401bae8646dc14d0beb1b8..ff5d0266addc356eae674305588f8ff536830e24 100644 (file)
@@ -36,6 +36,7 @@
 \r
 #include <ffmpeg/producer/filter/filter.h>\r
 \r
+#include <core/parameters/parameters.h>\r
 #include <core/video_format.h>\r
 #include <core/mixer/read_frame.h>\r
 #include <core/consumer/frame_consumer.h>\r
@@ -577,7 +578,7 @@ public:
        }\r
 };     \r
 \r
-safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params)\r
+safe_ptr<core::frame_consumer> create_consumer(const core::parameters& params)\r
 {\r
        if(params.size() < 1 || params[0] != L"SCREEN")\r
                return core::frame_consumer::empty();\r
index bfe877f6cf3f9efd7e1eb62f14eaab512d02707c..6f0eb9d3402214a13fbc2fcb5a552c8345b3f8f1 100644 (file)
@@ -30,12 +30,12 @@ namespace caspar {
        \r
 namespace core {\r
        struct frame_consumer;\r
+       class parameters;\r
 }\r
 \r
 namespace ogl {\r
 \r
-\r
-safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params);\r
+safe_ptr<core::frame_consumer> create_consumer(const core::parameters& params);\r
 safe_ptr<core::frame_consumer> create_consumer(const boost::property_tree::wptree& ptree);\r
 \r
 }}
\ No newline at end of file
index d6346e35a37a2d3cd39080e369fed3d375c41d91..0949dd5b60e6c29b83e13665ea2de69d47c993d1 100644 (file)
 \r
 #include "consumer/ogl_consumer.h"\r
 \r
+#include <core/parameters/parameters.h>\r
 #include <core/consumer/frame_consumer.h>\r
 \r
 namespace caspar { namespace ogl {\r
 \r
 void init()\r
 {\r
-       caspar::core::register_consumer_factory([](const std::vector<std::wstring>& params){return create_consumer(params);});\r
+       caspar::core::register_consumer_factory([](const core::parameters& params){return ogl::create_consumer(params);});\r
 }\r
 \r
 }}
\ No newline at end of file
index 5de163fd0f721b2caad8ef80f7c0f04e42835e12..9bc3de88cf8b6a16c173703d51dabc0543296d14 100644 (file)
 #include "../util/clientinfo.h"\r
 \r
 #include <core/consumer/frame_consumer.h>\r
+#include <core/parameters/parameters.h>\r
 #include <core/video_channel.h>\r
 #include <core/thumbnail_generator.h>\r
 \r
 #include <boost/algorithm/string.hpp>\r
 \r
-namespace caspar { namespace protocol {\r
+namespace caspar {\r
+namespace protocol {\r
 namespace amcp {\r
 \r
        enum AMCPCommandScheduling\r
@@ -56,6 +58,10 @@ namespace amcp {
 \r
                void AddParameter(const std::wstring& param){_parameters.push_back(param);}\r
 \r
+               void SetParameters(const core::parameters& p) {\r
+                       _parameters = p;\r
+               }\r
+\r
                void SetClientInfo(IO::ClientInfoPtr& s){pClientInfo_ = s;}\r
                IO::ClientInfoPtr GetClientInfo(){return pClientInfo_;}\r
 \r
@@ -90,8 +96,8 @@ namespace amcp {
                void SetReplyString(const std::wstring& str){replyString_ = str;}\r
 \r
        protected:\r
-               std::vector<std::wstring> _parameters;\r
-               std::vector<std::wstring> _parameters2;\r
+               core::parameters _parameters;\r
+               std::vector<std::wstring> _parameters2; // TODO this can be deprecated with a small amount of coding CP 2013-01\r
 \r
        private:\r
                unsigned int channelIndex_;\r
@@ -113,9 +119,8 @@ namespace amcp {
        public:\r
                virtual bool Execute()\r
                {\r
-                       _parameters2 = _parameters;\r
-                       for(size_t n = 0; n < _parameters.size(); ++n)\r
-                               _parameters[n] = boost::to_upper_copy(_parameters[n]);\r
+                       _parameters2 = _parameters; // TODO Refactor this in terms of the new parameters class CP 2013-01\r
+                       _parameters.to_upper();\r
                        return (TNeedChannel && !GetChannel()) || _parameters.size() < TMinParameters ? false : DoExecute();\r
                }\r
 \r
@@ -124,6 +129,7 @@ namespace amcp {
                virtual int GetMinimumParameters(){return TMinParameters;}\r
        protected:\r
                ~AMCPCommandBase(){}\r
+\r
        private:\r
                virtual bool DoExecute() = 0;\r
        };      \r
index 581928a2509e0cfd95e7e3efed395cfd74da7dc8..900201ba4f6abccaeae542b960be834fa3ec287d 100644 (file)
@@ -763,8 +763,8 @@ bool LoadCommand::DoExecute()
        //Perform loading of the clip\r
        try\r
        {\r
-               _parameters[0] = _parameters[0];\r
-               auto pFP = create_producer(GetChannel()->mixer(), _parameters, _parameters2);           \r
+               //_parameters[0] = _parameters[0]; // REVIEW: Why is this assignment done? CP 2013-01\r
+               auto pFP = create_producer(GetChannel()->mixer(), _parameters);         \r
                GetChannel()->stage()->load(GetLayerIndex(), pFP, true);\r
        \r
                SetReplyString(TEXT("202 LOAD OK\r\n"));\r
@@ -869,8 +869,8 @@ bool LoadbgCommand::DoExecute()
        //Perform loading of the clip\r
        try\r
        {\r
-               _parameters[0] = _parameters[0];\r
-               auto pFP = create_producer(GetChannel()->mixer(), _parameters, _parameters2);\r
+               //_parameters[0] = _parameters[0]; // REVIEW: Why is this assignment done? CP 2013-01\r
+               auto pFP = create_producer(GetChannel()->mixer(), _parameters);\r
                if(pFP == frame_producer::empty())\r
                        BOOST_THROW_EXCEPTION(file_not_found() << msg_info(_parameters.size() > 0 ? narrow(_parameters[0]) : ""));\r
 \r
@@ -927,8 +927,7 @@ bool PlayCommand::DoExecute()
                        lbg.SetChannelIndex(GetChannelIndex());\r
                        lbg.SetLayerIntex(GetLayerIndex());\r
                        lbg.SetClientInfo(GetClientInfo());\r
-                       for(auto it = _parameters2.begin(); it != _parameters2.end(); ++it)\r
-                               lbg.AddParameter(*it);\r
+                       lbg.SetParameters(_parameters);\r
                        if(!lbg.Execute())\r
                                throw std::exception();\r
                }\r
@@ -977,7 +976,9 @@ bool ClearCommand::DoExecute()
 \r
 bool PrintCommand::DoExecute()\r
 {\r
-       GetChannel()->output()->add(create_consumer(boost::assign::list_of(L"IMAGE")));\r
+       parameters params;
+       params.push_back(L"IMAGE");
+       GetChannel()->output()->add(create_consumer(params));
                \r
        SetReplyString(TEXT("202 PRINT OK\r\n"));\r
 \r
index 34fbb829b2ab07e31a067ab1146c824bf4fcc796..a7a0e9196b4e1cc9957083d2e4d13a4dae51ed24 100644 (file)
@@ -207,7 +207,7 @@ struct server::implementation : boost::noncopyable
                                        on_consumer(bluefish::create_consumer(xml_consumer.second));                                    \r
                                else if (name == L"decklink")                                   \r
                                        on_consumer(decklink::create_consumer(xml_consumer.second));                            \r
-                               else if (name == L"file")                                       \r
+                                       else if (name == L"file" || name ==L"stream")                                   \r
                                        on_consumer(ffmpeg::create_consumer(xml_consumer.second));                                              \r
                                else if (name == L"system-audio")\r
                                        on_consumer(oal::create_consumer());\r