]> git.sesse.net Git - casparcg/blobdiff - core/consumer/output.cpp
2.0. Improved error recovery.
[casparcg] / core / consumer / output.cpp
index 3962adb4f8cc60a84afc38a9ff363051991634cc..51b62e57620c5d41238f6fafc2135280b7eb9358 100644 (file)
@@ -113,46 +113,40 @@ public:
        }\r
                                                \r
        void execute(const safe_ptr<read_frame>& frame)\r
-       {               \r
-               try\r
-               {               \r
-                       if(!has_synchronization_clock())\r
-                               timer_.tick(1.0/channel_.get_format_desc().fps);\r
-                                               \r
-                       auto fill = frame;\r
-                       auto key = make_safe<deferred_key_read_Frame>(channel_.ogl(), frame);\r
+       {                       \r
+               if(!has_synchronization_clock())\r
+                       timer_.tick(1.0/channel_.get_format_desc().fps);\r
 \r
-                       auto it = consumers_.begin();\r
-                       while(it != consumers_.end())\r
+               if(frame->image_size() != channel_.get_format_desc().size)\r
+               {\r
+                       timer_.tick(1.0/channel_.get_format_desc().fps);\r
+                       return;\r
+               }\r
+\r
+               auto fill = frame;\r
+               auto key = make_safe<deferred_key_read_Frame>(channel_.ogl(), frame);\r
+\r
+               auto it = consumers_.begin();\r
+               while(it != consumers_.end())\r
+               {\r
+                       try\r
                        {\r
-                               try\r
-                               {\r
-                                       auto consumer = it->second;\r
-\r
-                                       if(consumer->get_video_format_desc() != channel_.get_format_desc())\r
-                                               consumer->initialize(channel_.get_format_desc());\r
-\r
-                                       auto frame = consumer->key_only() ? key : fill;\r
-\r
-                                       if(frame->image_size() == consumer->get_video_format_desc().size)\r
-                                       {       \r
-                                               if(!consumer->send(frame))\r
-                                                       consumers_.erase(it++);\r
-                                               else\r
-                                                       ++it;\r
-                                       }\r
-                               }\r
-                               catch(...)\r
-                               {\r
-                                       CASPAR_LOG_CURRENT_EXCEPTION();\r
-                                       CASPAR_LOG(error) << print() << L" " << it->second->print() << L" Removed.";\r
+                               auto consumer = it->second;\r
+\r
+                               if(consumer->get_video_format_desc() != channel_.get_format_desc())\r
+                                       consumer->initialize(channel_.get_format_desc());\r
+\r
+                               if(consumer->send(consumer->key_only() ? key : fill))\r
+                                       ++it;\r
+                               else\r
                                        consumers_.erase(it++);\r
-                               }\r
                        }\r
-               }\r
-               catch(...)\r
-               {\r
-                       CASPAR_LOG_CURRENT_EXCEPTION();\r
+                       catch(...)\r
+                       {\r
+                               CASPAR_LOG_CURRENT_EXCEPTION();\r
+                               CASPAR_LOG(error) << print() << L" " << it->second->print() << L" Removed.";\r
+                               consumers_.erase(it++);\r
+                       }\r
                }\r
        }\r
 \r