]> git.sesse.net Git - casparcg/commitdiff
2.0. Fixed some last_frame() bugs.
authorRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Wed, 3 Aug 2011 09:05:14 +0000 (09:05 +0000)
committerRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Wed, 3 Aug 2011 09:05:14 +0000 (09:05 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1045 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

modules/decklink/producer/decklink_producer.cpp
modules/ffmpeg/producer/ffmpeg_producer.cpp
modules/flash/producer/flash_producer.cpp

index 56e3c9ca5ce9cffa0461320322e1b84b1b5a1392..00e7766ecb5f24fac5a321706cb29445c8a6757a 100644 (file)
@@ -88,7 +88,6 @@ class decklink_producer : boost::noncopyable, public IDeckLinkInputCallback
        safe_ptr<core::frame_factory>                                                           frame_factory_;\r
 \r
        tbb::concurrent_bounded_queue<safe_ptr<core::basic_frame>>      frame_buffer_;\r
-       safe_ptr<core::basic_frame>                                                                     tail_;\r
 \r
        std::exception_ptr                                                                                      exception_;\r
        filter                                                                                                          filter_;\r
@@ -103,7 +102,6 @@ public:
                , format_desc_(format_desc)\r
                , device_index_(device_index)\r
                , frame_factory_(frame_factory)\r
-               , tail_(core::basic_frame::empty())\r
                , filter_(filter)\r
                , muxer_(double_rate(filter) ? format_desc.fps * 2.0 : format_desc.fps, frame_factory->get_video_format_desc(), frame_factory)\r
        {\r
@@ -225,10 +223,11 @@ public:
                if(exception_ != nullptr)\r
                        std::rethrow_exception(exception_);\r
 \r
-               if(!frame_buffer_.try_pop(tail_))\r
+               safe_ptr<core::basic_frame> frame = core::basic_frame::late();\r
+               if(!frame_buffer_.try_pop(frame))\r
                        graph_->add_tag("late-frame");\r
                graph_->set_value("output-buffer", static_cast<float>(frame_buffer_.size())/static_cast<float>(frame_buffer_.capacity()));      \r
-               return tail_;\r
+               return frame;\r
        }\r
        \r
        std::wstring print() const\r
@@ -252,7 +251,10 @@ public:
                                \r
        virtual safe_ptr<core::basic_frame> receive()\r
        {\r
-               return last_frame_ = context_->get_frame();\r
+               auto frame = context_->get_frame();\r
+               if(frame != core::basic_frame::late())\r
+                       last_frame_ = frame;\r
+               return frame;\r
        }\r
 \r
        virtual safe_ptr<core::basic_frame> last_frame() const\r
index f08e1096623b883d39c9c840050d9d3e4ae87f26..529674b0b71ecf884cab22158105fbb8cd13a298 100644 (file)
@@ -120,9 +120,9 @@ public:
                        }\r
                }\r
                else            \r
-                       frame = muxer_.pop();           \r
+                       frame = last_frame_ = muxer_.pop();             \r
                \r
-               return last_frame_ = frame;\r
+               return frame;\r
        }\r
 \r
        virtual safe_ptr<core::basic_frame> last_frame() const\r
index 8f6864f1e56dc08c16085141acab07d4ca61c2cc..58650a60786939098b2454197d8749d134c1ccff 100644 (file)
@@ -260,8 +260,10 @@ public:
                graph_->set_value("output-buffer", static_cast<float>(frame_buffer_.size())/static_cast<float>(frame_buffer_.capacity()));\r
 \r
                auto frame = core::basic_frame::late();\r
-               frame_buffer_.try_pop(frame);           \r
-               return last_frame_ = frame;\r
+               if(frame_buffer_.try_pop(frame))\r
+                       last_frame_ = frame;\r
+\r
+               return frame;\r
        }\r
 \r
        virtual safe_ptr<core::basic_frame> last_frame() const\r