]> git.sesse.net Git - casparcg/commitdiff
2.0.2: output: Destroy consumers on calling thread instead of pipeline thread.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Thu, 1 Dec 2011 20:00:19 +0000 (20:00 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Thu, 1 Dec 2011 20:00:19 +0000 (20:00 +0000)
       oal: Print proper channel index in diagnostics window.

git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.2@1754 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/consumer/output.cpp
modules/oal/consumer/oal_consumer.cpp

index 4fc9520772f43019e0ae8d383dfb105e139c03d3..4a7f810b3fa469663072080d015592441fa87aa8 100644 (file)
@@ -71,10 +71,7 @@ public:
        \r
        void add(safe_ptr<frame_consumer>&& consumer)\r
        {               \r
-               executor_.invoke([&]\r
-               {\r
-                       consumers_.erase(consumer->index());\r
-               }, high_priority);\r
+               remove(consumer->index());\r
 \r
                consumer = create_consumer_cadence_guard(std::move(consumer));\r
                consumer->initialize(format_desc_, channel_index_);\r
@@ -82,22 +79,31 @@ public:
                executor_.invoke([&]\r
                {\r
                        consumers_.insert(std::make_pair(consumer->index(), consumer));\r
-\r
                        CASPAR_LOG(info) << print() << L" " << consumer->print() << L" Added.";\r
                }, high_priority);\r
        }\r
 \r
        void remove(int index)\r
-       {\r
+       {               \r
+               // Destroy  consumer on calling thread:\r
+               std::shared_ptr<frame_consumer> old_consumer;\r
+\r
                executor_.invoke([&]\r
                {\r
                        auto it = consumers_.find(index);\r
                        if(it != consumers_.end())\r
                        {\r
-                               CASPAR_LOG(info) << print() << L" " << it->second->print() << L" Removed.";\r
+                               old_consumer = it->second;\r
                                consumers_.erase(it);\r
                        }\r
                }, high_priority);\r
+\r
+               if(old_consumer)\r
+               {\r
+                       auto str = old_consumer->print();\r
+                       old_consumer.reset();\r
+                       CASPAR_LOG(info) << print() << L" " << str << L" Removed.";\r
+               }\r
        }\r
        \r
        void set_video_format_desc(const video_format_desc& format_desc)\r
index 41826d8da3f5e775638af76b2f747cafba42d9a5..e554e2b5d263884b0dd53439846e2dc7768bf655 100644 (file)
@@ -50,7 +50,7 @@ struct oal_consumer : public core::frame_consumer,  public sf::SoundStream
        int                                                                                                     channel_index_;\r
 \r
        tbb::concurrent_bounded_queue<std::shared_ptr<audio_buffer_16>> input_;\r
-       boost::circular_buffer<audio_buffer_16>                 container_;\r
+       boost::circular_buffer<audio_buffer_16>                         container_;\r
        tbb::atomic<bool>                                                                       is_running_;\r
        core::audio_buffer                                                                      temp;\r
 \r
@@ -62,7 +62,6 @@ public:
        {\r
                graph_->add_guide("tick-time", 0.5);\r
                graph_->set_color("tick-time", diagnostics::color(0.0f, 0.6f, 0.9f));   \r
-               graph_->set_text(print());\r
                diagnostics::register_graph(graph_);\r
 \r
                is_running_ = true;\r
@@ -87,6 +86,8 @@ public:
        {\r
                format_desc_    = format_desc;          \r
                channel_index_  = channel_index;\r
+               graph_->set_text(print());\r
+\r
                if(Status() != Playing)\r
                {\r
                        sf::SoundStream::Initialize(2, 48000);\r