]> git.sesse.net Git - casparcg/commitdiff
2.0. mixer: Removed channel transforms, use layer transforms instead.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Mon, 27 Jun 2011 08:01:06 +0000 (08:01 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Mon, 27 Jun 2011 08:01:06 +0000 (08:01 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@958 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

core/mixer/mixer.cpp
core/mixer/mixer.h
protocol/amcp/AMCPCommandsImpl.cpp

index 8af5ae7de928c03d2723c1725c7dd298475723e5..e3ca66ab53d94430dd646521415c2c929bf5d1d8 100644 (file)
@@ -95,8 +95,6 @@ struct mixer::implementation : boost::noncopyable
        boost::fusion::map<boost::fusion::pair<core::image_transform, image_transforms>,\r
                                        boost::fusion::pair<core::audio_transform, audio_transforms>> transforms_;\r
        \r
-       boost::fusion::map<boost::fusion::pair<core::image_transform, tweened_transform<core::image_transform>>,\r
-                                       boost::fusion::pair<core::audio_transform, tweened_transform<core::audio_transform>>> root_transforms_;\r
 public:\r
        implementation(video_channel_context& video_channel) \r
                : channel_(video_channel)\r
@@ -136,26 +134,10 @@ public:
        {\r
                channel_.execution().invoke([&]\r
                {\r
-                       set_transform(image_transform(), 0, L"none");\r
-                       set_transform(audio_transform(), 0, L"none");\r
-\r
                        boost::fusion::at_key<image_transform>(transforms_).clear();\r
                        boost::fusion::at_key<audio_transform>(transforms_).clear();\r
                });\r
        }\r
-                       \r
-       template<typename T>    \r
-       void set_transform(const T& transform, unsigned int mix_duration, const std::wstring& tween)\r
-       {\r
-               channel_.execution().invoke([&]\r
-               {\r
-                       auto& root = boost::fusion::at_key<T>(root_transforms_);\r
-\r
-                       auto src = root.fetch();\r
-                       auto dst = transform;\r
-                       root = tweened_transform<T>(src, dst, mix_duration, tween);\r
-               });\r
-       }\r
                \r
        template<typename T>\r
        void set_transform(int index, const T& transform, unsigned int mix_duration, const std::wstring& tween)\r
@@ -169,20 +151,7 @@ public:
                        transforms[index] = tweened_transform<T>(src, dst, mix_duration, tween);\r
                });\r
        }\r
-               \r
-       template<typename T>\r
-       void apply_transform(const std::function<T(const T&)>& transform, unsigned int mix_duration, const std::wstring& tween)\r
-       {\r
-               return channel_.execution().invoke([&]\r
-               {\r
-                       auto& root = boost::fusion::at_key<T>(root_transforms_);\r
-\r
-                       auto src = root.fetch();\r
-                       auto dst = transform(src);\r
-                       root = tweened_transform<T>(src, dst, mix_duration, tween);\r
-               });\r
-       }\r
-               \r
+                               \r
        template<typename T>\r
        void apply_transform(int index, const std::function<T(T)>& transform, unsigned int mix_duration, const std::wstring& tween)\r
        {\r
@@ -205,7 +174,6 @@ private:
                \r
        safe_ptr<host_buffer> mix_image(std::map<int, safe_ptr<core::basic_frame>> frames)\r
        {               \r
-               auto& root_image_transform = boost::fusion::at_key<core::image_transform>(root_transforms_);\r
                auto& image_transforms = boost::fusion::at_key<core::image_transform>(transforms_);\r
                \r
                BOOST_FOREACH(auto& frame, frames)\r
@@ -217,8 +185,8 @@ private:
                                auto frame1 = make_safe<core::basic_frame>(frame.second);\r
                                auto frame2 = make_safe<core::basic_frame>(frame.second);\r
                                \r
-                               frame1->get_image_transform() = root_image_transform.fetch_and_tick(1)*image_transforms[frame.first].fetch_and_tick(1);\r
-                               frame2->get_image_transform() = root_image_transform.fetch_and_tick(1)*image_transforms[frame.first].fetch_and_tick(1);\r
+                               frame1->get_image_transform() = image_transforms[frame.first].fetch_and_tick(1);\r
+                               frame2->get_image_transform() = image_transforms[frame.first].fetch_and_tick(1);\r
 \r
                                if(frame1->get_image_transform() != frame2->get_image_transform())\r
                                        core::basic_frame::interlace(frame1, frame2, channel_.get_format_desc().mode)->accept(image_mixer_);\r
@@ -228,7 +196,7 @@ private:
                        else\r
                        {\r
                                auto frame1 = make_safe<core::basic_frame>(frame.second);\r
-                               frame1->get_image_transform() = root_image_transform.fetch_and_tick(1)*image_transforms[frame.first].fetch_and_tick(1);\r
+                               frame1->get_image_transform() = image_transforms[frame.first].fetch_and_tick(1);\r
                                frame1->accept(image_mixer_);\r
                        }\r
 \r
@@ -240,7 +208,6 @@ private:
 \r
        std::vector<int16_t> mix_audio(const std::map<int, safe_ptr<core::basic_frame>>& frames)\r
        {\r
-               auto& root_audio_transform = boost::fusion::at_key<core::audio_transform>(root_transforms_);\r
                auto& audio_transforms = boost::fusion::at_key<core::audio_transform>(transforms_);\r
 \r
                BOOST_FOREACH(auto& frame, frames)\r
@@ -248,7 +215,7 @@ private:
                        const unsigned int num = channel_.get_format_desc().mode == core::video_mode::progressive ? 1 : 2;\r
 \r
                        auto frame1 = make_safe<core::basic_frame>(frame.second);\r
-                       frame1->get_audio_transform() = root_audio_transform.fetch_and_tick(num)*audio_transforms[frame.first].fetch_and_tick(num);\r
+                       frame1->get_audio_transform() = audio_transforms[frame.first].fetch_and_tick(num);\r
                        frame1->accept(audio_mixer_);\r
                }\r
 \r
@@ -269,13 +236,9 @@ safe_ptr<core::write_frame> mixer::create_frame(const void* tag, size_t width, s
        return create_frame(tag, desc);\r
 }\r
 void mixer::reset_transforms(){impl_->reset_transforms();}\r
-void mixer::set_image_transform(const core::image_transform& transform, unsigned int mix_duration, const std::wstring& tween){impl_->set_transform<core::image_transform>(transform, mix_duration, tween);}\r
 void mixer::set_image_transform(int index, const core::image_transform& transform, unsigned int mix_duration, const std::wstring& tween){impl_->set_transform<core::image_transform>(index, transform, mix_duration, tween);}\r
-void mixer::set_audio_transform(const core::audio_transform& transform, unsigned int mix_duration, const std::wstring& tween){impl_->set_transform<core::audio_transform>(transform, mix_duration, tween);}\r
 void mixer::set_audio_transform(int index, const core::audio_transform& transform, unsigned int mix_duration, const std::wstring& tween){impl_->set_transform<core::audio_transform>(index, transform, mix_duration, tween);}\r
-void mixer::apply_image_transform(const std::function<core::image_transform(core::image_transform)>& transform, unsigned int mix_duration, const std::wstring& tween){impl_->apply_transform<core::image_transform>(transform, mix_duration, tween);}\r
 void mixer::apply_image_transform(int index, const std::function<core::image_transform(core::image_transform)>& transform, unsigned int mix_duration, const std::wstring& tween){impl_->apply_transform<core::image_transform>(index, transform, mix_duration, tween);}\r
-void mixer::apply_audio_transform(const std::function<core::audio_transform(core::audio_transform)>& transform, unsigned int mix_duration, const std::wstring& tween){impl_->apply_transform<core::audio_transform>(transform, mix_duration, tween);}\r
 void mixer::apply_audio_transform(int index, const std::function<core::audio_transform(core::audio_transform)>& transform, unsigned int mix_duration, const std::wstring& tween){impl_->apply_transform<core::audio_transform>(index, transform, mix_duration, tween);}\r
 \r
 }}
\ No newline at end of file
index 3958a36bae6f5894f34b73e3a68940562f88d771..f0f1c47965ce1f6af5fedeb3f4d3c7a5ade6dd89 100644 (file)
@@ -53,16 +53,9 @@ public:
 \r
        void reset_transforms();\r
 \r
-       void set_image_transform(const core::image_transform& transform, unsigned int mix_duration = 0, const std::wstring& tween = L"linear");\r
        void set_image_transform(int index, const core::image_transform& transform, unsigned int mix_duration = 0, const std::wstring& tween = L"linear");\r
-\r
-       void set_audio_transform(const core::audio_transform& transform, unsigned int mix_duration = 0, const std::wstring& tween = L"linear");\r
        void set_audio_transform(int index, const core::audio_transform& transform, unsigned int mix_duration = 0, const std::wstring& tween = L"linear");\r
-       \r
-       void apply_image_transform(const std::function<core::image_transform(core::image_transform)>& transform, unsigned int mix_duration = 0, const std::wstring& tween = L"linear");\r
        void apply_image_transform(int index, const std::function<core::image_transform(core::image_transform)>& transform, unsigned int mix_duration = 0, const std::wstring& tween = L"linear");\r
-\r
-       void apply_audio_transform(const std::function<core::audio_transform(core::audio_transform)>& transform, unsigned int mix_duration = 0, const std::wstring& tween = L"linear");\r
        void apply_audio_transform(int index, const std::function<core::audio_transform(core::audio_transform)>& transform, unsigned int mix_duration = 0, const std::wstring& tween = L"linear");\r
 \r
 private:\r
index ec30cf3bb38b96e557614f8a020564db8e47afca..a6c2acc1a5f64d945ef18e7358849acb1961291b 100644 (file)
@@ -216,11 +216,8 @@ bool MixerCommand::DoExecute()
                                        return transform;                                       \r
                                };\r
 \r
-                               int layer = GetLayerIndex(std::numeric_limits<int>::min());\r
-                               if(layer != std::numeric_limits<int>::min())                                    \r
-                                       GetChannel()->mixer()->apply_image_transform(GetLayerIndex(), transform, 0);\r
-                               else\r
-                                       GetChannel()->mixer()->apply_image_transform(transform, 0);\r
+                               int layer = GetLayerIndex();\r
+                               GetChannel()->mixer()->apply_image_transform(GetLayerIndex(), transform);\r
                        }\r
                        else if(_parameters[1] == L"OPACITY")\r
                        {\r
@@ -235,11 +232,8 @@ bool MixerCommand::DoExecute()
                                        return transform;                                       \r
                                };\r
 \r
-                               int layer = GetLayerIndex(std::numeric_limits<int>::min());\r
-                               if(layer != std::numeric_limits<int>::min())                                    \r
-                                       GetChannel()->mixer()->apply_image_transform(GetLayerIndex(), transform, duration, tween);\r
-                               else\r
-                                       GetChannel()->mixer()->apply_image_transform(transform, duration, tween);\r
+                               int layer = GetLayerIndex();\r
+                               GetChannel()->mixer()->apply_image_transform(GetLayerIndex(), transform, duration, tween);\r
                        }\r
                        else if(_parameters[1] == L"GAIN")\r
                        {\r
@@ -253,11 +247,8 @@ bool MixerCommand::DoExecute()
                                        return transform;                                       \r
                                };\r
 \r
-                               int layer = GetLayerIndex(std::numeric_limits<int>::min());\r
-                               if(layer != std::numeric_limits<int>::min())\r
-                                       GetChannel()->mixer()->apply_image_transform(GetLayerIndex(), transform, duration, tween);\r
-                               else\r
-                                       GetChannel()->mixer()->apply_image_transform(transform, duration, tween);\r
+                               int layer = GetLayerIndex();\r
+                               GetChannel()->mixer()->apply_image_transform(GetLayerIndex(), transform, duration, tween);\r
                        }\r
                        else if(_parameters[1] == L"FILL_RECT")\r
                        {\r
@@ -276,12 +267,9 @@ bool MixerCommand::DoExecute()
                                        transform.set_clip_scale(x_s, y_s);\r
                                        return transform;\r
                                };\r
-\r
-                               int layer = GetLayerIndex(std::numeric_limits<int>::min());\r
-                               if(layer != std::numeric_limits<int>::min())\r
-                                       GetChannel()->mixer()->apply_image_transform(GetLayerIndex(), transform, duration, tween);\r
-                               else\r
-                                       GetChannel()->mixer()->apply_image_transform(transform, duration, tween);\r
+                               \r
+                               int layer = GetLayerIndex();\r
+                               GetChannel()->mixer()->apply_image_transform(GetLayerIndex(), transform, duration, tween);\r
                        }\r
                        else if(_parameters[1] == L"CLIP_RECT")\r
                        {\r
@@ -298,12 +286,9 @@ bool MixerCommand::DoExecute()
                                        transform.set_clip_scale(x_s, y_s);\r
                                        return transform;\r
                                };\r
-\r
-                               int layer = GetLayerIndex(std::numeric_limits<int>::min());\r
-                               if(layer != std::numeric_limits<int>::min())\r
-                                       GetChannel()->mixer()->apply_image_transform(GetLayerIndex(), transform, duration, tween);\r
-                               else\r
-                                       GetChannel()->mixer()->apply_image_transform(transform, duration, tween);\r
+                               \r
+                               int layer = GetLayerIndex();\r
+                               GetChannel()->mixer()->apply_image_transform(GetLayerIndex(), transform, duration, tween);\r
                        }\r
                        else if(_parameters[1] == L"GRID")\r
                        {\r
@@ -337,23 +322,16 @@ bool MixerCommand::DoExecute()
                                        return transform;\r
                                };\r
                                \r
-                               int layer = GetLayerIndex(std::numeric_limits<int>::min());\r
-                               if(layer != std::numeric_limits<int>::min())\r
-                                       GetChannel()->mixer()->apply_image_transform(GetLayerIndex(), transform, 0);\r
-                               else\r
-                                       GetChannel()->mixer()->apply_image_transform(transform, 0);                             \r
-\r
+                               int layer = GetLayerIndex();\r
+                               GetChannel()->mixer()->apply_image_transform(GetLayerIndex(), transform, 0);    \r
                        }\r
                        else if(_parameters[1] == L"RESET")\r
                        {\r
                                int duration = _parameters.size() > 2 ? lexical_cast_or_default(_parameters[2], 0) : 0;\r
                                std::wstring tween = _parameters.size() > 3 ? _parameters[3] : L"linear";\r
-\r
-                               int layer = GetLayerIndex(std::numeric_limits<int>::min());\r
-                               if(layer != std::numeric_limits<int>::min())\r
-                                       GetChannel()->mixer()->set_image_transform(GetLayerIndex(), image_transform(), duration, tween);\r
-                               else\r
-                                       GetChannel()->mixer()->set_image_transform(image_transform(), duration, tween);\r
+                               \r
+                               int layer = GetLayerIndex();\r
+                               GetChannel()->mixer()->set_image_transform(GetLayerIndex(), image_transform(), duration, tween);\r
                        }\r
                }\r
                else if(_parameters[0] == L"AUDIO")\r
@@ -370,31 +348,19 @@ bool MixerCommand::DoExecute()
                                        return transform;\r
                                };\r
                                \r
-                               int layer = GetLayerIndex(std::numeric_limits<int>::min());\r
-                               if(layer != std::numeric_limits<int>::min())\r
-                                       GetChannel()->mixer()->apply_audio_transform(GetLayerIndex(), transform, duration, tween);\r
-                               else\r
-                                       GetChannel()->mixer()->apply_audio_transform(transform, duration, tween);\r
+                               int layer = GetLayerIndex();\r
+                               GetChannel()->mixer()->apply_audio_transform(GetLayerIndex(), transform, duration, tween);\r
                        }\r
                        else if(_parameters[1] == L"RESET")\r
                        {\r
                                int duration = _parameters.size() > 2 ? lexical_cast_or_default(_parameters[2], 0) : 0;\r
                                std::wstring tween = _parameters.size() > 3 ? _parameters[3] : L"linear";\r
-                               int layer = GetLayerIndex(std::numeric_limits<int>::min());\r
-                               if(layer != std::numeric_limits<int>::min())\r
-                                       GetChannel()->mixer()->set_audio_transform(GetLayerIndex(), audio_transform(), duration, tween);\r
-                               else                                               \r
-                                       GetChannel()->mixer()->set_audio_transform(audio_transform(), duration, tween);\r
+\r
+                               int layer = GetLayerIndex();\r
+                               GetChannel()->mixer()->set_audio_transform(GetLayerIndex(), audio_transform(), duration, tween);\r
                        }\r
                }\r
                else if(_parameters[0] == L"RESET")\r
-               {\r
-                       int duration = _parameters.size() > 2 ? lexical_cast_or_default(_parameters[2], 0) : 0;\r
-                       std::wstring tween = _parameters.size() > 3 ? _parameters[3] : L"linear";\r
-                       GetChannel()->mixer()->set_image_transform(image_transform(), duration, tween);\r
-                       GetChannel()->mixer()->set_audio_transform(audio_transform(), duration, tween);\r
-               }\r
-               else if(_parameters[0] == L"CLEAR")\r
                {\r
                        GetChannel()->mixer()->reset_transforms();\r
                }\r