From: ronag Date: Sun, 4 Dec 2011 10:24:30 +0000 (+0000) Subject: git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches... X-Git-Tag: 2.0.2~24 X-Git-Url: https://git.sesse.net/?p=casparcg;a=commitdiff_plain;h=b4ed33da056eedaccb0c496730c13c60bef23f4b git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.2@1775 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d --- diff --git a/modules/decklink/producer/decklink_producer.cpp b/modules/decklink/producer/decklink_producer.cpp index e0812e327..6a0fd2d10 100644 --- a/modules/decklink/producer/decklink_producer.cpp +++ b/modules/decklink/producer/decklink_producer.cpp @@ -89,6 +89,7 @@ class decklink_producer : boost::noncopyable, public IDeckLinkInputCallback boost::timer tick_timer_; boost::timer frame_timer_; + tbb::atomic hints_; safe_ptr frame_factory_; std::vector audio_cadence_; @@ -109,6 +110,7 @@ public: , audio_cadence_(frame_factory->get_video_format_desc().audio_cadence) , muxer_(format_desc.fps, frame_factory, filter, ffmpeg::display_mode::deinterlace) { + hints_ = 0; frame_buffer_.set_capacity(2); graph_->add_guide("tick-time", 0.5); @@ -171,6 +173,8 @@ public: try { + muxer_.force_deinterlacing((hints_ & core::frame_producer::DEINTERLACE_HINT) != 0); + graph_->update_value("tick-time", tick_timer_.elapsed()*format_desc_.fps*0.5); tick_timer_.restart(); @@ -225,11 +229,13 @@ public: return S_OK; } - safe_ptr get_frame() + safe_ptr get_frame(int hints) { if(exception_ != nullptr) std::rethrow_exception(exception_); + hints_ = hints; + safe_ptr frame = core::basic_frame::late(); if(!frame_buffer_.try_pop(frame)) graph_->add_tag("late-frame"); @@ -267,9 +273,9 @@ public: // frame_producer - virtual safe_ptr receive(int) override + virtual safe_ptr receive(int hints) override { - auto frame = context_->get_frame(); + auto frame = context_->get_frame(hints); if(frame != core::basic_frame::late()) last_frame_ = frame; return frame; diff --git a/modules/ffmpeg/producer/ffmpeg_producer.cpp b/modules/ffmpeg/producer/ffmpeg_producer.cpp index 923d6125f..21004c357 100644 --- a/modules/ffmpeg/producer/ffmpeg_producer.cpp +++ b/modules/ffmpeg/producer/ffmpeg_producer.cpp @@ -144,7 +144,7 @@ public: frame_timer_.restart(); // TODO: buffered frame is not deinterlaced. - muxer_->force_deinterlacing(hints == core::frame_producer::DEINTERLACE_HINT); + muxer_->force_deinterlacing((hints & core::frame_producer::DEINTERLACE_HINT) != 0); for(int n = 0; n < 16 && frame_buffer_.size() < 2; ++n) try_decode_frame(hints);