]> git.sesse.net Git - casparcg/blobdiff - modules/image/consumer/image_consumer.cpp
2.0. Updated namespaces.
[casparcg] / modules / image / consumer / image_consumer.cpp
index 5d6cca34a072bab7e4c049a4e9e61de66375a95b..bee70d1fc2143fef6d05130fa4d027b5876eae48 100644 (file)
 \r
 #include <FreeImage.h>\r
 \r
-namespace caspar {\r
+#include <vector>\r
+\r
+namespace caspar { namespace image {\r
        \r
 struct image_consumer : public core::frame_consumer\r
 {\r
-       core::video_format_desc format_desc_;\r
-       size_t counter_;\r
+       core::video_format_desc                                 format_desc_;\r
+       std::vector<safe_ptr<core::read_frame>> frames_;\r
 public:\r
-       image_consumer() : counter_(0)\r
-       {\r
-       }\r
 \r
        virtual void initialize(const core::video_format_desc& format_desc)\r
        {\r
@@ -54,9 +53,12 @@ public:
        \r
        virtual bool send(const safe_ptr<core::read_frame>& frame)\r
        {                               \r
-               if(counter_++ < core::consumer_buffer_depth())\r
+               frames_.push_back(frame);\r
+\r
+               if(frames_.size() < core::consumer_buffer_depth())\r
                        return true;\r
 \r
+               auto my_frame = frames_.front();\r
                boost::thread async([=]\r
                {\r
                        try\r
@@ -64,7 +66,7 @@ public:
                                auto filename = narrow(env::data_folder()) +  boost::posix_time::to_iso_string(boost::posix_time::second_clock::local_time()) + ".png";\r
 \r
                                auto bitmap = std::shared_ptr<FIBITMAP>(FreeImage_Allocate(format_desc_.width, format_desc_.height, 32), FreeImage_Unload);\r
-                               memcpy(FreeImage_GetBits(bitmap.get()), frame->image_data().begin(), frame->image_size());\r
+                               memcpy(FreeImage_GetBits(bitmap.get()), my_frame->image_data().begin(), my_frame->image_size());\r
                                FreeImage_FlipVertical(bitmap.get());\r
                                FreeImage_Save(FIF_PNG, bitmap.get(), filename.c_str(), 0);\r
                        }\r
@@ -89,7 +91,7 @@ public:
        }\r
 };\r
 \r
-safe_ptr<core::frame_consumer> create_image_consumer(const std::vector<std::wstring>& params)\r
+safe_ptr<core::frame_consumer> create_consumer(const std::vector<std::wstring>& params)\r
 {\r
        if(params.size() < 1 || params[0] != L"IMAGE")\r
                return core::frame_consumer::empty();\r
@@ -97,5 +99,4 @@ safe_ptr<core::frame_consumer> create_image_consumer(const std::vector<std::wstr
        return make_safe<image_consumer>();\r
 }\r
 \r
-\r
-}\r
+}}\r