\r
safe_ptr<basic_frame> receive()\r
{ \r
- if(is_paused_)\r
- return foreground_->last_frame();\r
+ try\r
+ {\r
+ if(is_paused_)\r
+ return foreground_->last_frame();\r
\r
- const auto frames_left = foreground_->nb_frames() - (++frame_number_) - auto_play_delta_;\r
+ const auto frames_left = foreground_->nb_frames() - (++frame_number_) - auto_play_delta_;\r
\r
- auto frame = receive_and_follow(foreground_, frame_producer::NO_HINT);\r
- if(frame == core::basic_frame::late())\r
- return foreground_->last_frame();\r
+ auto frame = receive_and_follow(foreground_, frame_producer::NO_HINT);\r
+ if(frame == core::basic_frame::late())\r
+ return foreground_->last_frame();\r
\r
- if(auto_play_delta_ >= 0)\r
- {\r
- if(frames_left <= 0 || frame == core::basic_frame::eof())\r
+ if(auto_play_delta_ >= 0)\r
{\r
- //CASPAR_ASSERT(frame != core::basic_frame::eof() && "Received early EOF. Media duration metadata incorrect.");\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
\r
- CASPAR_LOG(info) << L"Automatically playing next clip with " << auto_play_delta_ << " frames offset. Frames left: " << frames_left;\r
+ CASPAR_LOG(info) << L"Automatically playing next clip with " << auto_play_delta_ << " frames offset. Frames left: " << frames_left;\r
\r
- play();\r
- frame = receive();\r
+ play();\r
+ frame = receive();\r
+ }\r
}\r
- }\r
\r
- return frame;\r
+ return frame;\r
+ }\r
+ catch(...)\r
+ {\r
+ CASPAR_LOG_CURRENT_EXCEPTION();\r
+ stop();\r
+ return core::basic_frame::empty();\r
+ }\r
}\r
\r
bool empty() const\r