]> git.sesse.net Git - casparcg/commitdiff
Fixed bug with monitor subject lifetime
authorHelge Norberg <helge.norberg@svt.se>
Wed, 23 Oct 2013 13:46:12 +0000 (15:46 +0200)
committerHelge Norberg <helge.norberg@svt.se>
Wed, 23 Oct 2013 13:46:12 +0000 (15:46 +0200)
core/producer/draw/freehand_producer.cpp
core/producer/scene/const_producer.cpp
core/producer/scene/hotswap_producer.cpp
core/producer/scene/scene_producer.cpp
core/producer/text/text_producer.cpp
modules/bluefish/consumer/bluefish_consumer.cpp
modules/decklink/consumer/decklink_consumer.cpp
modules/image/consumer/image_consumer.cpp
modules/oal/consumer/oal_consumer.cpp
modules/reroute/producer/reroute_producer.cpp
modules/screen/consumer/screen_consumer.cpp

index 53a1f45f7f1c9dcadf710312c36e17acd2f57f63..fc31f653982b7b3664b0d750070516d4705fc979 100644 (file)
@@ -45,6 +45,7 @@ std::vector<uint8_t, tbb::cache_aligned_allocator<uint8_t>> empty_drawing(
 
 class freehand_producer : public frame_producer_base
 {
+       monitor::subject                                                                                        monitor_subject_;
        std::vector<uint8_t, tbb::cache_aligned_allocator<uint8_t>>     drawing_;
        spl::shared_ptr<core::frame_factory>                                            frame_factory_;
        constraints                                                                                                     constraints_;
@@ -163,7 +164,7 @@ public:
 
        monitor::source& monitor_output()
        {
-               static monitor::subject monitor_subject(""); return monitor_subject;
+               return monitor_subject_;
        }
 };
 
index 6f2c2269c39861f359abc97ecb6887ac65311f24..b92bbe849f8092685dedad5cdb40ba52baaea677 100644 (file)
@@ -30,6 +30,7 @@ namespace caspar { namespace core {
 
 class const_producer : public frame_producer_base
 {
+       monitor::subject monitor_subject_;
        std::vector<draw_frame> frames_;
        std::vector<draw_frame>::const_iterator seek_position_;
        constraints constraints_;
@@ -84,7 +85,7 @@ public:
 
        monitor::source& monitor_output()
        {
-               static monitor::subject monitor_subject(""); return monitor_subject;
+               return monitor_subject_;
        }
 };
 
index 15644060afdad6787f9bcb4cf582cf0b8a07ca94..8c0edf4795f8bfef7fa5a48aa4db5ec395168ff4 100644 (file)
@@ -30,6 +30,7 @@ namespace caspar { namespace core {
 
 struct hotswap_producer::impl
 {
+       monitor::subject monitor_subject;
        binding<std::shared_ptr<frame_producer>> producer;
        constraints size;
 
@@ -89,7 +90,7 @@ boost::property_tree::wptree hotswap_producer::info() const
 
 monitor::source& hotswap_producer::monitor_output()
 {
-       static monitor::subject monitor_subject(""); return monitor_subject;
+       return impl_->monitor_subject;
 }
 
 binding<std::shared_ptr<frame_producer>>& hotswap_producer::producer()
index 61eace8e56cfa8ccc00532fab443ba5e2beb71c9..f8eef59e66ecef42d8a7e2a705ad867d93e574ae 100644 (file)
@@ -95,6 +95,7 @@ struct scene_producer::impl
        std::map<void*, timeline> timelines_;
        std::map<std::wstring, std::shared_ptr<core::variable>> variables_;
        std::vector<std::wstring> variable_names_;
+       monitor::subject monitor_subject_;
 
        impl(int width, int height)
                : pixel_constraints_(width, height)
@@ -275,7 +276,7 @@ struct scene_producer::impl
 
        monitor::source& monitor_output()
        {
-               static monitor::subject monitor_subject(""); return monitor_subject;
+               return monitor_subject_;
        }
 };
 
index e63ee75424f3301980524ad322811fe1c60f20c9..1a08dcaeba6a7100fca9f878c8891b26f9e52f39 100644 (file)
@@ -130,6 +130,7 @@ namespace caspar { namespace core {
 
 struct text_producer::impl
 {
+       monitor::subject monitor_subject_;
        spl::shared_ptr<core::frame_factory> frame_factory_;
        constraints constraints_;
        int x_, y_, parent_width_, parent_height_;
@@ -308,7 +309,7 @@ constraints& text_producer::pixel_constraints() { return impl_->pixel_constraint
 std::wstring text_producer::print() const { return impl_->print(); }
 std::wstring text_producer::name() const { return impl_->name(); }
 boost::property_tree::wptree text_producer::info() const { return impl_->info(); }
-monitor::source& text_producer::monitor_output() { static monitor::subject monitor_subject(""); return monitor_subject; }
+monitor::source& text_producer::monitor_output() { return impl_->monitor_subject_; }
 binding<std::wstring>& text_producer::text() { return impl_->text(); }
 binding<double>& text_producer::tracking() { return impl_->tracking(); }
 const binding<double>& text_producer::current_bearing_y() const { return impl_->current_bearing_y(); }
index e223bc4fa4a73dd52845564e0617e5ec2c91f795..e1e6d17da0a2b31781ee240da3f555950d77f3a7 100644 (file)
@@ -298,6 +298,8 @@ public:
 
 struct bluefish_consumer_proxy : public core::frame_consumer
 {
+       monitor::subject                                        monitor_subject_;
+
        std::unique_ptr<bluefish_consumer>      consumer_;
        const int                                                       device_index_;
        const bool                                                      embedded_audio_;
@@ -365,7 +367,7 @@ public:
 
        monitor::source& monitor_output()
        {
-               static monitor::subject monitor_subject(""); return monitor_subject;
+               return monitor_subject_;
        }
 };     
 
index 11c22634ecf664d022ec30fb2065860dc5a17ccc..b516366ca41617d524c5ab198d25cd79ec6f0543 100644 (file)
@@ -516,6 +516,7 @@ public:
 
 struct decklink_consumer_proxy : public core::frame_consumer
 {
+       monitor::subject                                        monitor_subject_;
        const configuration                                     config_;
        std::unique_ptr<decklink_consumer>      consumer_;
        executor                                                        executor_;
@@ -591,7 +592,7 @@ public:
 
        monitor::source& monitor_output()
        {
-               static monitor::subject monitor_subject(""); return monitor_subject;
+               return monitor_subject_;
        }
 };     
 
index 660c5505a0d21a52f158b16fb343f3963cf590bf..24279af8244fa4e8dedffd10322d77d71810f15a 100644 (file)
@@ -67,7 +67,8 @@ namespace caspar { namespace image {
 
 struct image_consumer : public core::frame_consumer
 {
-       std::wstring filename_;
+       monitor::subject        monitor_subject_;
+       std::wstring            filename_;
 public:
 
        // frame_consumer
@@ -140,7 +141,7 @@ public:
 
        monitor::source& monitor_output()
        {
-               static monitor::subject monitor_subject(""); return monitor_subject;
+               return monitor_subject_;
        }
 };
 
index 778685937a896075722c6106e8518a17131886be..cdea8773f7a50cdc6ef8da06f1148b17c5800298 100644 (file)
@@ -104,6 +104,8 @@ void init_device()
 
 struct oal_consumer : public core::frame_consumer
 {
+       monitor::subject                                                                        monitor_subject_;
+
        spl::shared_ptr<diagnostics::graph>                                     graph_;
        boost::timer                                                                            perf_timer_;
        int                                                                                                     channel_index_;
@@ -260,7 +262,7 @@ public:
 
        monitor::source& monitor_output()
        {
-               static monitor::subject monitor_subject(""); return monitor_subject;
+               return monitor_subject_;
        }
 };
 
index 145d0b83980a096c8a45c12799b516b63179b554..9cb8003afa5c087d4b2b06970b5143c9ddf4c142 100644 (file)
@@ -54,6 +54,8 @@ namespace caspar { namespace reroute {
 class reroute_producer : public reactive::observer<std::map<int, core::draw_frame>>
                                           , public core::frame_producer_base
 {
+       monitor::subject                                                                                                monitor_subject_;
+
        core::constraints                                                                                               constraints_;
        const spl::shared_ptr<diagnostics::graph>                                               graph_;
        
@@ -115,7 +117,7 @@ public:
                
        monitor::source& monitor_output()
        {
-               static monitor::subject monitor_subject(""); return monitor_subject;
+               return monitor_subject_;
        }
 };
 
index fc5a15763b176c0dbc730194af7882f2f6c93b4c..a8f85d116a0561552d9a9f12a86a9cc65001a2b0 100644 (file)
@@ -554,6 +554,7 @@ public:
 
 struct screen_consumer_proxy : public core::frame_consumer
 {
+       monitor::subject monitor_subject_;
        const configuration config_;
        std::unique_ptr<screen_consumer> consumer_;
        core::interaction_sink* sink_;
@@ -616,7 +617,7 @@ public:
 
        monitor::source& monitor_output()
        {
-               static monitor::subject monitor_subject(""); return monitor_subject;
+               return monitor_subject_;
        }
 };