]> git.sesse.net Git - casparcg/blobdiff - core/producer/image/image_producer.cpp
2.0.0.2:
[casparcg] / core / producer / image / image_producer.cpp
index 07135b9ae105621fa3f65a99f1219336412a3c1a..19013f04ee930158af7108e26e88ad579edc59e4 100644 (file)
@@ -19,10 +19,17 @@ struct image_producer : public frame_producer
 {\r
        image_producer(const std::wstring& filename, const frame_format_desc& format_desc) : format_desc_(format_desc), filename_(filename)     {}\r
 \r
+       ~image_producer()\r
+       {\r
+               if(factory_)\r
+                       factory_->release_frames(this);\r
+       }\r
+\r
        gpu_frame_ptr get_frame(){return frame_;}\r
 \r
        void initialize(const frame_factory_ptr& factory)\r
        {\r
+               factory_ = factory;\r
                auto bitmap = load_image(filename_);\r
                if(FreeImage_GetWidth(bitmap.get()) != format_desc_.width || FreeImage_GetHeight(bitmap.get()) == format_desc_.height)\r
                {\r
@@ -32,12 +39,13 @@ struct image_producer : public frame_producer
                }\r
 \r
                FreeImage_FlipVertical(bitmap.get());\r
-               frame_ = factory->create_frame(format_desc_);\r
-               common::aligned_memcpy(frame_->data(), FreeImage_GetBits(bitmap.get()), frame_->size());\r
+               frame_ = factory->create_frame(format_desc_, this);\r
+               common::aligned_parallel_memcpy(frame_->data(), FreeImage_GetBits(bitmap.get()), frame_->size());\r
        }\r
 \r
        const frame_format_desc& get_frame_format_desc() const { return format_desc_; } \r
 \r
+       frame_factory_ptr factory_;\r
        std::wstring filename_;\r
        frame_format_desc format_desc_;\r
        gpu_frame_ptr frame_;\r