]> git.sesse.net Git - casparcg/blobdiff - modules/image/producer/image_scroll_producer.cpp
2.0. Updated namespaces.
[casparcg] / modules / image / producer / image_scroll_producer.cpp
index c3b441e0ce30c285e460775a3b30d6406754cb0e..4a7b8d195a0b38ebf3c729d1bfdc89820e7eb58b 100644 (file)
@@ -17,6 +17,9 @@
 *    along with CasparCG.  If not, see <http://www.gnu.org/licenses/>.\r
 *\r
 */\r
+// TODO: Refactor.\r
+// TODO: Looping.\r
+\r
 #include "image_scroll_producer.h"\r
 \r
 #include "../util/image_loader.h"\r
@@ -24,7 +27,8 @@
 #include <core/video_format.h>\r
 \r
 #include <core/producer/frame/basic_frame.h>\r
-#include <core/producer/frame/image_transform.h>\r
+#include <core/producer/frame/frame_factory.h>\r
+#include <core/producer/frame/frame_transform.h>\r
 #include <core/mixer/write_frame.h>\r
 \r
 #include <common/env.h>\r
 #include <boost/assign.hpp>\r
 #include <boost/filesystem.hpp>\r
 #include <boost/foreach.hpp>\r
+#include <boost/lexical_cast.hpp>\r
 \r
 #include <algorithm>\r
+#include <array>\r
 \r
 using namespace boost::assign;\r
 \r
-namespace caspar {\r
+namespace caspar { namespace image {\r
                \r
 struct image_scroll_producer : public core::frame_producer\r
 {      \r
@@ -53,12 +59,15 @@ struct image_scroll_producer : public core::frame_producer
        int                                                                                     speed_;\r
 \r
        std::array<double, 2>                                           start_offset_;\r
+\r
+       safe_ptr<core::basic_frame>                                     last_frame_;\r
        \r
        explicit image_scroll_producer(const safe_ptr<core::frame_factory>& frame_factory, const std::wstring& filename, int speed) \r
                : filename_(filename)\r
                , delta_(0)\r
                , format_desc_(frame_factory->get_video_format_desc())\r
                , speed_(speed)\r
+               , last_frame_(core::basic_frame::empty())\r
        {\r
                start_offset_.assign(0.0);\r
 \r
@@ -143,9 +152,9 @@ struct image_scroll_producer : public core::frame_producer
        \r
        // frame_producer\r
 \r
-       virtual safe_ptr<core::basic_frame> receive()\r
+       virtual safe_ptr<core::basic_frame> receive(int)\r
        {               \r
-               delta_ = 1;//+= speed_;\r
+               delta_ += speed_;\r
 \r
                if(frames_.empty())\r
                        return core::basic_frame::eof();\r
@@ -156,7 +165,10 @@ struct image_scroll_producer : public core::frame_producer
                                return core::basic_frame::eof();\r
 \r
                        for(size_t n = 0; n < frames_.size(); ++n)\r
-                               frames_[n]->get_image_transform().set_fill_translation(start_offset_[0], start_offset_[1] -0.5*(n+1) + delta_ * 0.5/static_cast<double>(format_desc_.height));\r
+                       {\r
+                               frames_[n]->get_frame_transform().fill_translation[0] = start_offset_[0];\r
+                               frames_[n]->get_frame_transform().fill_translation[1] = start_offset_[1] - (n+1) + delta_ * 0.5/static_cast<double>(format_desc_.height);\r
+                       }\r
                }\r
                else\r
                {\r
@@ -164,10 +176,18 @@ struct image_scroll_producer : public core::frame_producer
                                return core::basic_frame::eof();\r
 \r
                        for(size_t n = 0; n < frames_.size(); ++n)\r
-                               frames_[n]->get_image_transform().set_fill_translation(start_offset_[0] -0.5*(n+1) + delta_ * 0.5/static_cast<double>(format_desc_.height), start_offset_[1]);\r
+                       {\r
+                               frames_[n]->get_frame_transform().fill_translation[0] = start_offset_[0] - (n+1) + delta_ * 0.5/static_cast<double>(format_desc_.width);                                \r
+                               frames_[n]->get_frame_transform().fill_translation[1] = start_offset_[1];\r
+                       }\r
                }\r
 \r
-               return core::basic_frame(frames_);\r
+               return last_frame_ = core::basic_frame(frames_);\r
+       }\r
+\r
+       virtual safe_ptr<core::basic_frame> last_frame() const\r
+       {\r
+               return last_frame_;\r
        }\r
                \r
        virtual std::wstring print() const\r
@@ -180,18 +200,18 @@ struct image_scroll_producer : public core::frame_producer
                if(height_ > format_desc_.height)\r
                {\r
                        auto length = (height_ - format_desc_.height);\r
-                       return (length/std::abs(speed_) + length % std::abs(delta_));\r
+                       return length/std::abs(speed_);// + length % std::abs(delta_));\r
                }\r
                else\r
                {\r
                        auto length = (width_ - format_desc_.width);\r
-                       auto result = (length/std::abs(speed_) + length % std::abs(delta_));\r
+                       auto result = length/std::abs(speed_);// + length % std::abs(delta_));\r
                        return result;\r
                }\r
        }\r
 };\r
 \r
-safe_ptr<core::frame_producer> create_image_scroll_producer(const safe_ptr<core::frame_factory>& frame_factory, const std::vector<std::wstring>& params)\r
+safe_ptr<core::frame_producer> create_scroll_producer(const safe_ptr<core::frame_factory>& frame_factory, const std::vector<std::wstring>& params)\r
 {\r
        static const std::vector<std::wstring> extensions = list_of(L"png")(L"tga")(L"bmp")(L"jpg")(L"jpeg")(L"gif")(L"tiff")(L"tif")(L"jp2")(L"jpx")(L"j2k")(L"j2c");\r
        std::wstring filename = env::media_folder() + L"\\" + params[0];\r
@@ -218,5 +238,4 @@ safe_ptr<core::frame_producer> create_image_scroll_producer(const safe_ptr<core:
        return make_safe<image_scroll_producer>(frame_factory, filename + L"." + *ext, speed);\r
 }\r
 \r
-\r
-}
\ No newline at end of file
+}}
\ No newline at end of file