]> 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>
Thu, 16 Feb 2012 10:29:49 +0000 (10:29 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Thu, 16 Feb 2012 10:29:49 +0000 (10:29 +0000)
core/consumer/output.cpp
core/video_channel.cpp
core/video_channel.h
modules/reroute/producer/reroute_producer.cpp
modules/reroute/producer/reroute_producer.h
shell/casparcg.config

index 4300b32fbbfb93d7ad02ffaf993836e2274a64ed..a416f8607790c9fbd288a094435eee2f4dc982de 100644 (file)
@@ -157,7 +157,8 @@ public:
                        if(!has_synchronization_clock())\r
                                sync_timer_.tick(1.0/format_desc_.fps);\r
                                \r
-                       if(input_frame->image_data().size() != format_desc_.size)\r
+                       if(input_frame->width() != format_desc_.width ||\r
+                          input_frame->height() != format_desc_.height)\r
                        {\r
                                sync_timer_.tick(1.0/format_desc_.fps);\r
                                return;\r
index f2432b4c98464a39fb6cc8f1ea02979e1387a5fe..193702cc8698107694f630e2a10502588d274b2b 100644 (file)
@@ -49,7 +49,6 @@ namespace caspar { namespace core {
 \r
 struct video_channel::impl sealed : public frame_factory\r
 {\r
-       reactive::basic_subject<spl::shared_ptr<const data_frame>> frame_subject_;\r
        monitor::basic_subject                                                  event_subject_;\r
 \r
        const int                                                                               index_;\r
@@ -127,9 +126,7 @@ public:
                        auto mixed_frame  = mixer_(std::move(stage_frames), format_desc);\r
 \r
                        // Consume\r
-                       \r
-                       frame_subject_ << mixed_frame;\r
-                       \r
+                                               \r
                        output_(std::move(mixed_frame), format_desc);\r
                \r
                        graph_->set_value("tick-time", frame_timer.elapsed()*format_desc.fps*0.5);\r
@@ -177,9 +174,7 @@ output& video_channel::output() { return impl_->output_;}
 spl::shared_ptr<frame_factory> video_channel::frame_factory() { return impl_;} \r
 core::video_format_desc video_channel::video_format_desc() const{return impl_->video_format_desc();}\r
 void core::video_channel::video_format_desc(const core::video_format_desc& format_desc){impl_->video_format_desc(format_desc);}\r
-boost::property_tree::wptree video_channel::info() const{return impl_->info();}\r
-void video_channel::subscribe(const frame_observable::observer_ptr& o) {impl_->frame_subject_.subscribe(o);}\r
-void video_channel::unsubscribe(const frame_observable::observer_ptr& o) {impl_->frame_subject_.unsubscribe(o);}               \r
+boost::property_tree::wptree video_channel::info() const{return impl_->info();}                \r
 void video_channel::subscribe(const monitor::observable::observer_ptr& o) {impl_->event_subject_.subscribe(o);}\r
 void video_channel::unsubscribe(const monitor::observable::observer_ptr& o) {impl_->event_subject_.unsubscribe(o);}\r
 \r
index f596ff93f607b714d200e4b13332ae69bf1803a3..ac883f8a02f12f7d870fbd9f3eeb6de5db129b6f 100644 (file)
@@ -39,10 +39,7 @@ FORWARD2(caspar, core, class frame_factory);
 \r
 namespace caspar { namespace core {\r
        \r
-typedef reactive::observable<spl::shared_ptr<const class data_frame>>  frame_observable;\r
-\r
-class video_channel sealed : public frame_observable\r
-                                                  , public monitor::observable\r
+class video_channel sealed : public monitor::observable\r
 {\r
        video_channel(const video_channel&);\r
        video_channel& operator=(const video_channel&);\r
@@ -55,12 +52,7 @@ public:
        explicit video_channel(int index, const video_format_desc& format_desc, spl::unique_ptr<image_mixer> image_mixer);\r
        \r
        /// Methods\r
-\r
-       // observable<spl::shared_ptr<const class data_frame>>\r
-       \r
-       virtual void subscribe(const frame_observable::observer_ptr& o) override;\r
-       virtual void unsubscribe(const frame_observable::observer_ptr& o) override;\r
-               \r
+                       \r
        // monitor::observable\r
 \r
        virtual void subscribe(const monitor::observable::observer_ptr& o) override;\r
index 85147c43889a519359bf02a2fd1219f4458290ee..228fc8d50bed2c8ceb3b7a6bee5c01ad9704e050 100644 (file)
 #include <queue>\r
 \r
 namespace caspar { namespace reroute {\r
-               \r
-class reroute_producer : public reactive::observer<spl::shared_ptr<const core::data_frame>>\r
-                                          , public core::frame_producer\r
+//             \r
+//class reroute_producer : public reactive::observer<spl::shared_ptr<const core::data_frame>>\r
+//                                        , public core::frame_producer\r
+//{\r
+//     const spl::shared_ptr<diagnostics::graph>                                                                       graph_;\r
+//     const spl::shared_ptr<core::frame_factory>                                                                      frame_factory_;\r
+//     \r
+//     tbb::concurrent_bounded_queue<std::shared_ptr<const core::data_frame>>          input_buffer_;\r
+//     std::queue<core::draw_frame>                                                                                            frame_buffer_;\r
+//     uint64_t                                                                                                                                        frame_number_;\r
+//\r
+//     core::draw_frame                                                                                                                        last_frame_;\r
+//\r
+//public:\r
+//     explicit reroute_producer(const spl::shared_ptr<core::frame_factory>& frame_factory) \r
+//             : frame_factory_(frame_factory)\r
+//             , frame_number_(0)\r
+//             , last_frame_(core::draw_frame::empty())\r
+//     {\r
+//             graph_->set_color("late-frame", diagnostics::color(0.6f, 0.3f, 0.3f));\r
+//             graph_->set_color("dropped-frame", diagnostics::color(0.3f, 0.6f, 0.3f));\r
+//             graph_->set_text(print());\r
+//             diagnostics::register_graph(graph_);\r
+//\r
+//             input_buffer_.set_capacity(1);\r
+//     }\r
+//     \r
+//     // observable\r
+//\r
+//     void on_next(const spl::shared_ptr<const core::data_frame>& frame)\r
+//     {\r
+//             if(!input_buffer_.try_push(frame))\r
+//                     graph_->set_tag("dropped-frame");\r
+//     }\r
+//\r
+//     // frame_producer\r
+//                     \r
+//     virtual core::draw_frame receive(int) override\r
+//     {\r
+//             if(!frame_buffer_.empty())\r
+//             {\r
+//                     auto frame = std::move(frame_buffer_.front());\r
+//                     frame_buffer_.pop();\r
+//                     return last_frame_ = frame;\r
+//             }\r
+//             \r
+//             std::shared_ptr<const core::data_frame> read_frame;\r
+//             if(!input_buffer_.try_pop(read_frame))\r
+//             {\r
+//                     graph_->set_tag("late-frame");\r
+//                     return core::draw_frame::late();                \r
+//             }\r
+//             \r
+//             frame_number_++;\r
+//             \r
+//             bool double_speed       = std::abs(frame_factory_->video_format_desc().fps / 2.0 - read_frame->frame_rate()) < 0.01;            \r
+//             bool half_speed         = std::abs(read_frame->frame_rate() / 2.0 - frame_factory_->video_format_desc().fps) < 0.01;\r
+//\r
+//             if(half_speed && frame_number_ % 2 == 0) // Skip frame\r
+//                     return receive(0);\r
+//\r
+//             auto frame = frame_factory_->create_frame(this, read_frame->pixel_format_desc());\r
+//\r
+//             A_memcpy(frame->image_data(0).begin(), read_frame->image_data().begin(), read_frame->image_data().size());\r
+//             boost::push_back(frame->audio_data(), read_frame->audio_data());\r
+//             \r
+//             auto draw_frame = core::draw_frame(std::move(frame));\r
+//\r
+//             frame_buffer_.push(draw_frame);\r
+//             \r
+//             if(double_speed)        \r
+//                     frame_buffer_.push(draw_frame);\r
+//\r
+//             return receive(0);\r
+//     }       \r
+//\r
+//     virtual core::draw_frame last_frame() const override\r
+//     {\r
+//             return core::draw_frame::still(last_frame_);\r
+//     }\r
+//     \r
+//     virtual std::wstring print() const override\r
+//     {\r
+//             return L"reroute[]";\r
+//     }\r
+//\r
+//     virtual std::wstring name() const override\r
+//     {\r
+//             return L"reroute";\r
+//     }\r
+//\r
+//     virtual boost::property_tree::wptree info() const override\r
+//     {\r
+//             boost::property_tree::wptree info;\r
+//             info.add(L"type", L"rerotue-producer");\r
+//             return info;\r
+//     }\r
+//};\r
+\r
+spl::shared_ptr<core::frame_producer> create_producer(const spl::shared_ptr<core::frame_factory>& frame_factory, core::video_channel& channel)\r
 {\r
-       const spl::shared_ptr<diagnostics::graph>                                                                       graph_;\r
-       const spl::shared_ptr<core::frame_factory>                                                                      frame_factory_;\r
-       \r
-       tbb::concurrent_bounded_queue<std::shared_ptr<const core::data_frame>>          input_buffer_;\r
-       std::queue<core::draw_frame>                                                                                            frame_buffer_;\r
-       uint64_t                                                                                                                                        frame_number_;\r
-\r
-       core::draw_frame                                                                                                                        last_frame_;\r
-\r
-public:\r
-       explicit reroute_producer(const spl::shared_ptr<core::frame_factory>& frame_factory) \r
-               : frame_factory_(frame_factory)\r
-               , frame_number_(0)\r
-               , last_frame_(core::draw_frame::empty())\r
-       {\r
-               graph_->set_color("late-frame", diagnostics::color(0.6f, 0.3f, 0.3f));\r
-               graph_->set_color("dropped-frame", diagnostics::color(0.3f, 0.6f, 0.3f));\r
-               graph_->set_text(print());\r
-               diagnostics::register_graph(graph_);\r
-\r
-               input_buffer_.set_capacity(1);\r
-       }\r
-       \r
-       // observable\r
-\r
-       void on_next(const spl::shared_ptr<const core::data_frame>& frame)\r
-       {\r
-               if(!input_buffer_.try_push(frame))\r
-                       graph_->set_tag("dropped-frame");\r
-       }\r
-\r
-       // frame_producer\r
-                       \r
-       virtual core::draw_frame receive(int) override\r
-       {\r
-               if(!frame_buffer_.empty())\r
-               {\r
-                       auto frame = std::move(frame_buffer_.front());\r
-                       frame_buffer_.pop();\r
-                       return last_frame_ = frame;\r
-               }\r
-               \r
-               std::shared_ptr<const core::data_frame> read_frame;\r
-               if(input_buffer_.try_pop(read_frame) || read_frame->image_data().empty())\r
-               {\r
-                       graph_->set_tag("late-frame");\r
-                       return core::draw_frame::late();                \r
-               }\r
-               \r
-               frame_number_++;\r
-               \r
-               bool double_speed       = std::abs(frame_factory_->video_format_desc().fps / 2.0 - read_frame->frame_rate()) < 0.01;            \r
-               bool half_speed         = std::abs(read_frame->frame_rate() / 2.0 - frame_factory_->video_format_desc().fps) < 0.01;\r
-\r
-               if(half_speed && frame_number_ % 2 == 0) // Skip frame\r
-                       return receive(0);\r
-\r
-               auto frame = frame_factory_->create_frame(this, read_frame->pixel_format_desc());\r
-\r
-               A_memcpy(frame->image_data(0).begin(), read_frame->image_data().begin(), read_frame->image_data().size());\r
-               boost::push_back(frame->audio_data(), read_frame->audio_data());\r
-               \r
-               auto draw_frame = core::draw_frame(std::move(frame));\r
-\r
-               frame_buffer_.push(draw_frame);\r
-               \r
-               if(double_speed)        \r
-                       frame_buffer_.push(draw_frame);\r
-\r
-               return receive(0);\r
-       }       \r
-\r
-       virtual core::draw_frame last_frame() const override\r
-       {\r
-               return core::draw_frame::still(last_frame_);\r
-       }\r
-       \r
-       virtual std::wstring print() const override\r
-       {\r
-               return L"reroute[]";\r
-       }\r
-\r
-       virtual std::wstring name() const override\r
-       {\r
-               return L"reroute";\r
-       }\r
-\r
-       virtual boost::property_tree::wptree info() const override\r
-       {\r
-               boost::property_tree::wptree info;\r
-               info.add(L"type", L"rerotue-producer");\r
-               return info;\r
-       }\r
-};\r
-\r
-spl::shared_ptr<core::frame_producer> create_producer(const spl::shared_ptr<core::frame_factory>& frame_factory, reactive::observable<spl::shared_ptr<const core::data_frame>>& o)\r
-{\r
-       auto producer = spl::make_shared<reroute_producer>(frame_factory);\r
-       o.subscribe(producer);\r
-       return core::wrap_producer(producer);\r
+       return core::frame_producer::empty();\r
+       //auto producer = spl::make_shared<reroute_producer>(frame_factory);\r
+       //o.subscribe(producer);\r
+       //return core::wrap_producer(producer);\r
 }\r
 \r
 }}
\ No newline at end of file
index 8b587d1e5521aa7ab27579ffe2d87c864dc3744f..67ab7d8ea39f0fc71a1d92ad1fa37ed38a62288c 100644 (file)
 #pragma once\r
 \r
 #include <common/spl/memory.h>\r
-#include <common/reactive.h>\r
 #include <common/forward.h>\r
 \r
 #include <core/frame/frame_factory.h>\r
 #include <core/producer/frame_producer.h>\r
 #include <core/frame/data_frame.h>\r
 \r
+FORWARD2(caspar, core, class video_channel);\r
+\r
 namespace caspar { namespace reroute {\r
        \r
-spl::shared_ptr<core::frame_producer> create_producer(const spl::shared_ptr<core::frame_factory>& frame_factory, reactive::observable<spl::shared_ptr<const core::data_frame>>& o);\r
+spl::shared_ptr<core::frame_producer> create_producer(const spl::shared_ptr<core::frame_factory>& frame_factory, core::video_channel& channel);\r
 \r
 }}\r
index 823e3884c1e085700d9c13148dbf4702b6da86b4..0e418e69c6be3afab05be740d6fb2d12e9e9923d 100644 (file)
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>\r
 <configuration>\r
+  <channel-grid>true</channel-grid>\r
   <paths>\r
     <media-path>D:\casparcg\_media\</media-path>\r
     <log-path>D:\casparcg\_log\</log-path>\r
@@ -8,12 +9,16 @@
   </paths>\r
   <log-level>trace</log-level>\r
   <accelerator>auto</accelerator>\r
+  <flash>\r
+    <buffer-depth>4</buffer-depth>\r
+  </flash>\r
   <channels>\r
     <channel>\r
       <video-mode>PAL</video-mode>\r
       <consumers>\r
         <screen>\r
         </screen>\r
+        <decklink></decklink>\r
       </consumers>\r
     </channel>\r
   </channels>\r