]> git.sesse.net Git - casparcg/commitdiff
2.0. seperated_producder: Fixed nb_frames and key eof.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 9 Aug 2011 08:40:36 +0000 (08:40 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 9 Aug 2011 08:40:36 +0000 (08:40 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1100 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/producer/separated/separated_producer.cpp

index 95bf3840666183911a8fe1aa5200c57752e1db59..33b81056640ae677923348bf287b8b463bafea5a 100644 (file)
@@ -34,14 +34,16 @@ struct separated_producer : public frame_producer
        safe_ptr<basic_frame>           fill_;\r
        safe_ptr<basic_frame>           key_;\r
        safe_ptr<basic_frame>           last_frame_;\r
+       int64_t                                         nb_frames_;\r
                \r
        explicit separated_producer(const safe_ptr<frame_producer>& fill, const safe_ptr<frame_producer>& key) \r
                : fill_producer_(fill)\r
                , key_producer_(key)\r
                , fill_(core::basic_frame::late())\r
                , key_(core::basic_frame::late())\r
-               , last_frame_(core::basic_frame::empty()){}\r
-       \r
+               , last_frame_(core::basic_frame::empty())\r
+       {\r
+       }\r
        // frame_producer\r
        \r
        virtual safe_ptr<basic_frame> receive(int hints)\r
@@ -60,7 +62,7 @@ struct separated_producer : public frame_producer
                        }\r
                );\r
 \r
-               if(fill_ == basic_frame::eof())\r
+               if(fill_ == basic_frame::eof() || key_ == basic_frame::eof())\r
                        return basic_frame::eof();\r
 \r
                if(fill_ == core::basic_frame::late() || key_ == core::basic_frame::late()) // One of the producers is lagging, keep them in sync.\r
@@ -83,6 +85,12 @@ struct separated_producer : public frame_producer
        {\r
                return L"separated";\r
        }       \r
+\r
+       virtual int64_t nb_frames() const \r
+       {\r
+               return std::min(fill_producer_->nb_frames() > 0 ? fill_producer_->nb_frames() : std::numeric_limits<int64_t>::max(), \r
+                                           key_producer_->nb_frames() > 0 ? key_producer_->nb_frames() : std::numeric_limits<int64_t>::max());\r
+       }\r
 };\r
 \r
 safe_ptr<frame_producer> create_separated_producer(const safe_ptr<frame_producer>& fill, const safe_ptr<frame_producer>& key)\r