]> git.sesse.net Git - casparcg/commitdiff
2.1.0: -frame_visitor: refactored. -spl::unique_ptr: Fixed bug.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 4 Feb 2012 17:05:18 +0000 (17:05 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 4 Feb 2012 17:05:18 +0000 (17:05 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.1.0@2229 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

common/spl/memory.h
core/frame/draw_frame.cpp
core/frame/frame_visitor.h
core/mixer/audio/audio_mixer.cpp
core/mixer/audio/audio_mixer.h
core/mixer/gpu/image/image_mixer.cpp
core/mixer/gpu/image/image_mixer.h
core/mixer/gpu/write_frame.cpp
core/mixer/image/image_mixer.h

index eb398fc416fdb4187ebe6f084d4e0f469ada3d17..cb05fb88484e3d780f046bb1b11b76f5239e9a4f 100644 (file)
@@ -460,7 +460,7 @@ public:
         return p_.get();\r
     }\r
        \r
-    void swap(shared_ptr& other) \r
+    void swap(unique_ptr& other) \r
     { \r
         p_.swap(other.p_); \r
     } \r
index 28ca3768bbd056e53a3b69d8f4dab0b6c4e32fcc..7fb4d08ef7f8c96da5921795715cc1ea37993d32 100644 (file)
@@ -53,12 +53,12 @@ public:
                frames_.push_back(frame);\r
        }\r
        \r
-       void accept(draw_frame& self, frame_visitor& visitor)\r
+       void accept(frame_visitor& visitor)\r
        {\r
-               visitor.begin(self);\r
+               visitor.push(frame_transform_);\r
                BOOST_FOREACH(auto frame, frames_)\r
                        frame->accept(visitor);\r
-               visitor.end();\r
+               visitor.pop();\r
        }       \r
 };\r
        \r
@@ -76,7 +76,7 @@ void draw_frame::swap(draw_frame& other){impl_.swap(other.impl_);}
 \r
 const frame_transform& draw_frame::get_frame_transform() const { return impl_->frame_transform_;}\r
 frame_transform& draw_frame::get_frame_transform() { return impl_->frame_transform_;}\r
-void draw_frame::accept(frame_visitor& visitor){impl_->accept(*this, visitor);}\r
+void draw_frame::accept(frame_visitor& visitor){impl_->accept(visitor);}\r
 \r
 spl::shared_ptr<draw_frame> draw_frame::interlace(const spl::shared_ptr<draw_frame>& frame1, const spl::shared_ptr<draw_frame>& frame2, field_mode mode)\r
 {                              \r
index 94a065bdab2fdbb63b532f4908e2737c0025134e..6ef2061f40486a0a4120a633aa3a0e458e96888e 100644 (file)
@@ -28,9 +28,9 @@ namespace caspar { namespace core {
 struct frame_visitor : boost::noncopyable\r
 {\r
        virtual ~frame_visitor(){}\r
-       virtual void begin(class draw_frame& frame) = 0;\r
-       virtual void end() = 0;\r
-       virtual void visit(class write_frame& frame) = 0;\r
+       virtual void push(struct frame_transform& transform) = 0;\r
+       virtual void visit(struct data_frame& frame) = 0;\r
+       virtual void pop() = 0;\r
 };\r
 \r
 }}
\ No newline at end of file
index 1bd4ba0cb2aa17465bf0489ed9d5c5eab4daf69c..608d04000653675d22d19f39a8c24fbf77f3c4b9 100644 (file)
@@ -76,12 +76,12 @@ public:
                transform_stack_.push(core::frame_transform());\r
        }\r
        \r
-       void begin(core::draw_frame& frame)\r
+       void push(frame_transform& transform)\r
        {\r
-               transform_stack_.push(transform_stack_.top()*frame.get_frame_transform());\r
+               transform_stack_.push(transform_stack_.top()*transform);\r
        }\r
 \r
-       void visit(core::write_frame& frame)\r
+       void visit(data_frame& frame)\r
        {\r
                audio_item item;\r
                item.tag                = frame.tag();\r
@@ -96,7 +96,7 @@ public:
                transform_stack_.push(transform_stack_.top()*transform);\r
        }\r
                \r
-       void end()\r
+       void pop()\r
        {\r
                transform_stack_.pop();\r
        }\r
@@ -187,9 +187,9 @@ public:
 };\r
 \r
 audio_mixer::audio_mixer() : impl_(new impl()){}\r
-void audio_mixer::begin(core::draw_frame& frame){impl_->begin(frame);}\r
-void audio_mixer::visit(core::write_frame& frame){impl_->visit(frame);}\r
-void audio_mixer::end(){impl_->end();}\r
+void audio_mixer::push(frame_transform& transform){impl_->push(transform);}\r
+void audio_mixer::visit(data_frame& frame){impl_->visit(frame);}\r
+void audio_mixer::pop(){impl_->pop();}\r
 audio_buffer audio_mixer::operator()(const video_format_desc& format_desc){return impl_->mix(format_desc);}\r
 \r
 }}
\ No newline at end of file
index 57cd3b43156219a8f6419d6cea7114b3e9330ccc..5de0565c401fbfc807233c927a15ff6a59a3198c 100644 (file)
@@ -41,9 +41,9 @@ class audio_mixer sealed : public frame_visitor
 public:\r
        audio_mixer();\r
 \r
-       virtual void begin(core::draw_frame& frame);\r
-       virtual void visit(core::write_frame& frame);\r
-       virtual void end();\r
+       virtual void push(struct frame_transform& transform);\r
+       virtual void visit(struct data_frame& frame);\r
+       virtual void pop();\r
 \r
        audio_buffer operator()(const struct video_format_desc& format_desc);\r
        \r
index 3e796edcbb386836ed5e44dcad15c439f5e0c8a0..218938375af229d98f3a80fcf9d6b3caeb772853 100644 (file)
@@ -256,18 +256,22 @@ public:
                layers_.push_back(std::make_pair(blend_mode, std::vector<item>()));\r
        }\r
                \r
-       void begin(draw_frame& frame)\r
+       void push(frame_transform& transform)\r
        {\r
-               transform_stack_.push_back(transform_stack_.back()*frame.get_frame_transform());\r
+               transform_stack_.push_back(transform_stack_.back()*transform);\r
        }\r
                \r
-       void visit(write_frame& frame)\r
+       void visit(data_frame& frame2)\r
        {                       \r
+               write_frame* frame = dynamic_cast<write_frame*>(&frame2);\r
+               if(frame == nullptr)\r
+                       return;\r
+\r
                item item;\r
-               item.pix_desc   = frame.get_pixel_format_desc();\r
+               item.pix_desc   = frame->get_pixel_format_desc();\r
 \r
-               auto buffers = frame.get_buffers();\r
-               auto planes  = frame.get_pixel_format_desc().planes;\r
+               auto buffers = frame->get_buffers();\r
+               auto planes  = frame->get_pixel_format_desc().planes;\r
                for(size_t n = 0; n < planes.size(); ++n)               \r
                        item.textures.push_back(ogl_->copy_async(buffers.at(n), planes[n].width, planes[n].height, planes[n].channels));\r
                                \r
@@ -276,7 +280,7 @@ public:
                layers_.back().second.push_back(item);\r
        }\r
 \r
-       void end()\r
+       void pop()\r
        {\r
                transform_stack_.pop_back();\r
        }\r
@@ -292,9 +296,9 @@ public:
 };\r
 \r
 image_mixer::image_mixer(const spl::shared_ptr<accelerator>& ogl) : impl_(new impl(ogl)){}\r
-void image_mixer::begin(draw_frame& frame){impl_->begin(frame);}\r
-void image_mixer::visit(write_frame& frame){impl_->visit(frame);}\r
-void image_mixer::end(){impl_->end();}\r
+void image_mixer::push(frame_transform& transform){impl_->push(transform);}\r
+void image_mixer::visit(data_frame& frame){impl_->visit(frame);}\r
+void image_mixer::pop(){impl_->pop();}\r
 boost::unique_future<boost::iterator_range<const uint8_t*>> image_mixer::operator()(const video_format_desc& format_desc){return impl_->render(format_desc);}\r
 void image_mixer::begin_layer(blend_mode blend_mode){impl_->begin_layer(blend_mode);}\r
 void image_mixer::end_layer(){impl_->end_layer();}\r
index 341f7bffe84ec63d91d165641e6a0d66e37a1ce7..702d6f47242c4727b0af81195cfe17344e2c589e 100644 (file)
@@ -38,9 +38,9 @@ class image_mixer sealed : public core::image_mixer
 public:\r
        image_mixer(const spl::shared_ptr<class accelerator>& ogl);\r
        \r
-       virtual void begin(class draw_frame& frame);\r
-       virtual void visit(class write_frame& frame);\r
-       virtual void end();\r
+       virtual void push(struct frame_transform& frame);\r
+       virtual void visit(struct data_frame& frame);\r
+       virtual void pop();\r
 \r
        void begin_layer(blend_mode blend_mode);\r
        void end_layer();\r
index 8667ed499d449d9a35a7d3ed1856ad69d320ec12..90dfcee33c5d164bd90d92886aadf9248c84ea0a 100644 (file)
@@ -62,9 +62,9 @@ struct write_frame::impl : boost::noncopyable
                        \r
        void accept(write_frame& self, core::frame_visitor& visitor)\r
        {\r
-               visitor.begin(self);\r
+               visitor.push(self.get_frame_transform());\r
                visitor.visit(self);\r
-               visitor.end();\r
+               visitor.pop();\r
        }\r
 \r
        boost::iterator_range<uint8_t*> image_data(int index)\r
index c20c50ac7578826f56df6997162d1fe94e0ec962..f32fd46889b5ce51d2c62da7b3bae03775d51218 100644 (file)
@@ -36,9 +36,9 @@ struct image_mixer : public frame_visitor
 {\r
        virtual ~image_mixer(){}\r
        \r
-       virtual void begin(class draw_frame& frame) = 0;\r
-       virtual void visit(class write_frame& frame) = 0;\r
-       virtual void end() = 0;\r
+       virtual void push(struct frame_transform& frame) = 0;\r
+       virtual void visit(struct data_frame& frame) = 0;\r
+       virtual void pop() = 0;\r
 \r
        virtual void begin_layer(blend_mode blend_mode) = 0;\r
        virtual void end_layer() = 0;\r