]> git.sesse.net Git - casparcg/commitdiff
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 12 Feb 2012 12:23:44 +0000 (12:23 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 12 Feb 2012 12:23:44 +0000 (12:23 +0000)
common/reactive.h
core/monitor/monitor.h
core/producer/stage.cpp
core/video_channel.cpp
shell/casparcg.config
shell/main.cpp

index 439e2d814079ece41e5af5fd9c7689d0ad548409..ffd0fb85f2c908853cfa8416b7db79d582be8fbb 100644 (file)
@@ -100,52 +100,6 @@ struct subject : public observer<I>, public observable<O>
        }\r
 };\r
 \r
-namespace detail {\r
-\r
-template<typename T>\r
-struct true_func\r
-{\r
-       bool operator()(T)\r
-       {\r
-               return true;\r
-       }\r
-};\r
-\r
-template<typename T>\r
-struct void_func\r
-{\r
-       void operator()(T)\r
-       {\r
-       }\r
-};\r
-\r
-template<typename I, typename O>\r
-struct forward_func\r
-{\r
-       forward_func(std::function<O(const I&)> func)\r
-               : func_(std::move(func))\r
-       {\r
-       }\r
-\r
-       O operator()(const I& value)\r
-       {\r
-               return func_(value);\r
-       }\r
-\r
-       std::function<O(const I&)> func_;\r
-};\r
-\r
-template<typename I>\r
-struct forward_func<I, I>\r
-{\r
-       const I& operator()(const I& value)\r
-       {\r
-               return value;\r
-       }\r
-};\r
-\r
-}\r
-\r
 template<typename T, typename C>\r
 class observer_function : public observer<T>\r
 {\r
@@ -188,46 +142,37 @@ private:
        C func_;\r
 };\r
 \r
-template<typename T>\r
-class observer_function<T, detail::void_func<T>> : public observer<T>\r
-{\r
-public:                \r
-       virtual void on_next(const T& e) override\r
-       {\r
-       }\r
-};\r
-\r
 template<typename I, typename O = I>\r
-class basic_subject : public subject<I, O>\r
+class basic_subject_impl : public subject<I, O>\r
 {      \r
-    template <typename, typename> friend class basic_subject;\r
+    template <typename, typename> friend class basic_subject_impl;\r
 \r
-       basic_subject(const basic_subject&);\r
-       basic_subject& operator=(const basic_subject&);\r
+       basic_subject_impl(const basic_subject_impl&);\r
+       basic_subject_impl& operator=(const basic_subject_impl&);\r
 public:        \r
        typedef typename subject<I, O>::observer                observer;\r
        typedef typename subject<I, O>::observer_ptr    observer_ptr;\r
 \r
-       basic_subject()\r
+       basic_subject_impl()\r
        {\r
        }\r
                        \r
-       virtual ~basic_subject()\r
+       virtual ~basic_subject_impl()\r
        {\r
        }\r
                \r
-       basic_subject(basic_subject<typename observer::value_type, typename observable::value_type>&& other)\r
+       basic_subject_impl(basic_subject_impl<typename observer::value_type, typename observable::value_type>&& other)\r
                : observers_(std::move(other.observers_))\r
        {\r
        }\r
        \r
-       basic_subject& operator=(basic_subject<typename observer::value_type, typename observable::value_type>&& other)\r
+       basic_subject_impl& operator=(basic_subject_impl<typename observer::value_type, typename observable::value_type>&& other)\r
        {\r
                other.swap(*this);\r
                return *this;\r
        }\r
        \r
-       void swap(basic_subject<typename observer::value_type, typename observable::value_type>& other)\r
+       void swap(basic_subject_impl<typename observer::value_type, typename observable::value_type>& other)\r
        {               \r
                tbb::spin_rw_mutex::scoped_lock lock(mutex_, true);\r
                tbb::spin_rw_mutex::scoped_lock other_lock(other.mutex_, true);\r
@@ -302,6 +247,67 @@ private:
        mutable tbb::spin_rw_mutex                                              mutex_;\r
 };\r
 \r
+template<typename I, typename O = I>\r
+class basic_subject : public subject<I, O>\r
+{      \r
+    template <typename, typename> friend class basic_subject;\r
+\r
+       basic_subject(const basic_subject&);\r
+       basic_subject& operator=(const basic_subject&);\r
+\r
+       typedef basic_subject_impl<I, O> impl;\r
+public:        \r
+       typedef typename subject<I, O>::observer                observer;\r
+       typedef typename subject<I, O>::observer_ptr    observer_ptr;\r
+\r
+       basic_subject()\r
+               : impl_(std::make_shared<impl>())\r
+\r
+       {\r
+       }\r
+               \r
+       basic_subject(subject&& other)\r
+               : impl_(std::move(other.impl_))\r
+       {\r
+       }\r
+\r
+       virtual ~basic_subject()\r
+       {\r
+       }\r
+\r
+       basic_subject& operator=(basic_subject&& other)\r
+       {\r
+               other.swap(*this);\r
+       }\r
+\r
+       void swap(basic_subject& other)\r
+       {\r
+               impl_.swap(other.impl_);\r
+       }\r
+       \r
+       virtual void subscribe(const observer_ptr& o) override\r
+       {                               \r
+               impl_->subscribe(o);\r
+       }\r
+\r
+       virtual void unsubscribe(const observer_ptr& o) override\r
+       {\r
+               impl_->unsubscribe(o);\r
+       }\r
+                               \r
+       virtual void on_next(const I& e) override\r
+       {                               \r
+               impl_->on_next(e);\r
+       }\r
+\r
+       operator std::weak_ptr<observer>()\r
+       {\r
+               return impl_;\r
+       }\r
+private:\r
+       std::shared_ptr<impl> impl_;\r
+};\r
+\r
 template<typename F>\r
 spl::shared_ptr<observer_function<typename std::decay<typename detail::function_traits<F>::arg1_type>::type, F>> \r
 make_observer(F func)\r
index cba21ea470a4eee1fbb1f294b1fbb66f794234fb..1c2c74888b81a3c5f86f1d24bb0842f7d73d6818 100644 (file)
@@ -118,19 +118,34 @@ class subject : public reactive::subject<monitor::event>
 {          \r
        subject(const subject&);\r
        subject& operator=(const subject&);\r
+\r
+       typedef reactive::basic_subject_impl<monitor::event> impl_base;\r
        \r
-       typedef reactive::basic_subject<monitor::event> impl;\r
+       class impl : public impl_base\r
+       {\r
+       public:\r
+               impl(monitor::path path = monitor::path())\r
+                       : path_(std::move(path))\r
+               {\r
+               }\r
+                                                       \r
+               virtual void on_next(const monitor::event& e) override\r
+               {                               \r
+                       impl_base::on_next(path_.empty() ? e : e.propagate(path_));\r
+               }\r
+       private:\r
+               monitor::path                   path_;\r
+       };\r
+\r
 public:                \r
        subject(monitor::path path = monitor::path())\r
-               : path_(std::move(path))\r
-               , impl_(std::make_shared<impl>())\r
+               : impl_(std::make_shared<impl>(std::move(path)))\r
 \r
        {\r
        }\r
                \r
        subject(subject&& other)\r
-               : path_(std::move(other.path_))\r
-               , impl_(std::move(other.impl_))\r
+               : impl_(std::move(other.impl_))\r
        {\r
        }\r
 \r
@@ -145,8 +160,7 @@ public:
 \r
        void swap(subject& other)\r
        {\r
-               std::swap(path_, other.path_);\r
-               std::swap(impl_, other.impl_);\r
+               impl_.swap(other.impl_);\r
        }\r
        \r
        virtual void subscribe(const observer_ptr& o) override\r
@@ -161,7 +175,7 @@ public:
                                \r
        virtual void on_next(const monitor::event& e) override\r
        {                               \r
-               impl_->on_next(path_.empty() ? e : e.propagate(path_));\r
+               impl_->on_next(e);\r
        }\r
 \r
        operator std::weak_ptr<observer>()\r
@@ -169,7 +183,6 @@ public:
                return impl_;\r
        }\r
 private:\r
-       monitor::path                   path_;\r
        std::shared_ptr<impl>   impl_;\r
 };\r
 \r
index 1cece00df7b7d87038a3b37b488ce1fce7f7d8e0..7994b01a6927bd3c7370fe82e3218f807c17a6b4 100644 (file)
@@ -56,6 +56,7 @@ struct stage::impl : public std::enable_shared_from_this<impl>
 public:\r
        impl(spl::shared_ptr<diagnostics::graph> graph) \r
                : graph_(std::move(graph))\r
+               , event_subject_("stage")\r
                , executor_(L"stage")\r
        {\r
                graph_->set_color("produce-time", diagnostics::color(0.0f, 1.0f, 0.0f));\r
index 96522ae717e3261486b23f536db6d888cd37ad7a..f3cd8a0c3bd30565b429ca2edb3be5d0e631f8d4 100644 (file)
@@ -133,7 +133,7 @@ public:
                \r
                        graph_->set_value("tick-time", frame_timer.elapsed()*format_desc.fps*0.5);\r
 \r
-                       event_subject_  << monitor::event("debug/profiler/time")        % frame_timer.elapsed() % (1.0/format_desc_.fps)\r
+                       event_subject_  << monitor::event("profiler/time")      % frame_timer.elapsed() % (1.0/format_desc_.fps)\r
                                                        << monitor::event("format")                                     % u8(format_desc.name);\r
                }\r
                catch(...)\r
index f3c8153535bb6799402b8bf3094bf01394e5aeb7..e49f87cc98b4e8690acfd3e69d68fa1f96bc65a2 100644 (file)
@@ -7,12 +7,12 @@
     <template-path>D:\casparcg\_templates\</template-path>\r
   </paths>\r
   <log-level>trace</log-level>\r
+  <accelerator>cpu</accelerator>\r
   <channels>\r
     <channel>\r
       <video-mode>PAL</video-mode>\r
       <consumers>\r
         <screen>\r
-          <auto-deinterlace>false</auto-deinterlace>\r
         </screen>\r
       </consumers>\r
     </channel>\r
index fae91fcc19e53e8018ce86c5d01ae239e781950c..118a8b9738a6a6dcf5334eced052258f66a5d67d 100644 (file)
@@ -241,6 +241,15 @@ int main(int argc, wchar_t* argv[])
                                \r
                        auto server = spl::make_shared<protocol::osc::server>(5253);\r
                        caspar_server.subscribe(server);\r
+                                               \r
+                       auto console_obs = reactive::make_observer([](const monitor::event& e)\r
+                       {\r
+                               CASPAR_LOG(trace) << e.path().str().c_str();\r
+                       });\r
+\r
+                       caspar_server.subscribe(console_obs);\r
+\r
+\r
 \r
                        // Create a amcp parser for console commands.\r
                        protocol::amcp::AMCPProtocolStrategy amcp(caspar_server.get_channels());\r