]> git.sesse.net Git - casparcg/blobdiff - core/producer/layer.cpp
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
[casparcg] / core / producer / layer.cpp
index 4611bb701f3ef2b37586f6b6d7f42e501de5aa0e..9ba6acaa5360094278f057d4cb138de55702c89f 100644 (file)
@@ -86,29 +86,38 @@ public:
                \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