]> git.sesse.net Git - casparcg/commitdiff
2.0.0.2: Added some comments. - read_frame: Added error handling for image_data future.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Thu, 26 May 2011 09:15:34 +0000 (09:15 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Thu, 26 May 2011 09:15:34 +0000 (09:15 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@813 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/mixer/image/image_mixer.cpp
core/mixer/read_frame.cpp
core/mixer/write_frame.cpp

index 8342dfb49f1160cbc04deec8bb83405e083c96b2..6be5505c72cbbed06719737cd7c2b1b948627708 100644 (file)
@@ -111,7 +111,7 @@ public:
        boost::unique_future<safe_ptr<const host_buffer>> render()\r
        {\r
                auto result = ogl_device::create_host_buffer(format_desc_.size, host_buffer::read_only);\r
-                       \r
+\r
                auto render_queue = std::move(render_queue_);\r
 \r
                ogl_device::begin_invoke([=]() mutable\r
@@ -152,6 +152,8 @@ public:
 \r
                        std::swap(draw_buffer_, write_buffer_);\r
                });\r
+\r
+               // While transferring do additional work which was queued during rendering.\r
                \r
                return ogl_device::begin_invoke([=]() -> safe_ptr<const host_buffer>\r
                {\r
index 492449246ad130ff7fcdce298cddb524c3c38cbc..9fb9b7bd2a2f50e17ffff0cf214388b231a33376 100644 (file)
@@ -47,10 +47,18 @@ read_frame::read_frame(safe_ptr<const host_buffer>&& image_data, std::vector<sho
 \r
 const boost::iterator_range<const unsigned char*> read_frame::image_data() const\r
 {\r
-       if(!impl_->image_data_.get()->data())\r
+       try\r
+       {\r
+               if(!impl_->image_data_.get()->data())\r
+                       return boost::iterator_range<const unsigned char*>();\r
+               auto ptr = static_cast<const unsigned char*>(impl_->image_data_.get()->data());\r
+               return boost::iterator_range<const unsigned char*>(ptr, ptr + impl_->image_data_.get()->size());\r
+       }\r
+       catch(...) // image_data_ future might store exception.\r
+       {\r
+               CASPAR_LOG_CURRENT_EXCEPTION();\r
                return boost::iterator_range<const unsigned char*>();\r
-       auto ptr = static_cast<const unsigned char*>(impl_->image_data_.get()->data());\r
-       return boost::iterator_range<const unsigned char*>(ptr, ptr + impl_->image_data_.get()->size());\r
+       }\r
 }\r
 const boost::iterator_range<const short*> read_frame::audio_data() const\r
 {\r
index c56edb4d02c9a55b7e612ee6b8065b9125fa3fed..2933a7f51748bc33a70c06a9166eb6a487c15ba4 100644 (file)
@@ -82,7 +82,7 @@ public:
                        return;\r
                                \r
                auto texture = textures_[plane_index];\r
-               auto buffer = std::move(buffers_[plane_index]);\r
+               auto buffer = std::move(buffers_[plane_index]); // Release buffer once done.\r
 \r
                ogl_device::begin_invoke([=]\r
                {\r