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
, 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
\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
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
\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
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