]> git.sesse.net Git - casparcg/commitdiff
2.1.0: -data_frame: use unique_ptr instead of shared_ptr.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 14 Feb 2012 01:03:37 +0000 (01:03 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 14 Feb 2012 01:03:37 +0000 (01:03 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.1.0@2400 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

18 files changed:
accelerator/cpu/image/image_mixer.cpp
accelerator/cpu/image/image_mixer.h
accelerator/ogl/image/image_mixer.cpp
accelerator/ogl/image/image_mixer.h
core/frame/draw_frame.cpp
core/frame/draw_frame.h
core/frame/frame_factory.h
core/mixer/image/image_mixer.h
core/mixer/mixer.cpp
core/mixer/mixer.h
core/producer/color/color_producer.cpp
core/video_channel.cpp
modules/ffmpeg/producer/muxer/frame_muxer.cpp
modules/ffmpeg/producer/util/util.cpp
modules/ffmpeg/producer/util/util.h
modules/flash/producer/flash_producer.cpp
modules/image/producer/image_scroll_producer.cpp
modules/reroute/producer/reroute_producer.cpp

index 166e8920ed1079fba83d70f8a7f72586a1ec09e0..e72d041646e594d22a6e1252910843d98dafe2d9 100644 (file)
@@ -349,9 +349,9 @@ public:
                return renderer_(std::move(items_), format_desc);\r
        }\r
        \r
-       virtual spl::shared_ptr<core::data_frame> create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode)\r
+       virtual spl::unique_ptr<core::data_frame> create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode)\r
        {\r
-               return spl::make_shared<cpu::data_frame>(tag, desc, frame_rate, field_mode);\r
+               return spl::make_unique<cpu::data_frame>(tag, desc, frame_rate, field_mode);\r
        }\r
 };\r
 \r
@@ -362,6 +362,6 @@ void image_mixer::pop(){impl_->pop();}
 boost::shared_future<boost::iterator_range<const uint8_t*>> image_mixer::operator()(const core::video_format_desc& format_desc){return impl_->render(format_desc);}\r
 void image_mixer::begin_layer(core::blend_mode blend_mode){impl_->begin_layer(blend_mode);}\r
 void image_mixer::end_layer(){impl_->end_layer();}\r
-spl::shared_ptr<core::data_frame> image_mixer::create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) {return impl_->create_frame(tag, desc, frame_rate, field_mode);}\r
+spl::unique_ptr<core::data_frame> image_mixer::create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) {return impl_->create_frame(tag, desc, frame_rate, field_mode);}\r
 \r
 }}}
\ No newline at end of file
index 75fdb3dab93bd747812e7e50c618b64f8b1709f4..b98c1f8f4632f7c8e66e1bb5fb3ed368ff6a521b 100644 (file)
@@ -34,7 +34,7 @@ public:
        // NOTE: Content of return future is only valid while future is valid.\r
        virtual ::boost::shared_future<::boost::iterator_range<const uint8_t*>> operator()(const core::video_format_desc& format_desc) override;\r
                \r
-       virtual spl::shared_ptr<core::data_frame> create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) override;\r
+       virtual spl::unique_ptr<core::data_frame> create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) override;\r
 private:\r
        struct impl;\r
        spl::shared_ptr<impl> impl_;\r
index d9f71a35583feebe5733b4c08ccf0076d9591624..5ec0abb4c3677a43e13a57ffe421d5d38a2e6372 100644 (file)
@@ -446,9 +446,9 @@ public:
                return renderer_(std::move(layers_), format_desc);\r
        }\r
        \r
-       virtual spl::shared_ptr<core::data_frame> create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode)\r
+       virtual spl::unique_ptr<core::data_frame> create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode)\r
        {\r
-               return spl::make_shared<ogl::data_frame>(ogl_, tag, desc, frame_rate, field_mode);\r
+               return spl::make_unique<ogl::data_frame>(ogl_, tag, desc, frame_rate, field_mode);\r
        }\r
 };\r
 \r
@@ -459,6 +459,6 @@ void image_mixer::pop(){impl_->pop();}
 boost::shared_future<boost::iterator_range<const uint8_t*>> image_mixer::operator()(const core::video_format_desc& format_desc){return impl_->render(format_desc);}\r
 void image_mixer::begin_layer(core::blend_mode blend_mode){impl_->begin_layer(blend_mode);}\r
 void image_mixer::end_layer(){impl_->end_layer();}\r
-spl::shared_ptr<core::data_frame> image_mixer::create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) {return impl_->create_frame(tag, desc, frame_rate, field_mode);}\r
+spl::unique_ptr<core::data_frame> image_mixer::create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) {return impl_->create_frame(tag, desc, frame_rate, field_mode);}\r
 \r
 }}}
\ No newline at end of file
index f0a2b3fe8f3c7a20ac0ed6d3b85479a8f6af6c8c..b530a5e65da65872d0242d1751e7c2a0cd110ee2 100644 (file)
@@ -54,7 +54,7 @@ public:
        // NOTE: Content of return future is only valid while future is valid.\r
        virtual boost::shared_future<boost::iterator_range<const uint8_t*>> operator()(const core::video_format_desc& format_desc) override;\r
                \r
-       virtual spl::shared_ptr<core::data_frame> create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) override;\r
+       virtual spl::unique_ptr<core::data_frame> create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) override;\r
 private:\r
        struct impl;\r
        spl::shared_ptr<impl> impl_;\r
index 798b6ea1ad0b5c651b1b7ce2ee6f8b649a7e17a2..316ebc6c0d491ac88037d2bce94b2ae54247f3c4 100644 (file)
@@ -23,6 +23,8 @@
 \r
 #include "draw_frame.h"\r
 \r
+#include "data_frame.h"\r
+\r
 #include "frame_transform.h"\r
 \r
 #include <boost/foreach.hpp>\r
@@ -32,7 +34,7 @@ namespace caspar { namespace core {
 struct draw_frame::impl\r
 {              \r
        std::vector<spl::shared_ptr<const draw_frame>> frames_;\r
-       std::shared_ptr<const data_frame> data_frame_;\r
+       std::shared_ptr<spl::unique_ptr<const data_frame>> data_frame_;\r
 \r
        core::frame_transform frame_transform_;         \r
 public:\r
@@ -40,8 +42,8 @@ public:
        {\r
        }\r
                \r
-       impl(spl::shared_ptr<const data_frame> frame) \r
-               : data_frame_(frame)\r
+       impl(spl::unique_ptr<const data_frame> frame) \r
+               : data_frame_(new spl::unique_ptr<const data_frame>(std::move(frame)))\r
        {\r
        }\r
 \r
@@ -65,7 +67,7 @@ public:
                visitor.push(frame_transform_);\r
                if(data_frame_)\r
                {\r
-                       visitor.visit(*data_frame_);\r
+                       visitor.visit(**data_frame_);\r
                }\r
                else\r
                {\r
@@ -79,7 +81,7 @@ public:
 draw_frame::draw_frame() : impl_(new impl()){}\r
 draw_frame::draw_frame(const draw_frame& other) : impl_(new impl(*other.impl_)){}\r
 draw_frame::draw_frame(draw_frame&& other) : impl_(std::move(other.impl_)){}\r
-draw_frame::draw_frame(spl::shared_ptr<const data_frame> frame)  : impl_(new impl(std::move(frame))){}\r
+draw_frame::draw_frame(spl::unique_ptr<const data_frame> frame)  : impl_(new impl(std::move(frame))){}\r
 draw_frame::draw_frame(spl::shared_ptr<const draw_frame> frame)  : impl_(new impl(std::move(frame))){}\r
 draw_frame::draw_frame(std::vector<spl::shared_ptr<draw_frame>> frames) : impl_(new impl(frames)){}\r
 draw_frame::draw_frame(std::vector<spl::shared_ptr<const draw_frame>> frames) : impl_(new impl(frames)){}\r
index 5bfba4503b719614177ee9234eb6c0e6fea1d0ea..4e27977015ebd3933a9a9c6fab139bb73be7e16c 100644 (file)
@@ -42,7 +42,7 @@ public:
        draw_frame& operator=(draw_frame other);\r
        virtual ~draw_frame(){}\r
        \r
-       draw_frame(spl::shared_ptr<const data_frame> frame);\r
+       draw_frame(spl::unique_ptr<const data_frame> frame);\r
        draw_frame(spl::shared_ptr<const draw_frame> frame);\r
        draw_frame(std::vector<spl::shared_ptr<draw_frame>> frames);\r
        draw_frame(std::vector<spl::shared_ptr<const draw_frame>> frames);\r
index 351b5a6d95a3f0ff4f9eeaf71f785198b08b153d..d9e609fa06ef2f9f2f63f782c66033707c6a031e 100644 (file)
@@ -21,6 +21,8 @@
 \r
 #pragma once\r
 \r
+#include "data_frame.h"\r
+\r
 #include <common/spl/memory.h>\r
 \r
 #include <core/video_format.h>\r
@@ -34,8 +36,8 @@ class frame_factory : boost::noncopyable
 public:\r
        virtual ~frame_factory(){}\r
 \r
-       virtual spl::shared_ptr<class data_frame> create_frame(const void* video_stream_tag, const struct pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) = 0; \r
-       spl::shared_ptr<class data_frame> create_frame(const void* video_stream_tag, const struct pixel_format_desc& desc)\r
+       virtual spl::unique_ptr<class data_frame> create_frame(const void* video_stream_tag, const struct pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) = 0; \r
+       spl::unique_ptr<class data_frame> create_frame(const void* video_stream_tag, const struct pixel_format_desc& desc)\r
        {\r
                auto format_desc = video_format_desc();\r
                return create_frame(video_stream_tag, desc, format_desc.fps, format_desc.field_mode);\r
index 95d79033226a3e7cddf71d8ec19ca2c9af414f65..829acf2de93b22bec772a082f63334aea2b18a62 100644 (file)
@@ -52,7 +52,7 @@ public:
        virtual void end_layer() = 0;\r
                \r
        virtual boost::shared_future<boost::iterator_range<const uint8_t*>> operator()(const struct video_format_desc& format_desc) = 0;\r
-       virtual spl::shared_ptr<core::data_frame> create_frame(const void* tag, const struct pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) = 0;\r
+       virtual spl::unique_ptr<core::data_frame> create_frame(const void* tag, const struct pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) = 0;\r
 };\r
 \r
 }}
\ No newline at end of file
index 80fd82e32c787f10951075b6889275b195f65a06..d46521098f6a85974159e9a9a6f5d8da9cc00f5d 100644 (file)
@@ -202,5 +202,5 @@ mixer::mixer(spl::shared_ptr<diagnostics::graph> graph, spl::unique_ptr<image_mi
 void mixer::set_blend_mode(int index, blend_mode value){impl_->set_blend_mode(index, value);}\r
 boost::unique_future<boost::property_tree::wptree> mixer::info() const{return impl_->info();}\r
 spl::shared_ptr<const data_frame> mixer::operator()(std::map<int, spl::shared_ptr<draw_frame>> frames, const struct video_format_desc& format_desc){return (*impl_)(std::move(frames), format_desc);}\r
-spl::shared_ptr<data_frame> mixer::create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) {return impl_->image_mixer_->create_frame(tag, desc, frame_rate, field_mode);}\r
+spl::unique_ptr<data_frame> mixer::create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) {return impl_->image_mixer_->create_frame(tag, desc, frame_rate, field_mode);}\r
 }}
\ No newline at end of file
index 1dd77fb821039406bca84051a1f06f708730c99f..f6e1f456e14b43b4fe0e83519d40137c07c2f36d 100644 (file)
@@ -50,7 +50,7 @@ public:
 \r
        boost::unique_future<boost::property_tree::wptree> info() const;\r
 \r
-       spl::shared_ptr<class data_frame> create_frame(const void* tag, const struct pixel_format_desc& desc, double frame_rate, core::field_mode field_mode);\r
+       spl::unique_ptr<class data_frame> create_frame(const void* tag, const struct pixel_format_desc& desc, double frame_rate, core::field_mode field_mode);\r
 private:\r
        struct impl;\r
        spl::shared_ptr<impl> impl_;\r
index 2879623ef3bb0bc27454a8dd0905f179cf2a11c7..6a2f2ce735ccc970943f1fca9a9716d3919af528 100644 (file)
@@ -148,7 +148,7 @@ spl::shared_ptr<draw_frame> create_color_frame(void* tag, const spl::shared_ptr<
        if(!(str >> std::hex >> value) || !str.eof())\r
                BOOST_THROW_EXCEPTION(invalid_argument() << arg_name_info("color") << arg_value_info(color2) << msg_info("Invalid color."));\r
                        \r
-       return spl::make_shared<draw_frame>(frame);\r
+       return spl::make_shared<draw_frame>(std::move(frame));\r
 }\r
 \r
 }}
\ No newline at end of file
index 7fe84e262bb85fd75b124fbc1b48f458dbc9d310..324e26ace6ff08f669fd25de8573244661c04126 100644 (file)
@@ -86,7 +86,7 @@ public:
        \r
        // frame_factory\r
                                                \r
-       virtual spl::shared_ptr<data_frame> create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) override\r
+       virtual spl::unique_ptr<data_frame> create_frame(const void* tag, const core::pixel_format_desc& desc, double frame_rate, core::field_mode field_mode) override\r
        {               \r
                return mixer_.create_frame(tag, desc, frame_rate, field_mode);\r
        }\r
index e008443abf9fae7be0ecfe8217981d7e2413d27f..e224512544bdb7d0b77f465b110e54fcf6df0d04 100644 (file)
@@ -67,7 +67,7 @@ namespace caspar { namespace ffmpeg {
        \r
 struct frame_muxer::impl : boost::noncopyable\r
 {      \r
-       std::queue<std::queue<spl::shared_ptr<data_frame>>>             video_streams_;\r
+       std::queue<std::queue<spl::unique_ptr<data_frame>>>             video_streams_;\r
        std::queue<core::audio_buffer>                                                  audio_streams_;\r
        std::queue<spl::shared_ptr<draw_frame>>                                 frame_buffer_;\r
        display_mode                                                                                    display_mode_;\r
@@ -95,7 +95,7 @@ struct frame_muxer::impl : boost::noncopyable
                , filter_str_(filter_str)\r
                , force_deinterlacing_(false)\r
        {\r
-               video_streams_.push(std::queue<spl::shared_ptr<data_frame>>());\r
+               video_streams_.push(std::queue<spl::unique_ptr<data_frame>>());\r
                audio_streams_.push(core::audio_buffer());\r
                \r
                // Note: Uses 1 step rotated cadence for 1001 modes (1602, 1602, 1601, 1602, 1601)\r
@@ -110,12 +110,12 @@ struct frame_muxer::impl : boost::noncopyable
                \r
                if(video_frame == flush_video())\r
                {       \r
-                       video_streams_.push(std::queue<spl::shared_ptr<data_frame>>());\r
+                       video_streams_.push(std::queue<spl::unique_ptr<data_frame>>());\r
                }\r
                else if(video_frame == empty_video())\r
                {\r
                        auto empty_frame = frame_factory_->create_frame(this, core::pixel_format_desc(core::pixel_format::invalid));\r
-                       video_streams_.back().push(empty_frame);\r
+                       video_streams_.back().push(std::move(empty_frame));\r
                        display_mode_ = display_mode::simple;\r
                }\r
                else\r
@@ -238,7 +238,7 @@ struct frame_muxer::impl : boost::noncopyable
                case display_mode::deinterlace_bob:                             \r
                case display_mode::deinterlace: \r
                        {\r
-                               frame_buffer_.push(spl::make_shared<draw_frame>(frame1));\r
+                               frame_buffer_.push(spl::make_shared<draw_frame>(std::move(frame1)));\r
                                break;\r
                        }\r
                case display_mode::interlace:                                   \r
@@ -246,22 +246,26 @@ struct frame_muxer::impl : boost::noncopyable
                        {                               \r
                                auto frame2 = pop_video();\r
 \r
-                               frame_buffer_.push(core::draw_frame::interlace(spl::make_shared<draw_frame>(frame1), spl::make_shared<draw_frame>(frame2), format_desc_.field_mode));   \r
+                               frame_buffer_.push(core::draw_frame::interlace(\r
+                                       spl::make_shared<core::draw_frame>(std::move(frame1)),\r
+                                       spl::make_shared<core::draw_frame>(std::move(frame2)),\r
+                                       format_desc_.field_mode));      \r
                                break;\r
                        }\r
                case display_mode::duplicate:   \r
                        {\r
                                boost::range::push_back(frame1->audio_data(), pop_audio());\r
 \r
-                               frame_buffer_.push(spl::make_shared<draw_frame>(frame1));\r
-                               frame_buffer_.push(spl::make_shared<draw_frame>(frame1));\r
+                               auto draw_frame = spl::make_shared<core::draw_frame>(std::move(frame1));\r
+                               frame_buffer_.push(draw_frame);\r
+                               frame_buffer_.push(draw_frame);\r
                                break;\r
                        }\r
                case display_mode::half:        \r
                        {                               \r
                                pop_video(); // Throw away\r
 \r
-                               frame_buffer_.push(spl::make_shared<draw_frame>(frame1));\r
+                               frame_buffer_.push(spl::make_shared<draw_frame>(std::move(frame1)));\r
                                break;\r
                        }\r
                default:\r
@@ -271,11 +275,11 @@ struct frame_muxer::impl : boost::noncopyable
                return try_pop(result);\r
        }\r
        \r
-       spl::shared_ptr<core::data_frame> pop_video()\r
+       spl::unique_ptr<core::data_frame> pop_video()\r
        {\r
-               auto frame = video_streams_.front().front();\r
+               auto frame = std::move(video_streams_.front().front());\r
                video_streams_.front().pop();           \r
-               return frame;\r
+               return std::move(frame);\r
        }\r
 \r
        core::audio_buffer pop_audio()\r
index 7c48a64c54e928bd323dd3b20e9c357777fd2c78..608c5407bc7b54968f9348b2f140dae66c2decb2 100644 (file)
@@ -171,7 +171,7 @@ int make_alpha_format(int format)
        }\r
 }\r
 \r
-spl::shared_ptr<core::data_frame> make_data_frame(const void* tag, const spl::shared_ptr<AVFrame>& decoded_frame, double fps, const spl::shared_ptr<core::frame_factory>& frame_factory, int flags)\r
+spl::unique_ptr<core::data_frame> make_data_frame(const void* tag, const spl::shared_ptr<AVFrame>& decoded_frame, double fps, const spl::shared_ptr<core::frame_factory>& frame_factory, int flags)\r
 {                      \r
        static tbb::concurrent_unordered_map<int, tbb::concurrent_queue<std::shared_ptr<SwsContext>>> sws_contexts_;\r
        \r
@@ -184,9 +184,7 @@ spl::shared_ptr<core::data_frame> make_data_frame(const void* tag, const spl::sh
        \r
        if(flags & core::frame_producer::flags::alpha_only)\r
                desc = pixel_format_desc(static_cast<PixelFormat>(make_alpha_format(decoded_frame->format)), width, height);\r
-\r
-       std::shared_ptr<core::data_frame> write;\r
-\r
+       \r
        if(desc.format == core::pixel_format::invalid)\r
        {\r
                auto pix_fmt = static_cast<PixelFormat>(decoded_frame->format);\r
@@ -207,7 +205,7 @@ spl::shared_ptr<core::data_frame> make_data_frame(const void* tag, const spl::sh
                \r
                auto target_desc = pixel_format_desc(target_pix_fmt, width, height);\r
 \r
-               write = frame_factory->create_frame(tag, target_desc, fps, get_mode(*decoded_frame));\r
+               auto write = frame_factory->create_frame(tag, target_desc, fps, get_mode(*decoded_frame));\r
 \r
                std::shared_ptr<SwsContext> sws_context;\r
 \r
@@ -249,10 +247,12 @@ spl::shared_ptr<core::data_frame> make_data_frame(const void* tag, const spl::sh
 \r
                sws_scale(sws_context.get(), decoded_frame->data, decoded_frame->linesize, 0, height, av_frame->data, av_frame->linesize);      \r
                pool.push(sws_context); \r
+\r
+               return std::move(write);\r
        }\r
        else\r
        {\r
-               write = frame_factory->create_frame(tag, desc, fps, get_mode(*decoded_frame));\r
+               auto write = frame_factory->create_frame(tag, desc, fps, get_mode(*decoded_frame));\r
                \r
                for(int n = 0; n < static_cast<int>(desc.planes.size()); ++n)\r
                {\r
@@ -272,9 +272,9 @@ spl::shared_ptr<core::data_frame> make_data_frame(const void* tag, const spl::sh
                                        A_memcpy(result + y*plane.linesize, decoded + y*decoded_linesize, plane.linesize);\r
                        }, ap);\r
                }\r
-       }\r
        \r
-       return spl::make_shared_ptr(write);\r
+               return std::move(write);\r
+       }\r
 }\r
 \r
 spl::shared_ptr<AVFrame> make_av_frame(caspar::core::data_frame& frame)\r
index 1044e2f2262e2e935a7cbe552eed432d28dc976a..ee7553dc639403bb535e85188f5dff75ccf9ec6a 100644 (file)
@@ -55,7 +55,7 @@ static const int CASPAR_PIX_FMT_LUMA = 10; // Just hijack some unual pixel forma
 \r
 core::field_mode                                       get_mode(const AVFrame& frame);\r
 int                                                                    make_alpha_format(int format); // NOTE: Be careful about CASPAR_PIX_FMT_LUMA, change it to PIX_FMT_GRAY8 if you want to use the frame inside some ffmpeg function.\r
-spl::shared_ptr<core::data_frame>      make_data_frame(const void* tag, const spl::shared_ptr<AVFrame>& decoded_frame, double fps, const spl::shared_ptr<core::frame_factory>& frame_factory, int flags);\r
+spl::unique_ptr<core::data_frame>      make_data_frame(const void* tag, const spl::shared_ptr<AVFrame>& decoded_frame, double fps, const spl::shared_ptr<core::frame_factory>& frame_factory, int flags);\r
 spl::shared_ptr<AVFrame>                       make_av_frame(caspar::core::data_frame& frame);\r
 spl::shared_ptr<AVFrame>                       make_av_frame(std::array<void*, 4> data, const core::pixel_format_desc& pix_desc);\r
 \r
index 6555abc3ed38ffdfcc1a060452839aa35d0e5b73..d9029d0a381990079be9d94f4488738daadcc000 100644 (file)
@@ -291,7 +291,7 @@ public:
                        auto frame = frame_factory_->create_frame(this, desc, fps(), core::field_mode::progressive);\r
 \r
                        A_memcpy(frame->image_data(0).begin(), bmp_.data(), width_*height_*4);\r
-                       head_ = spl::make_shared<core::draw_frame>(frame);      \r
+                       head_ = spl::make_shared<core::draw_frame>(std::move(frame));   \r
                }               \r
                                                                                \r
                graph_->set_value("frame-time", static_cast<float>(frame_timer_.elapsed()/frame_time)*0.5f);\r
index e45bd1caa1b7f752338e0533dc2f19953fd1f190..282db0f7d9458d7a71e309e70f299ec59688c491 100644 (file)
@@ -101,7 +101,7 @@ struct image_scroll_producer : public core::frame_producer
                                        count = 0;\r
                                }\r
                        \r
-                               frames_.push_back(spl::make_shared<core::draw_frame>(frame));\r
+                               frames_.push_back(spl::make_shared<core::draw_frame>(std::move(frame)));\r
                        }\r
                        \r
                        if(speed_ < 0.0)\r
@@ -137,7 +137,7 @@ struct image_scroll_producer : public core::frame_producer
                                        count = 0;\r
                                }\r
                        \r
-                               frames_.push_back(spl::make_shared<core::draw_frame>(frame));\r
+                               frames_.push_back(spl::make_shared<core::draw_frame>(std::move(frame)));\r
                        }\r
 \r
                        std::reverse(frames_.begin(), frames_.end());\r
index 2fbe035ceafd802db7474447aff56939a781edb5..26722ec80156aa4c6a5d6e445e3b9866bb83410d 100644 (file)
@@ -110,10 +110,12 @@ public:
                A_memcpy(frame->image_data(0).begin(), read_frame->image_data().begin(), read_frame->image_data().size());\r
                boost::push_back(frame->audio_data(), read_frame->audio_data());\r
                \r
-               frame_buffer_.push(spl::make_shared<core::draw_frame>(frame));\r
+               auto draw_frame = spl::make_shared<core::draw_frame>(std::move(frame));\r
+\r
+               frame_buffer_.push(draw_frame);\r
                \r
                if(double_speed)        \r
-                       frame_buffer_.push(spl::make_shared<core::draw_frame>(frame));\r
+                       frame_buffer_.push(draw_frame);\r
 \r
                return receive(0);\r
        }       \r