\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
\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
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
}\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
return make_safe<image_consumer>();\r
}\r
\r
-\r
-}\r
+}}\r