]> 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>
Fri, 21 Jan 2011 23:46:39 +0000 (23:46 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 21 Jan 2011 23:46:39 +0000 (23:46 +0000)
core/producer/frame_producer_device.cpp
core/producer/layer.cpp
core/producer/layer.h

index 6e43b9391800bdcbbc8c6186bbfbf3bc70334bdf..6e26eed6b944b0254473cca0df80c3c9cd87cbb1 100644 (file)
@@ -64,7 +64,7 @@ public:
                {\r
                        for(size_t i = r.begin(); i != r.end(); ++i)\r
                        {\r
-                               frames[i] = layers_[i].receive(i);\r
+                               frames[i] = layers_[i].receive();\r
                                frames[i]->set_layer_index(i);\r
                        }\r
                });             \r
@@ -79,7 +79,7 @@ public:
                producer->initialize(factory_);\r
                executor_.invoke([&]\r
                {\r
-                       layers_[index].load(index, producer, play_on_load);\r
+                       layers_[index].load(producer, play_on_load);\r
                });\r
        }\r
                        \r
@@ -89,7 +89,7 @@ public:
                producer->initialize(factory_);\r
                executor_.invoke([&]\r
                {                       \r
-                       layers_[index].preview(index, producer);\r
+                       layers_[index].preview(producer);\r
                });\r
        }\r
 \r
@@ -98,7 +98,7 @@ public:
                check_bounds(index);\r
                executor_.invoke([&]\r
                {\r
-                       layers_[index].pause(index);\r
+                       layers_[index].pause();\r
                });\r
        }\r
 \r
@@ -107,7 +107,7 @@ public:
                check_bounds(index);\r
                executor_.invoke([&]\r
                {\r
-                       layers_[index].play(index);\r
+                       layers_[index].play();\r
                });\r
        }\r
 \r
@@ -116,7 +116,7 @@ public:
                check_bounds(index);\r
                executor_.invoke([&]\r
                {\r
-                       layers_[index].stop(index);\r
+                       layers_[index].stop();\r
                });\r
        }\r
 \r
@@ -160,6 +160,9 @@ public:
 \r
        void swap_output(frame_producer_device& other)\r
        {\r
+               if(other.impl_.get() == this)\r
+                       return;\r
+\r
                tbb::spin_mutex::scoped_lock lock1(output_mutex_);\r
                tbb::spin_mutex::scoped_lock lock2(other.impl_->output_mutex_);\r
                output_.swap(other.impl_->output_);\r
index eed27b29473a4ac93f2f638ac66d8e07d32164a7..e2de193c24301aabdbfd822cccdabb550c32ede8 100644 (file)
@@ -27,18 +27,17 @@ public:
                , last_frame_(draw_frame::empty())\r
                , is_paused_(false){}\r
        \r
-       void load(int index, const safe_ptr<frame_producer>& frame_producer, bool play_on_load)\r
+       void load(const safe_ptr<frame_producer>& frame_producer, bool play_on_load)\r
        {                       \r
                background_ = frame_producer;\r
-               CASPAR_LOG(info) << print(index) << " " << frame_producer->print() << " => background";\r
                if(play_on_load)\r
-                       play(index);                    \r
+                       play();                 \r
        }\r
 \r
-       void preview(int index, const safe_ptr<frame_producer>& frame_producer)\r
+       void preview(const safe_ptr<frame_producer>& frame_producer)\r
        {\r
-               stop(index);\r
-               load(index, frame_producer, false);             \r
+               stop();\r
+               load(frame_producer, false);            \r
                try\r
                {\r
                        last_frame_ = frame_producer->receive();\r
@@ -46,11 +45,11 @@ public:
                catch(...)\r
                {\r
                        CASPAR_LOG_CURRENT_EXCEPTION();\r
-                       clear(index);\r
+                       clear();\r
                }\r
        }\r
        \r
-       void play(int index)\r
+       void play()\r
        {                       \r
                if(is_paused_)                  \r
                        is_paused_ = false;\r
@@ -59,31 +58,28 @@ public:
                        background_->set_leading_producer(foreground_);\r
                        foreground_ = background_;\r
                        background_ = frame_producer::empty();\r
-                       CASPAR_LOG(info) << print(index) << L" background => foreground";\r
                }\r
        }\r
 \r
-       void pause(int)\r
+       void pause()\r
        {\r
                is_paused_ = true;\r
        }\r
 \r
-       void stop(int index)\r
+       void stop()\r
        {\r
-               pause(index);\r
+               pause();\r
                last_frame_ = draw_frame::empty();\r
                foreground_ = frame_producer::empty();\r
-               CASPAR_LOG(warning) << print(index) << L" empty => foreground";\r
        }\r
 \r
-       void clear(int index)\r
+       void clear()\r
        {\r
-               stop(index);\r
+               stop();\r
                background_ = frame_producer::empty();\r
-               CASPAR_LOG(warning) << print(index) << L" empty => background";\r
        }\r
        \r
-       safe_ptr<draw_frame> receive(int index)\r
+       safe_ptr<draw_frame> receive()\r
        {               \r
                if(is_paused_)\r
                        return last_frame_;\r
@@ -99,21 +95,17 @@ public:
                                following->set_leading_producer(foreground_);\r
                                foreground_ = following;\r
 \r
-                               CASPAR_LOG(info) << print(index) << L" [EOF] " << foreground_->print() << " => foreground";\r
-\r
-                               last_frame_ = receive(index);\r
+                               last_frame_ = receive();\r
                        }\r
                }\r
                catch(...)\r
                {\r
                        CASPAR_LOG_CURRENT_EXCEPTION();\r
-                       stop(index);\r
+                       stop();\r
                }\r
 \r
                return last_frame_;\r
        }\r
-\r
-       std::wstring print(int index) const { return L"layer[" + boost::lexical_cast<std::wstring>(index) + L"]"; }\r
 };\r
 \r
 layer::layer() \r
@@ -135,13 +127,13 @@ void layer::swap(layer& other)
 {\r
        impl_ = other.impl_.compare_and_swap(impl_, other.impl_);\r
 }\r
-void layer::load(int index, const safe_ptr<frame_producer>& frame_producer, bool play_on_load){return impl_->load(index, frame_producer, play_on_load);}       \r
-void layer::preview(int index, const safe_ptr<frame_producer>& frame_producer){return impl_->preview(index, frame_producer);}  \r
-void layer::play(int index){impl_->play(index);}\r
-void layer::pause(int index){impl_->pause(index);}\r
-void layer::stop(int index){impl_->stop(index);}\r
-void layer::clear(int index){impl_->clear(index);}\r
-safe_ptr<draw_frame> layer::receive(int index) {return impl_->receive(index);}\r
+void layer::load(const safe_ptr<frame_producer>& frame_producer, bool play_on_load){return impl_->load(frame_producer, play_on_load);} \r
+void layer::preview(const safe_ptr<frame_producer>& frame_producer){return impl_->preview(frame_producer);}    \r
+void layer::play(){impl_->play();}\r
+void layer::pause(){impl_->pause();}\r
+void layer::stop(){impl_->stop();}\r
+void layer::clear(){impl_->clear();}\r
+safe_ptr<draw_frame> layer::receive() {return impl_->receive();}\r
 safe_ptr<frame_producer> layer::foreground() const { return impl_->foreground_;}\r
 safe_ptr<frame_producer> layer::background() const { return impl_->background_;}\r
 }}
\ No newline at end of file
index 9ae70a11f4c09c64a0c979eb37e3cc61585912fd..41cc74f1dd90297f281e11456c84017fcb52c736 100644 (file)
@@ -22,17 +22,17 @@ public:
        //NOTE: swap is thread-safe on "other", NOT on "this".\r
        void swap(layer& other); // nothrow \r
                \r
-       void load(int index, const safe_ptr<frame_producer>& producer, bool play_on_load = false); // nothrow\r
-       void preview(int index, const safe_ptr<frame_producer>& producer); // nothrow\r
-       void play(int index); // nothrow\r
-       void pause(int index); // nothrow\r
-       void stop(int index); // nothrow\r
-       void clear(int index); // nothrow\r
+       void load(const safe_ptr<frame_producer>& producer, bool play_on_load = false); // nothrow\r
+       void preview(const safe_ptr<frame_producer>& producer); // nothrow\r
+       void play(); // nothrow\r
+       void pause(); // nothrow\r
+       void stop(); // nothrow\r
+       void clear(); // nothrow\r
 \r
        safe_ptr<frame_producer> foreground() const; // nothrow\r
        safe_ptr<frame_producer> background() const; // nothrow\r
 \r
-       safe_ptr<draw_frame> receive(int index); // nothrow\r
+       safe_ptr<draw_frame> receive(); // nothrow\r
 private:\r
        struct implementation;\r
        tbb::atomic<implementation*> impl_;\r