]> git.sesse.net Git - casparcg/commitdiff
2.0.0.2: decklink_consumer: Fixed key_only shuffliing bug.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 17 May 2011 09:50:21 +0000 (09:50 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 17 May 2011 09:50:21 +0000 (09:50 +0000)
         imxer_mixer: Moved rendering into kernel.

git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@764 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/mixer/image/image_kernel.cpp
core/mixer/image/image_kernel.h
core/mixer/image/image_mixer.cpp
modules/decklink/consumer/decklink_consumer.cpp
shell/main.cpp

index c3d3e709553fb5bc164d1442959b2b1e4db853a3..0ac999961f4c22613648d6145db195238b7a1697 100644 (file)
@@ -300,7 +300,7 @@ public:
 \r
 image_kernel::image_kernel() : impl_(new implementation()){}\r
 \r
-void image_kernel::apply(const core::pixel_format_desc& pix_desc, const core::image_transform& transform, bool has_separate_key)\r
+void image_kernel::draw(size_t width, size_t height, const core::pixel_format_desc& pix_desc, const core::image_transform& transform, bool has_separate_key)\r
 {\r
        impl_->shaders()[pix_desc.pix_fmt].use();\r
 \r
@@ -314,6 +314,28 @@ void image_kernel::apply(const core::pixel_format_desc& pix_desc, const core::im
                glPolygonStipple(lower_pattern);\r
        else\r
                glPolygonStipple(progressive_pattern);\r
+                       \r
+       GL(glColor4d(1.0, 1.0, 1.0, transform.get_opacity()));\r
+       GL(glViewport(0, 0, width, height));\r
+                                               \r
+       auto m_p = transform.get_key_translation();\r
+       auto m_s = transform.get_key_scale();\r
+       double w = static_cast<double>(width);\r
+       double h = static_cast<double>(height);\r
+\r
+       GL(glEnable(GL_SCISSOR_TEST));\r
+       GL(glScissor(static_cast<size_t>(m_p[0]*w), static_cast<size_t>(m_p[1]*h), static_cast<size_t>(m_s[0]*w), static_cast<size_t>(m_s[1]*h)));\r
+                       \r
+       auto f_p = transform.get_fill_translation();\r
+       auto f_s = transform.get_fill_scale();\r
+                       \r
+       glBegin(GL_QUADS);\r
+               glMultiTexCoord2d(GL_TEXTURE0, 0.0, 0.0); glMultiTexCoord2d(GL_TEXTURE1,  f_p[0]        ,  f_p[1]        );             glVertex2d( f_p[0]        *2.0-1.0,  f_p[1]        *2.0-1.0);\r
+               glMultiTexCoord2d(GL_TEXTURE0, 1.0, 0.0); glMultiTexCoord2d(GL_TEXTURE1, (f_p[0]+f_s[0]),  f_p[1]        );             glVertex2d((f_p[0]+f_s[0])*2.0-1.0,  f_p[1]        *2.0-1.0);\r
+               glMultiTexCoord2d(GL_TEXTURE0, 1.0, 1.0); glMultiTexCoord2d(GL_TEXTURE1, (f_p[0]+f_s[0]), (f_p[1]+f_s[1]));             glVertex2d((f_p[0]+f_s[0])*2.0-1.0, (f_p[1]+f_s[1])*2.0-1.0);\r
+               glMultiTexCoord2d(GL_TEXTURE0, 0.0, 1.0); glMultiTexCoord2d(GL_TEXTURE1,  f_p[0]        , (f_p[1]+f_s[1]));             glVertex2d( f_p[0]        *2.0-1.0, (f_p[1]+f_s[1])*2.0-1.0);\r
+       glEnd();\r
+       GL(glDisable(GL_SCISSOR_TEST)); \r
 }\r
 \r
 }}
\ No newline at end of file
index 107da5f01ae02f277ec08b5881391b19f0db37a0..be756f477a5e2c1b488b86b806ba8d1cc08809c1 100644 (file)
@@ -30,7 +30,7 @@ class image_kernel
 {\r
 public:\r
        image_kernel();\r
-       void apply(const core::pixel_format_desc& pix_desc, const core::image_transform& mode, bool has_seperate_key);\r
+       void draw(size_t width, size_t height, const core::pixel_format_desc& pix_desc, const core::image_transform& mode, bool has_seperate_key);\r
 \r
 private:\r
        struct implementation;\r
index 4b531ecf1e39242cb784be6c0b4b67c34a3583ce..b16e42fc25c8939cc8c2c21b9f043d3c4ab0ba9e 100644 (file)
@@ -201,9 +201,10 @@ public:
 \r
                // Setup key and kernel\r
 \r
+               bool has_separate_key = false;\r
+\r
                if(transform.get_is_key())\r
                {\r
-                       kernel_.apply(desc, transform, false);\r
                        if(!is_key_)\r
                        {\r
                                key_target_->attach();\r
@@ -213,38 +214,20 @@ public:
                }               \r
                else\r
                {                                               \r
-                       kernel_.apply(desc, transform, is_key_);        \r
                        if(is_key_)\r
                        {\r
+                               has_separate_key = true;\r
                                is_key_ = false;\r
 \r
                                render_targets_[0]->attach();                   \r
                                GL(glActiveTexture(GL_TEXTURE0+3));\r
                                key_target_->bind();\r
                        }       \r
-               }               \r
+               }       \r
 \r
-               GL(glColor4d(1.0, 1.0, 1.0, transform.get_opacity()));\r
-               GL(glViewport(0, 0, format_desc_.width, format_desc_.height));\r
-                                               \r
-               auto m_p = transform.get_key_translation();\r
-               auto m_s = transform.get_key_scale();\r
-               double w = static_cast<double>(format_desc_.width);\r
-               double h = static_cast<double>(format_desc_.height);\r
+               // Draw\r
 \r
-               GL(glEnable(GL_SCISSOR_TEST));\r
-               GL(glScissor(static_cast<size_t>(m_p[0]*w), static_cast<size_t>(m_p[1]*h), static_cast<size_t>(m_s[0]*w), static_cast<size_t>(m_s[1]*h)));\r
-                       \r
-               auto f_p = transform.get_fill_translation();\r
-               auto f_s = transform.get_fill_scale();\r
-                       \r
-               glBegin(GL_QUADS);\r
-                       glMultiTexCoord2d(GL_TEXTURE0, 0.0, 0.0); glMultiTexCoord2d(GL_TEXTURE1,  f_p[0]        ,  f_p[1]        );             glVertex2d( f_p[0]        *2.0-1.0,  f_p[1]        *2.0-1.0);\r
-                       glMultiTexCoord2d(GL_TEXTURE0, 1.0, 0.0); glMultiTexCoord2d(GL_TEXTURE1, (f_p[0]+f_s[0]),  f_p[1]        );             glVertex2d((f_p[0]+f_s[0])*2.0-1.0,  f_p[1]        *2.0-1.0);\r
-                       glMultiTexCoord2d(GL_TEXTURE0, 1.0, 1.0); glMultiTexCoord2d(GL_TEXTURE1, (f_p[0]+f_s[0]), (f_p[1]+f_s[1]));             glVertex2d((f_p[0]+f_s[0])*2.0-1.0, (f_p[1]+f_s[1])*2.0-1.0);\r
-                       glMultiTexCoord2d(GL_TEXTURE0, 0.0, 1.0); glMultiTexCoord2d(GL_TEXTURE1,  f_p[0]        , (f_p[1]+f_s[1]));             glVertex2d( f_p[0]        *2.0-1.0, (f_p[1]+f_s[1])*2.0-1.0);\r
-               glEnd();\r
-               GL(glDisable(GL_SCISSOR_TEST));         \r
+               kernel_.draw(format_desc_.width, format_desc_.height, desc, transform, has_separate_key);       \r
        }\r
                        \r
        std::vector<safe_ptr<host_buffer>> create_buffers(const core::pixel_format_desc& format)\r
index 132890004c2f8aa96410f81daf12ec887f4def5c..694dad52a42fe89d65187463bf617f882b5137ff 100644 (file)
@@ -123,8 +123,8 @@ std::shared_ptr<IDeckLinkVideoFrame> make_alpha_only_frame(const CComQIPtr<IDeck
        void* bytes = nullptr;\r
        if(FAILED(result->GetBytes(&bytes)))\r
                BOOST_THROW_EXCEPTION(caspar_exception());\r
-\r
-       fast_memsfhl(reinterpret_cast<unsigned char*>(bytes), frame->image_data().begin(), frame->image_data().size(), 0x03030303, 0x07070707, 0x0B0B0B0B, 0x0F0F0F0F);\r
+                       \r
+       fast_memsfhl(reinterpret_cast<unsigned char*>(bytes), frame->image_data().begin(), frame->image_data().size(), 0x0F0F0F0F, 0x0B0B0B0B, 0x07070707, 0x03030303);\r
 \r
        return std::shared_ptr<IDeckLinkVideoFrame>(result, [](IDeckLinkMutableVideoFrame* p) {p->Release();});\r
 }\r
index 1c1c022f4ce60fef56340208bf904d0cf4c071db..1089edd7ee04c2e00ef3ad38b7617ea850f134b8 100644 (file)
@@ -214,7 +214,7 @@ int main(int argc, wchar_t* argv[])
                        else if(wcmd.substr(0, 1) == L"6")\r
                                wcmd = L"CG 1-2 ADD 1 BBTELEFONARE 1";\r
                        else if(wcmd.substr(0, 1) == L"7")\r
-                               wcmd = L"LOAD 1-1 720p2500";\r
+                               wcmd = L"CG 1-2 ADD 1 " + wcmd.substr(1, wcmd.length()-1) + L" 1";\r
                        else if(wcmd.substr(0, 1) == L"8")\r
                                wcmd = L"LOAD 1-1 #FFFFFFFF AUTOPLAY";\r
                        else if(wcmd.substr(0, 1) == L"9")\r