]> git.sesse.net Git - casparcg/blobdiff - core/producer/transition/transition_producer.cpp
2.0. - image_mixer: Fixed bug where amongst others mixing to alpha did not work.
[casparcg] / core / producer / transition / transition_producer.cpp
index 073e6b5176a78d3169f11b52d8efe6dda705d77c..b2f1dbafb7a4c04ea98971e525cdc740b1c92693 100644 (file)
@@ -68,31 +68,29 @@ struct transition_producer : public frame_producer
                if(current_frame_++ >= info_.duration)\r
                        return basic_frame::eof();\r
                \r
-               auto dest       = core::basic_frame::empty();\r
-               auto source     = core::basic_frame::empty();\r
-\r
-               tbb::parallel_invoke\r
-               (\r
-                       [&]\r
-                       {\r
-                               dest = receive_and_follow(dest_producer_, hints);\r
-                               if(dest == core::basic_frame::late())\r
-                                       dest = dest_producer_->last_frame();\r
-                       },\r
-                       [&]\r
-                       {\r
-                               source = receive_and_follow(source_producer_, hints);\r
-                               if(source == core::basic_frame::late())\r
-                                       source = source_producer_->last_frame();\r
-                       }\r
-               );\r
+               auto dest = basic_frame::empty();\r
+               auto source = basic_frame::empty();\r
+\r
+               tbb::parallel_invoke(\r
+               [&]\r
+               {\r
+                       dest = receive_and_follow(dest_producer_, hints);\r
+                       if(dest == core::basic_frame::late())\r
+                               dest = dest_producer_->last_frame();\r
+               },\r
+               [&]\r
+               {\r
+                       source = receive_and_follow(source_producer_, hints);\r
+                       if(source == core::basic_frame::late())\r
+                               source = source_producer_->last_frame();\r
+               });\r
 \r
                return last_frame_ = compose(dest, source);\r
        }\r
 \r
        virtual safe_ptr<core::basic_frame> last_frame() const\r
        {\r
-               return last_frame_;\r
+               return disable_audio(last_frame_);\r
        }\r
 \r
        virtual int64_t nb_frames() const \r
@@ -134,7 +132,10 @@ struct transition_producer : public frame_producer
                if(info_.type == transition::mix)\r
                {\r
                        d_frame1->get_image_transform().set_opacity(delta1);    \r
-                       d_frame2->get_image_transform().set_opacity(delta2);    \r
+                       d_frame2->get_image_transform().set_opacity(delta2);\r
+\r
+                       s_frame1->get_image_transform().set_opacity(1.0-delta1);        \r
+                       s_frame2->get_image_transform().set_opacity(1.0-delta2);                \r
                }\r
                else if(info_.type == transition::slide)\r
                {\r