]> git.sesse.net Git - casparcg/commitdiff
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 26 Aug 2011 09:09:14 +0000 (09:09 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 26 Aug 2011 09:09:14 +0000 (09:09 +0000)
core/mixer/image/image_mixer.cpp
core/mixer/image/image_mixer.h
core/mixer/mixer.cpp
shell/casparcg.config

index fa242c56b7a30139379d158e87958321e99e6f17..b754e28e899eb63e70c9dfb3c1283d1910d189b3 100644 (file)
@@ -59,19 +59,21 @@ typedef std::pair<blend_mode::type, std::vector<item>> layer;
 \r
 class image_renderer\r
 {\r
-       video_channel_context&                                  channel_;       \r
+       ogl_device&                                                             ogl_;\r
+       video_format_desc                                               format_desc_;\r
        image_kernel                                                    kernel_;        \r
        std::shared_ptr<device_buffer>                  active_buffer_;\r
 public:\r
-       image_renderer(video_channel_context& channel)\r
-               : channel_(channel)\r
+       image_renderer(ogl_device& ogl, const video_format_desc& format_desc)\r
+               : ogl_(ogl)\r
+               , format_desc_(format_desc)\r
        {\r
        }\r
        \r
        boost::unique_future<safe_ptr<host_buffer>> render(std::vector<layer>&& layers)\r
        {               \r
                auto layers2 = make_move_on_copy(std::move(layers));\r
-               return channel_.ogl().begin_invoke([=]\r
+               return ogl_.begin_invoke([=]\r
                {\r
                        return do_render(std::move(layers2.value));\r
                });\r
@@ -82,7 +84,7 @@ private:
        {\r
                auto draw_buffer = create_mixer_buffer(4);\r
 \r
-               if(channel_.get_format_desc().field_mode != field_mode::progressive)\r
+               if(format_desc_.field_mode != field_mode::progressive)\r
                {\r
                        auto upper = layers;\r
                        auto lower = std::move(layers);\r
@@ -107,13 +109,13 @@ private:
                        draw(std::move(layers), draw_buffer);\r
                }\r
 \r
-               auto host_buffer = channel_.ogl().create_host_buffer(channel_.get_format_desc().size, host_buffer::read_only);\r
-               channel_.ogl().attach(*draw_buffer);\r
+               auto host_buffer = ogl_.create_host_buffer(format_desc_.size, host_buffer::read_only);\r
+               ogl_.attach(*draw_buffer);\r
                host_buffer->begin_read(draw_buffer->width(), draw_buffer->height(), format(draw_buffer->stride()));\r
                \r
                active_buffer_ = std::move(draw_buffer);\r
 \r
-               channel_.ogl().flush(); // NOTE: This is important, otherwise fences will deadlock.\r
+               ogl_.flush(); // NOTE: This is important, otherwise fences will deadlock.\r
                        \r
                return host_buffer;\r
        }\r
@@ -179,7 +181,7 @@ private:
                        draw_params.local_key                   = nullptr;\r
                        draw_params.layer_key                   = nullptr;\r
 \r
-                       kernel_.draw(channel_.ogl(), std::move(draw_params));\r
+                       kernel_.draw(ogl_, std::move(draw_params));\r
                }\r
                else if(item.transform.is_mix)\r
                {\r
@@ -191,7 +193,7 @@ private:
 \r
                        draw_params.keyer                               = keyer::additive;\r
 \r
-                       kernel_.draw(channel_.ogl(), std::move(draw_params));\r
+                       kernel_.draw(ogl_, std::move(draw_params));\r
                }\r
                else\r
                {\r
@@ -201,7 +203,7 @@ private:
                        draw_params.local_key                   = std::move(local_key_buffer);\r
                        draw_params.layer_key                   = layer_key_buffer;\r
 \r
-                       kernel_.draw(channel_.ogl(), std::move(draw_params));\r
+                       kernel_.draw(ogl_, std::move(draw_params));\r
                }       \r
        }\r
 \r
@@ -220,13 +222,13 @@ private:
                draw_params.blend_mode                  = blend_mode;\r
                draw_params.background                  = draw_buffer;\r
 \r
-               kernel_.draw(channel_.ogl(), std::move(draw_params));\r
+               kernel_.draw(ogl_, std::move(draw_params));\r
        }\r
                        \r
        safe_ptr<device_buffer> create_mixer_buffer(size_t stride)\r
        {\r
-               auto buffer = channel_.ogl().create_device_buffer(channel_.get_format_desc().width, channel_.get_format_desc().height, stride);\r
-               channel_.ogl().clear(*buffer);\r
+               auto buffer = ogl_.create_device_buffer(format_desc_.width, format_desc_.height, stride);\r
+               ogl_.clear(*buffer);\r
                return buffer;\r
        }\r
 };\r
@@ -238,9 +240,9 @@ struct image_mixer::implementation : boost::noncopyable
        std::vector<frame_transform>    transform_stack_;\r
        std::vector<layer>                              layers_; // layer/stream/items\r
 public:\r
-       implementation(video_channel_context& video_channel\r
-               : ogl_(video_channel.ogl())\r
-               , renderer_(video_channel)\r
+       implementation(ogl_device& ogl, const video_format_desc& format_desc\r
+               : ogl_(ogl)\r
+               , renderer_(ogl, format_desc)\r
                , transform_stack_(1)   \r
        {\r
        }\r
@@ -250,12 +252,12 @@ public:
                layers_.push_back(std::make_pair(blend_mode, std::vector<item>()));\r
        }\r
                \r
-       void begin(core::basic_frame& frame)\r
+       void begin(basic_frame& frame)\r
        {\r
                transform_stack_.push_back(transform_stack_.back()*frame.get_frame_transform());\r
        }\r
                \r
-       void visit(core::write_frame& frame)\r
+       void visit(write_frame& frame)\r
        {                       \r
                item item;\r
                item.pix_desc   = frame.get_pixel_format_desc();\r
@@ -279,18 +281,18 @@ public:
                return renderer_.render(std::move(layers_));\r
        }\r
 \r
-       safe_ptr<write_frame> create_frame(const void* tag, const core::pixel_format_desc& desc)\r
+       safe_ptr<write_frame> create_frame(const void* tag, const pixel_format_desc& desc)\r
        {\r
                return make_safe<write_frame>(ogl_, tag, desc);\r
        }\r
 };\r
 \r
-image_mixer::image_mixer(video_channel_context& video_channel) : impl_(new implementation(video_channel)){}\r
-void image_mixer::begin(core::basic_frame& frame){impl_->begin(frame);}\r
-void image_mixer::visit(core::write_frame& frame){impl_->visit(frame);}\r
+image_mixer::image_mixer(ogl_device& ogl, const video_format_desc& format_desc) : impl_(new implementation(ogl, format_desc)){}\r
+void image_mixer::begin(basic_frame& frame){impl_->begin(frame);}\r
+void image_mixer::visit(write_frame& frame){impl_->visit(frame);}\r
 void image_mixer::end(){impl_->end();}\r
 boost::unique_future<safe_ptr<host_buffer>> image_mixer::render(){return impl_->render();}\r
-safe_ptr<write_frame> image_mixer::create_frame(const void* tag, const core::pixel_format_desc& desc){return impl_->create_frame(tag, desc);}\r
+safe_ptr<write_frame> image_mixer::create_frame(const void* tag, const pixel_format_desc& desc){return impl_->create_frame(tag, desc);}\r
 void image_mixer::begin_layer(blend_mode::type blend_mode){impl_->begin_layer(blend_mode);}\r
 void image_mixer::end_layer(){impl_->end_layer();}\r
 image_mixer& image_mixer::operator=(image_mixer&& other)\r
index 15beb66c0ac96ea07a5d202ae8848195abfe72de..266c3d43b8f923fc376561663bc3c203916fc9b4 100644 (file)
@@ -33,13 +33,14 @@ namespace caspar { namespace core {
 \r
 class write_frame;\r
 class host_buffer;\r
-class video_channel_context;\r
+class ogl_device;\r
+struct video_format_desc;\r
 struct pixel_format_desc;\r
 \r
 class image_mixer : public core::frame_visitor, boost::noncopyable\r
 {\r
 public:\r
-       image_mixer(video_channel_context& context);\r
+       image_mixer(ogl_device& ogl, const video_format_desc& format_desc);\r
        \r
        virtual void begin(core::basic_frame& frame);\r
        virtual void visit(core::write_frame& frame);\r
@@ -52,7 +53,7 @@ public:
        \r
        boost::unique_future<safe_ptr<host_buffer>> render();\r
 \r
-       safe_ptr<write_frame> create_frame(const void* tag, const core::pixel_format_desc& format);\r
+       safe_ptr<write_frame> create_frame(const void* tag, const pixel_format_desc& format);\r
 \r
 private:\r
        struct implementation;\r
index 4fbf8d8a5a451cde9df712d57f920aaebbd25729..0f0e1ad56c9e7ee8343ee8fcd54a5e066f949919 100644 (file)
@@ -104,7 +104,7 @@ public:
        implementation(video_channel_context& video_channel) \r
                : channel_(video_channel)\r
                , audio_mixer_(channel_.get_format_desc())\r
-               , image_mixer_(channel_)\r
+               , image_mixer_(channel_.ogl(), channel_.get_format_desc())\r
                , buffer_size_(env::properties().get("configuration.producers.buffer-depth", 1))\r
        {       \r
                CASPAR_LOG(info) << print() << L" Successfully initialized . Buffer-depth: " << buffer_size_;   \r
index a24afe7457c5b01a4c8bc1d07187a214d66da0b3..ecff4f7afbdd295909c7afbda5a9a64e54e08e93 100644 (file)
@@ -33,7 +33,7 @@
     </producers>\r
     <channels>\r
     <channel>\r
-      <video-mode>1080i5000</video-mode>\r
+      <video-mode>PAL</video-mode>\r
       <consumers>\r
         <decklink>\r
           <device>1</device>\r