]> git.sesse.net Git - casparcg/blobdiff - core/mixer/mixer.cpp
2.0. image_mixer: Refactored, draw fields in separate draw calls. This way we don...
[casparcg] / core / mixer / mixer.cpp
index d793d585d5ef33c73b95167d61a256d000989f3c..4fbf8d8a5a451cde9df712d57f920aaebbd25729 100644 (file)
@@ -126,9 +126,7 @@ public:
                                {                               \r
                                        auto frame2 = make_safe<core::basic_frame>(frame.second);\r
                                        frame2->get_frame_transform() = transforms_[frame.first].fetch_and_tick(1);\r
-                                               \r
-                                       if(frame1->get_frame_transform() != frame2->get_frame_transform())\r
-                                               frame1 = core::basic_frame::interlace(frame1, frame2, channel_.get_format_desc().field_mode);\r
+                                       frame1 = core::basic_frame::interlace(frame1, frame2, channel_.get_format_desc().field_mode);\r
                                }\r
                                                                        \r
                                frame1->accept(audio_mixer_);                                   \r
@@ -169,7 +167,7 @@ public:
                        auto src = transforms_[index].fetch();\r
                        auto dst = transform;\r
                        transforms_[index] = tweened_transform<frame_transform>(src, dst, mix_duration, tween);\r
-               });\r
+               }, high_priority);\r
        }\r
                                \r
        void apply_transform(int index, const std::function<frame_transform(frame_transform)>& transform, unsigned int mix_duration, const std::wstring& tween)\r
@@ -179,17 +177,24 @@ public:
                        auto src = transforms_[index].fetch();\r
                        auto dst = transform(src);\r
                        transforms_[index] = tweened_transform<frame_transform>(src, dst, mix_duration, tween);\r
-               });\r
+               }, high_priority);\r
        }\r
 \r
        void clear_transforms()\r
        {\r
-               channel_.execution().invoke([&]{transforms_.clear();});\r
+               channel_.execution().invoke([&]\r
+               {\r
+                       transforms_.clear();\r
+                       blend_modes_.clear();\r
+               }, high_priority);\r
        }\r
                \r
        void set_blend_mode(int index, blend_mode::type value)\r
        {\r
-               blend_modes_[index] = value;\r
+               channel_.execution().invoke([&]\r
+               {\r
+                       blend_modes_[index] = value;\r
+               }, high_priority);\r
        }\r
 \r
        std::wstring print() const\r