]> 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>
Sun, 4 Dec 2011 10:24:30 +0000 (10:24 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 4 Dec 2011 10:24:30 +0000 (10:24 +0000)
modules/decklink/producer/decklink_producer.cpp
modules/ffmpeg/producer/ffmpeg_producer.cpp

index e0812e3272402aca56b474a992bb4799c4de8bf7..6a0fd2d103f9ced04dddaae2ed7475ed47603446 100644 (file)
@@ -89,6 +89,7 @@ class decklink_producer : boost::noncopyable, public IDeckLinkInputCallback
        boost::timer                                                                                            tick_timer_;\r
        boost::timer                                                                                            frame_timer_;\r
                \r
+       tbb::atomic<int>                                                                                        hints_;\r
        safe_ptr<core::frame_factory>                                                           frame_factory_;\r
        std::vector<size_t>                                                                                     audio_cadence_;\r
 \r
@@ -109,6 +110,7 @@ public:
                , audio_cadence_(frame_factory->get_video_format_desc().audio_cadence)\r
                , muxer_(format_desc.fps, frame_factory, filter, ffmpeg::display_mode::deinterlace)\r
        {\r
+               hints_ = 0;\r
                frame_buffer_.set_capacity(2);\r
                \r
                graph_->add_guide("tick-time", 0.5);\r
@@ -171,6 +173,8 @@ public:
 \r
                try\r
                {\r
+                       muxer_.force_deinterlacing((hints_ & core::frame_producer::DEINTERLACE_HINT) != 0);\r
+\r
                        graph_->update_value("tick-time", tick_timer_.elapsed()*format_desc_.fps*0.5);\r
                        tick_timer_.restart();\r
 \r
@@ -225,11 +229,13 @@ public:
                return S_OK;\r
        }\r
        \r
-       safe_ptr<core::basic_frame> get_frame()\r
+       safe_ptr<core::basic_frame> get_frame(int hints)\r
        {\r
                if(exception_ != nullptr)\r
                        std::rethrow_exception(exception_);\r
 \r
+               hints_ = hints;\r
+\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
@@ -267,9 +273,9 @@ public:
 \r
        // frame_producer\r
                                \r
-       virtual safe_ptr<core::basic_frame> receive(int) override\r
+       virtual safe_ptr<core::basic_frame> receive(int hints) override\r
        {\r
-               auto frame = context_->get_frame();\r
+               auto frame = context_->get_frame(hints);\r
                if(frame != core::basic_frame::late())\r
                        last_frame_ = frame;\r
                return frame;\r
index 923d6125f0cf5a6c62308520f7bf0b65ecaddc35..21004c35797f1068efec2a1a317a09721ff821a9 100644 (file)
@@ -144,7 +144,7 @@ public:
                frame_timer_.restart();\r
 \r
                // TODO: buffered frame is not deinterlaced.\r
-               muxer_->force_deinterlacing(hints == core::frame_producer::DEINTERLACE_HINT);\r
+               muxer_->force_deinterlacing((hints & core::frame_producer::DEINTERLACE_HINT) != 0);\r
                \r
                for(int n = 0; n < 16 && frame_buffer_.size() < 2; ++n)\r
                        try_decode_frame(hints);\r