]> git.sesse.net Git - casparcg/commitdiff
2.1.0: refactored print and destroy proxies.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 3 Feb 2012 18:42:59 +0000 (18:42 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 3 Feb 2012 18:42:59 +0000 (18:42 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.1.0@2222 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/producer/color/color_producer.cpp
core/producer/frame_producer.cpp
core/producer/frame_producer.h
core/producer/separated/separated_producer.cpp
core/producer/transition/transition_producer.cpp
modules/decklink/producer/decklink_producer.cpp
modules/ffmpeg/producer/ffmpeg_producer.cpp
modules/flash/producer/flash_producer.cpp
modules/image/producer/image_producer.cpp
modules/image/producer/image_scroll_producer.cpp
modules/reroute/producer/reroute_producer.cpp

index 62909b91d4d75d970749085d01ca95eb8640016c..fe5e2b0a89729879111fc505da4c0586ce213f9e 100644 (file)
@@ -124,8 +124,7 @@ safe_ptr<frame_producer> create_color_producer(const safe_ptr<frame_factory>& fr
        if(color2.length() != 9 || color2[0] != '#')\r
                return core::frame_producer::empty();\r
 \r
-       return create_producer_print_proxy(\r
-                       make_safe<color_producer>(frame_factory, color2));\r
+       return make_safe<color_producer>(frame_factory, color2);\r
 }\r
 safe_ptr<write_frame> create_color_frame(void* tag, const safe_ptr<frame_factory>& frame_factory, const std::wstring& color)\r
 {\r
index 9dc3b2774724448a082f05de95718e32a2cda63c..054991245ec63d4589a172a4a43b99d1667c1bd5 100644 (file)
 #include <common/memory/safe_ptr.h>\r
 \r
 namespace caspar { namespace core {\r
+       \r
+std::vector<const producer_factory_t> g_factories;\r
 \r
 boost::unique_future<std::wstring> frame_producer::call(const std::wstring&) \r
 {\r
        BOOST_THROW_EXCEPTION(not_supported());\r
 }\r
+\r
+struct empty_frame_producer : public frame_producer\r
+{\r
+       virtual safe_ptr<draw_frame> receive(int){return draw_frame::empty();}\r
+       virtual safe_ptr<draw_frame> last_frame() const{return draw_frame::empty();}\r
+       virtual void set_frame_factory(const safe_ptr<frame_factory>&){}\r
+       virtual uint32_t nb_frames() const {return 0;}\r
+       virtual std::wstring print() const { return L"empty";}\r
        \r
-std::vector<const producer_factory_t> g_factories;\r
-       \r
+       virtual boost::property_tree::wptree info() const override\r
+       {\r
+               boost::property_tree::wptree info;\r
+               info.add(L"type", L"empty-producer");\r
+               return info;\r
+       }\r
+};\r
+\r
+const safe_ptr<frame_producer>& frame_producer::empty() // nothrow\r
+{\r
+       static safe_ptr<frame_producer> producer = make_safe<empty_frame_producer>();\r
+       return producer;\r
+}      \r
+\r
+safe_ptr<draw_frame> receive_and_follow(safe_ptr<frame_producer>& producer, int hints)\r
+{      \r
+       auto frame = producer->receive(hints);\r
+       if(frame == draw_frame::eof())\r
+       {\r
+               CASPAR_LOG(info) << producer->print() << " End Of File.";\r
+               auto following = producer->get_following_producer();\r
+               if(following != frame_producer::empty())\r
+               {\r
+                       following->set_leading_producer(producer);\r
+                       producer = std::move(following);\r
+               }\r
+\r
+               return receive_and_follow(producer, hints);\r
+       }\r
+       return frame;\r
+}\r
+\r
+void register_producer_factory(const producer_factory_t& factory)\r
+{\r
+       g_factories.push_back(factory);\r
+}\r
+\r
 class destroy_producer_proxy : public frame_producer\r
 {      \r
        std::unique_ptr<std::shared_ptr<frame_producer>> producer_;\r
@@ -103,11 +148,6 @@ public:
        virtual uint32_t                                                                                        nb_frames() const override                                                                                              {return (*producer_)->nb_frames();}\r
 };\r
 \r
-safe_ptr<core::frame_producer> create_producer_destroy_proxy(safe_ptr<core::frame_producer> producer)\r
-{\r
-       return make_safe<destroy_producer_proxy>(std::move(producer));\r
-}\r
-\r
 class print_producer_proxy : public frame_producer\r
 {      \r
        std::shared_ptr<frame_producer> producer_;\r
@@ -126,66 +166,16 @@ public:
                CASPAR_LOG(info) << str << L" Uninitialized.";\r
        }\r
 \r
-       virtual safe_ptr<draw_frame>                                                            receive(int hints) override                                                                                             {return (producer_)->receive(hints);}\r
-       virtual safe_ptr<draw_frame>                                                            last_frame() const override                                                                                             {return (producer_)->last_frame();}\r
-       virtual std::wstring                                                                            print() const override                                                                                                  {return (producer_)->print();}\r
-       virtual boost::property_tree::wptree                                            info() const override                                                                                                   {return (producer_)->info();}\r
-       virtual boost::unique_future<std::wstring>                                      call(const std::wstring& str) override                                                                  {return (producer_)->call(str);}\r
-       virtual safe_ptr<frame_producer>                                                        get_following_producer() const override                                                                 {return (producer_)->get_following_producer();}\r
-       virtual void                                                                                            set_leading_producer(const safe_ptr<frame_producer>& producer) override {(producer_)->set_leading_producer(producer);}\r
-       virtual uint32_t                                                                                        nb_frames() const override                                                                                              {return (producer_)->nb_frames();}\r
-};\r
-\r
-safe_ptr<core::frame_producer> create_producer_print_proxy(safe_ptr<core::frame_producer> producer)\r
-{\r
-       return make_safe<print_producer_proxy>(std::move(producer));\r
-}\r
-\r
-struct empty_frame_producer : public frame_producer\r
-{\r
-       virtual safe_ptr<draw_frame> receive(int){return draw_frame::empty();}\r
-       virtual safe_ptr<draw_frame> last_frame() const{return draw_frame::empty();}\r
-       virtual void set_frame_factory(const safe_ptr<frame_factory>&){}\r
-       virtual uint32_t nb_frames() const {return 0;}\r
-       virtual std::wstring print() const { return L"empty";}\r
-       \r
-       virtual boost::property_tree::wptree info() const override\r
-       {\r
-               boost::property_tree::wptree info;\r
-               info.add(L"type", L"empty-producer");\r
-               return info;\r
-       }\r
+       virtual safe_ptr<draw_frame>                            receive(int hints) override                                                                                             {return (producer_)->receive(hints);}\r
+       virtual safe_ptr<draw_frame>                            last_frame() const override                                                                                             {return (producer_)->last_frame();}\r
+       virtual std::wstring                                            print() const override                                                                                                  {return (producer_)->print();}\r
+       virtual boost::property_tree::wptree            info() const override                                                                                                   {return (producer_)->info();}\r
+       virtual boost::unique_future<std::wstring>      call(const std::wstring& str) override                                                                  {return (producer_)->call(str);}\r
+       virtual safe_ptr<frame_producer>                        get_following_producer() const override                                                                 {return (producer_)->get_following_producer();}\r
+       virtual void                                                            set_leading_producer(const safe_ptr<frame_producer>& producer) override {(producer_)->set_leading_producer(producer);}\r
+       virtual uint32_t                                                        nb_frames() const override                                                                                              {return (producer_)->nb_frames();}\r
 };\r
 \r
-const safe_ptr<frame_producer>& frame_producer::empty() // nothrow\r
-{\r
-       static safe_ptr<frame_producer> producer = make_safe<empty_frame_producer>();\r
-       return producer;\r
-}      \r
-\r
-safe_ptr<draw_frame> receive_and_follow(safe_ptr<frame_producer>& producer, int hints)\r
-{      \r
-       auto frame = producer->receive(hints);\r
-       if(frame == draw_frame::eof())\r
-       {\r
-               CASPAR_LOG(info) << producer->print() << " End Of File.";\r
-               auto following = producer->get_following_producer();\r
-               if(following != frame_producer::empty())\r
-               {\r
-                       following->set_leading_producer(producer);\r
-                       producer = std::move(following);\r
-               }\r
-\r
-               return receive_and_follow(producer, hints);\r
-       }\r
-       return frame;\r
-}\r
-\r
-void register_producer_factory(const producer_factory_t& factory)\r
-{\r
-       g_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>& params)\r
 {\r
        if(params.empty())\r
@@ -208,10 +198,9 @@ safe_ptr<core::frame_producer> do_create_producer(const safe_ptr<frame_factory>&
        if(producer == frame_producer::empty())\r
                producer = create_color_producer(my_frame_factory, params);\r
                \r
-       return producer;\r
+       return make_safe<destroy_producer_proxy>(make_safe<print_producer_proxy>(std::move(producer)));\r
 }\r
 \r
-\r
 safe_ptr<core::frame_producer> create_producer(const safe_ptr<frame_factory>& my_frame_factory, const std::vector<std::wstring>& params)\r
 {      \r
        auto producer = do_create_producer(my_frame_factory, params);\r
index 1a37c654856c19915a01591516933a3ce88bcd90..7ea546ab0e8cd8f4a0451148ecac479375099b29 100644 (file)
@@ -78,8 +78,5 @@ void register_producer_factory(const producer_factory_t& factory); // Not thread
 \r
 safe_ptr<core::frame_producer> create_producer(const safe_ptr<frame_factory>&, const std::vector<std::wstring>& params);\r
 safe_ptr<core::frame_producer> create_producer(const safe_ptr<frame_factory>&, const std::wstring& params);\r
-\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
                \r
 }}\r
index b2ce80642a8d93a83922f504f46e57e7855982d2..2bca5ea9442443b6fac96716e6cc35a8a2a2ff47 100644 (file)
@@ -104,8 +104,7 @@ struct separated_producer : public frame_producer
 \r
 safe_ptr<frame_producer> create_separated_producer(const safe_ptr<frame_producer>& fill, const safe_ptr<frame_producer>& key)\r
 {\r
-       return create_producer_print_proxy(\r
-                       make_safe<separated_producer>(fill, key));\r
+       return make_safe<separated_producer>(fill, key);\r
 }\r
 \r
 }}\r
index f4fcfeaba7a90371cf02c36966e1f9585eacf662..fa3e3be4cc1b0a87d323d67774a5121dbec882ad 100644 (file)
@@ -180,8 +180,7 @@ struct transition_producer : public frame_producer
 \r
 safe_ptr<frame_producer> create_transition_producer(const field_mode& mode, const safe_ptr<frame_producer>& destination, const transition_info& info)\r
 {\r
-       return create_producer_print_proxy(\r
-                       make_safe<transition_producer>(mode, destination, info));\r
+       return make_safe<transition_producer>(mode, destination, info);\r
 }\r
 \r
 }}\r
index 6603ccb1a012cd338130b4eaddfafe6fe8b271ae..d65b71fcf2369079c5b5e7c85f9c2240dba2152e 100644 (file)
@@ -340,9 +340,7 @@ safe_ptr<core::frame_producer> create_producer(const safe_ptr<core::frame_factor
        if(format_desc.format == core::video_format::invalid)\r
                format_desc = frame_factory->get_video_format_desc();\r
                        \r
-       return create_producer_destroy_proxy(\r
-                  create_producer_print_proxy(\r
-                       make_safe<decklink_producer_proxy>(frame_factory, format_desc, device_index, filter_str, length)));\r
+       return make_safe<decklink_producer_proxy>(frame_factory, format_desc, device_index, filter_str, length);\r
 }\r
 \r
 }}
\ No newline at end of file
index af0307a96ddb096c1813570cc22d93c2fd084593..2f5c2867d87d67e0da141abae387ac89cf11b243 100644 (file)
@@ -322,9 +322,7 @@ safe_ptr<core::frame_producer> create_producer(const safe_ptr<core::frame_factor
        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
-       return create_producer_destroy_proxy(\r
-                  create_producer_print_proxy(\r
-                       make_safe<ffmpeg_producer>(frame_factory, filename, filter_str, loop, start, length)));\r
+       return make_safe<ffmpeg_producer>(frame_factory, filename, filter_str, loop, start, length);\r
 }\r
 \r
 }}
\ No newline at end of file
index 944214a67e28066cc4ed80b33d0009c938c80093..eab9e9a4a86e37f7457c783e2aa65716dd2605a1 100644 (file)
@@ -491,9 +491,7 @@ safe_ptr<core::frame_producer> create_producer(const safe_ptr<core::frame_factor
        if(!boost::filesystem::exists(filename))\r
                BOOST_THROW_EXCEPTION(file_not_found() << boost::errinfo_file_name(u8(filename)));      \r
 \r
-       return create_producer_destroy_proxy(\r
-                  create_producer_print_proxy(\r
-                       make_safe<flash_producer>(frame_factory, filename, template_host.width, template_host.height)));\r
+       return make_safe<flash_producer>(frame_factory, filename, template_host.width, template_host.height);\r
 }\r
 \r
 std::wstring find_template(const std::wstring& template_name)\r
index 1bed7b422c63407ece78206918b4544669102c47..9feca65273559d7f502b1fe567ff9f0f538102d5 100644 (file)
@@ -102,8 +102,7 @@ safe_ptr<core::frame_producer> create_producer(const safe_ptr<core::frame_factor
        if(ext == extensions.end())\r
                return core::frame_producer::empty();\r
 \r
-       return create_producer_print_proxy(\r
-                       make_safe<image_producer>(frame_factory, filename + *ext));\r
+       return make_safe<image_producer>(frame_factory, filename + *ext);\r
 }\r
 \r
 \r
index a4b055fc856f306980ae123dcb1aa710db567828..706c78dd29ab80af2d91da0d815301a5756ce49a 100644 (file)
@@ -249,8 +249,7 @@ safe_ptr<core::frame_producer> create_scroll_producer(const safe_ptr<core::frame
        if(speed == 0)\r
                return core::frame_producer::empty();\r
 \r
-       return create_producer_print_proxy(\r
-                       make_safe<image_scroll_producer>(frame_factory, filename + L"." + *ext, speed));\r
+       return make_safe<image_scroll_producer>(frame_factory, filename + L"." + *ext, speed);\r
 }\r
 \r
 }}
\ No newline at end of file
index e0ac61dc49577fc43056bc3678665167d8917d3c..6a69acb5b893de25166de64d29f20ce22ec23872 100644 (file)
@@ -141,7 +141,7 @@ safe_ptr<core::frame_producer> create_producer(const safe_ptr<core::frame_factor
 {\r
        auto producer = make_safe<reroute_producer>(frame_factory);\r
        o.subscribe(producer);\r
-       return create_producer_print_proxy(producer);\r
+       return producer;\r
 }\r
 \r
 }}
\ No newline at end of file