struct frame_producer_base::impl\r
{\r
tbb::atomic<uint32_t> frame_number_;\r
- tbb::atomic<bool> paused_;\r
frame_producer_base& self_;\r
draw_frame last_frame_;\r
\r
, last_frame_(draw_frame::empty())\r
{\r
frame_number_ = 0;\r
- paused_ = false;\r
}\r
\r
draw_frame receive()\r
{\r
- if(paused_)\r
- return self_.last_frame();\r
-\r
auto frame = draw_frame::push(self_.receive_impl());\r
if(frame == draw_frame::late())\r
return frame;\r
\r
return last_frame_ = frame;\r
}\r
-\r
- void paused(bool value)\r
- {\r
- paused_ = value;\r
- }\r
-\r
+ \r
draw_frame last_frame() const\r
{\r
return draw_frame::still(last_frame_);\r
\r
void frame_producer_base::paused(bool value)\r
{\r
- impl_->paused(value);\r
+ BOOST_THROW_EXCEPTION(not_supported());\r
}\r
\r
draw_frame frame_producer_base::last_frame() const\r
\r
decode_next_frame();\r
\r
- for(int n = 0; n < 50 && video_decoder_.file_frame_number() != target+2 && !muxer_.empty(); ++n) // TODO: +2 since a frame can be stuck inside yadif filter.\r
+ for(int n = 0; n < 25 && video_decoder_.file_frame_number() != target+2 && !muxer_.empty(); ++n) // TODO: +2 since a frame can be stuck inside yadif filter.\r
{\r
muxer_.pop();\r
decode_next_frame();\r