]> git.sesse.net Git - casparcg/commitdiff
Manually merged 1e8f06f8dbd1f5c4f447c1bc60a60e600ad1b942 from master
authorHelge Norberg <helge.norberg@svt.se>
Tue, 9 Apr 2013 08:10:44 +0000 (10:10 +0200)
committerHelge Norberg <helge.norberg@svt.se>
Tue, 9 Apr 2013 08:10:44 +0000 (10:10 +0200)
core/mixer/mixer.cpp
core/mixer/mixer.h
protocol/amcp/AMCPCommandsImpl.cpp

index c518255da3b7d2fc739404d4837d72cfb03411df..9756f750dbae627b922e0554f3ed758476ac0348 100644 (file)
@@ -122,7 +122,22 @@ public:
                                it->second = value;
                }, task_priority::high_priority);
        }
-       
+
+       void clear_blend_mode(int index)
+       {
+               executor_.begin_invoke([=]
+               {
+                       blend_modes_.erase(index);
+               }, task_priority::high_priority);
+       }
+
+       void clear_blend_modes()
+       {
+               executor_.begin_invoke([=]
+               {
+                       blend_modes_.clear();
+               }, task_priority::high_priority);
+       }       
        boost::unique_future<boost::property_tree::wptree> info() const
        {
                boost::promise<boost::property_tree::wptree> info;
@@ -134,6 +149,8 @@ public:
 mixer::mixer(spl::shared_ptr<diagnostics::graph> graph, spl::shared_ptr<image_mixer> image_mixer) 
        : impl_(new impl(std::move(graph), std::move(image_mixer))){}
 void mixer::set_blend_mode(int index, blend_mode value){impl_->set_blend_mode(index, value);}
+void mixer::clear_blend_mode(int index) { impl_->clear_blend_mode(index); }
+void mixer::clear_blend_modes() { impl_->clear_blend_modes(); }
 boost::unique_future<boost::property_tree::wptree> mixer::info() const{return impl_->info();}
 const_frame mixer::operator()(std::map<int, draw_frame> frames, const struct video_format_desc& format_desc){return (*impl_)(std::move(frames), format_desc);}
 mutable_frame mixer::create_frame(const void* tag, const core::pixel_format_desc& desc) {return impl_->image_mixer_->create_frame(tag, desc);}
index d4cceaa3f7fd3ae4218ebb3a5deb8c3c57ebd288..66ac15a1ad7829c758c696deaa3a67f22857a8b6 100644 (file)
@@ -56,6 +56,10 @@ public:
        
        void set_blend_mode(int index, blend_mode value);
 
+       void clear_blend_mode(int index);
+
+       void clear_blend_modes();
+
        class mutable_frame create_frame(const void* tag, const struct pixel_format_desc& desc);
 
        // Properties
index 8e4e759fcbcd1014efda870014761b3d83c08c0b..49551c08c9894f09a37ec8cabc074052bb6cba41 100644 (file)
@@ -558,10 +558,17 @@ bool MixerCommand::DoExecute()
                else if(_parameters[0] == L"CLEAR")
                {
                        int layer = GetLayerIndex(std::numeric_limits<int>::max());
-                       if(layer ==     std::numeric_limits<int>::max())
+
+                       if (layer == std::numeric_limits<int>::max())
+                       {
                                GetChannel()->stage().clear_transforms();
+                               GetChannel()->mixer().clear_blend_modes();
+                       }
                        else
+                       {
                                GetChannel()->stage().clear_transforms(layer);
+                               GetChannel()->mixer().clear_blend_mode(layer);
+                       }
                }
                else if(_parameters[0] == L"COMMIT")
                {