bool is_paused_;\r
int auto_play_delta_;\r
int64_t frame_number_;\r
+ safe_ptr<core::basic_frame> last_frame_;\r
+\r
public:\r
implementation() \r
: foreground_(frame_producer::empty())\r
, background_(frame_producer::empty())\r
, is_paused_(false)\r
, auto_play_delta_(-1)\r
- , frame_number_(0){}\r
+ , frame_number_(0)\r
+ , last_frame_(core::basic_frame::empty()){}\r
\r
void pause()\r
{\r
{\r
foreground_ = frame_producer::empty();\r
frame_number_ = 0;\r
+ last_frame_ = core::basic_frame::empty();\r
}\r
\r
safe_ptr<basic_frame> receive()\r
try\r
{\r
if(is_paused_)\r
- return foreground_->last_frame();\r
+ return disable_audio(last_frame_);\r
\r
const auto frames_left = foreground_->nb_frames() - (++frame_number_) - auto_play_delta_;\r
\r
\r
if(auto_play_delta_ >= 0)\r
{\r
+ CASPAR_ASSERT(background_ != core::frame_producer::empty());\r
if(frames_left <= 0 || frame == core::basic_frame::eof())\r
{\r
//CASPAR_ASSERT(frame != core::basic_frame::eof() && "Received early EOF. Media duration metadata incorrect.");\r
frame = receive();\r
}\r
}\r
+\r
+ if(frame == core::basic_frame::eof())\r
+ {\r
+ pause();\r
+ return receive();\r
+ }\r
\r
- return frame;\r
+ return last_frame_ = frame;\r
}\r
catch(...)\r
{\r