]> git.sesse.net Git - casparcg/blobdiff - core/mixer/mixer.cpp
2.0. audio:
[casparcg] / core / mixer / mixer.cpp
index 804ba41e5e1bfc9a2bc62e0ed403fbff3f17c3c2..8353d4170769bd351b345e049b7a00899be812c4 100644 (file)
@@ -96,7 +96,7 @@ struct mixer::implementation : boost::noncopyable
        std::unordered_map<int, tweened_transform<core::frame_transform>> transforms_;  \r
        std::unordered_map<int, blend_mode::type> blend_modes_;\r
 \r
-       std::queue<std::pair<boost::unique_future<safe_ptr<host_buffer>>, std::vector<int16_t>>> buffer_;\r
+       std::queue<std::pair<boost::unique_future<safe_ptr<host_buffer>>, core::audio_buffer>> buffer_;\r
        \r
        const size_t buffer_size_;\r
 \r
@@ -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
@@ -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,7 +177,7 @@ 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
@@ -188,12 +186,15 @@ public:
                {\r
                        transforms_.clear();\r
                        blend_modes_.clear();\r
-               });\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